[logstash-input-log4j]插件使用详解

news/2024/7/7 12:39:36

Log4j插件可以通过log4j.jar获取Java日志,搭配Log4j的SocketAppenderSocketHubAppender使用,常用于简单的集群日志汇总。

最小化的配置

input {
    log4j {
        host=>"localhost"
        port=>4560
    }
}
output {
    stdout {}
}

  log4j插件配置host以及port就能监听localhost上的4560端口的log4j消息。

  此时,如果你的log4j向本地主机以SocketAppender的方式输出日志消息,Logstash就能捕获到,参考的log4j配置文件如下:

<?xml version="1.0" encoding= "UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j=" http://jakarta.apache.org/log4j/" > 
       <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender" > 
             <layout class="org.apache.log4j.PatternLayout" > 
                   <param name="ConversionPattern" value="%d{yyyy/MM/dd-HH:mm:ss} >> %5p >> %t >> %l >> %m%n" /> 
             </layout> 
       </appender> 

     <appender name="socketAppender" class="org.apache.log4j.net.SocketAppender"> 
        <param name="remoteHost" value="localhost" /> 
        <param name="port" value="4560" /> 
        <param name="Threshold" value="INFO" /> 
        <param name="ReconnectionDelay" value="1000" /> 
        <param name="LocationInfo" value="true" /> 
      </appender>
   
       <root> 
             <priority value="info" /> 
             <appender-ref ref="ConsoleAppender" />
             <appender-ref ref="sockethubAppender" /> 
       </root> 
</log4j:configuration> 

重要参数详解

  mode logstash工作模式,可选"server"或者"client",默认是"server"

  server就是把logstash看做是日志的服务器,接收log4j主机端生成的日志消息。

  client则是把logstash看做是tcp的发起者,请求log4j主机返回日志消息。

 

  host 主机地址,字符串类型,如"localhost"或者"192.168.0.1"

  如果是server模式,就是监听的主机地址

  如果是client模式,就是连接的目标地址

 

  port 端口号,数字类型,如 4567 或者 12345

  如果是server模式,就是监听的端口号

  如果是client模式,就是连接的目标端口号

 

  data_timeout 超时时间,秒为单位。如果设置-1,则永不超时,默认是5

  如果某个tcp连接闲置了,则超过该时间限制,就断开或者关闭连接。

Server模式

  server模式就是把logstash作为服务器,输出日志消息的java程序所在的主机作为客户机,大致类似如下:

  Logstash的插件配置如下:

input{
    log4j {
        mode => "server"
        host => "localhost"#注意这里,这里是Logstash服务器的地址或者主机名
        port => 4560
    }
}
output{
    stdout{}
}

  java程序log4j日志配置文件如下:

<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
       <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender" >
             <layout class="org.apache.log4j.PatternLayout" >
                   <param name="ConversionPattern" value="%d{yyyy/MM/dd-HH:mm:ss} >> %5p >> %t >> %l >> %m%n" />
             </layout>
       </appender>
      <appender name="socketAppender" class="org.apache.log4j.net.SocketAppender">
        <param name="remoteHost" value="localhost" /><!-- 远程主机地址 -->
        <param name="port" value="4560" /><!-- 远程主机端口 -->
        <param name="Threshold" value="DEBUG" />
        <param name="ReconnectionDelay" value="60000" />
        <param name="LocationInfo" value="true" />
      </appender>
       <root>
             <priority value="debug" />
                        <appender-ref ref="ConsoleAppender" />
      <appender-ref ref="socketAppender" />
       </root>
</log4j:configuration>

   另外需要注意的是,如果使用server模式,监听的ip地址只能是本机地址,否则无法绑定socket

  例如,我本身的服务器地址是10.4.5.6,那么我要绑定一个远端机器,10.4.5.7,就会报如下错误:

Client模式

  client模式就是把Logstash当做客户端,去请求返回java程序所在的主机输出的日志,大致如下:

  logstash的配置如下:

input{
    log4j {
        mode => "client"
        host => "10.4.5.6"
        port => 9999
    }
}
output{
    stdout{}
}

  java程序这端的log4j配置文件如下:

<?xml version="1.0" encoding= "UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j=" http://jakarta.apache.org/log4j/" > 
       <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender" > 
             <layout class="org.apache.log4j.PatternLayout" > 
                   <param name="ConversionPattern" value="%d{yyyy/MM/dd-HH:mm:ss} >> %5p >> %t >> %l >> %m%n" /> 
             </layout> 
       </appender> 

    <appender name="sockethubAppender" class="org.apache.log4j.net.SocketHubAppender"> 
          <param name="port" value="9999" /> 
      <param name="Threshold" value="INFO" /> 
      <param name="LocationInfo" value="true" /> 
      </appender> 
   
       <root> 
            <priority value="info" /> 
            <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="sockethubAppender" /> 
       </root> 
</log4j:configuration> 

扩展

  其实从logstash源码的角度看,就比较好理解他们的不同工作了!

  可以看到,如果是server模式,logstash会创建一个新的线程,持续的监听目标主机和端口;如果是client模式,则是创建了一个tcp连接。

  对应来说,server模式对应log4j的SocketAppender模式,client模式对应log4j的SocketHubAppender模式。

  

  注意:

  1 如果是server模式,那么监听的主机地址应该是IP地址,写localhost会导致无法接收其他主机发送的信息。

  2 如果是client模式,监听的端口不能是4560

 

  关于Log4j插件大致的内容就是如此了。

参考

【1】logstash log4j插件:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html

【2】log4j SocketAppender:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketAppender.html

【3】log4j SocketHubAppender:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketHubAppender.html


http://www.niftyadmin.cn/n/4115351.html

相关文章

Maven项目中配置MyBatis Generator插件生成代码

2019独角兽企业重金招聘Python工程师标准>>> 参考&#xff1a; 官网&#xff1a;http://www.mybatis.org/generator/index.html 官网配置文件&#xff1a;http://www.mybatis.org/generator/configreference/xmlconfig.html 《 OSC-蛙牛的博客——数据库逆向框架代码…

cesium 获取多边形polygon中心点

//创建面 支持球面和平面坐标 var polygon viewer.entities.add({ polygon: { hierarchy: { positions: Cesium.Cartesian3.fromRadiansArray([ ]), }, outline: true, outlineColor: Cesium.Color.RED, outlineWidth: 3, material: Cesium.Color.YELLOW, }, }); var pyPosi…

vue离线状态创建项目

通过vue-cli工具命令vue init webpack vuedemo创建vue项目的时候报错&#xff0c;提示连接超时&#xff0c;应该是下载某个package的时候&#xff0c;需要翻墙&#xff0c;导致出现连接超时。超时错误截图如下&#xff1a; 按照网络上的提示&#xff0c;解决办法是改为离线创建…

Android-MVP架构

MVP 简介 MVP是模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;、主持人&#xff08;Presenter&#xff09;的缩写&#xff0c;分别代表项目中3个不同的模块。如图所示&#xff1a;imageView 对应于Activity、Fragment&#xff0c;负责界面的绘制以及与用…

cesium动态创建圆和矩形

cesium鼠标动态绘制线、面、圆、矩形&#xff1b;其他entity类型依此原理 var activeShapePoints []; var activeShape; var floatingPoint; var handler new Cesium.ScreenSpaceEventHandler(viewer.canvas); //双击鼠标左键清除默认事件 viewer.cesiumWidget.screenSpaceEv…

URI的常用使用场景

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;调web浏览器 Uri myBlogUri Uri.parse(" http://xxxxx.com "); returnIt new Intent(Intent.ACTION_VIEW, myBlogUri); 2&#xff0c;地图 Uri mapUri Uri.parse("geo:38.899533…

u盘在本机电脑读不出来,但别的机器可以读解决方案

测试环境 win10家庭中文版 一般这种问题都是驱动程序问题导致的&#xff0c;解决方法很简单&#xff0c;不管是win7还是win10都适用&#xff1a; 插入u盘然后在设备管理里删掉设备重新插拔试试。 详细步骤是&#xff1a; 插上U盘 打开设备管理器 找到移动磁盘的图标&#xff0…

linux下热插拔事件的产生是怎样通知到用户空间,kobject_uevent_env之uevent【转】...

转自&#xff1a;http://blog.csdn.net/myarrow/article/details/8259888 1&#xff0e;kobject, ktype, kset 1) kobject: 代表sysfs中的目录。 2) ktype: 代表kobject的类型&#xff0c;主要包含release函数和attr的读写函数。比如&#xff0c;所有的bus都有同一个bus_type&a…