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


    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

  • 相关阅读:
    python 常用的一些库
    Windows Server 2016-存储新增功能
    Windows Server 2016-Hyper-V 2016新增功能
    Windows Server 2016-Win Ser 2016已删减内容
    Windows Server 2016-Win Ser 2016新增功能
    Windows Server 2016-WinSer 2016标准版与数据中心版的区别
    Windows Server 2016-重置目录还原模式密码
    Windows Server 2016-清理残留域控信息
    Windows Server 2016-抢占FSMO角色
    Windows Server 2016-重命名域控制器
  • 原文地址:https://www.cnblogs.com/xing901022/p/4830684.html
Copyright © 2020-2023  润新知