• [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

  • 相关阅读:
    CQUOJ 10819 MUH and House of Cards
    CQUOJ 9920 Ladder
    CQUOJ 9906 Little Girl and Maximum XOR
    CQUOJ 10672 Kolya and Tandem Repeat
    CQUOJ 9711 Primes on Interval
    指针试水
    Another test
    Test
    二分图匹配的重要概念以及匈牙利算法
    二分图最大匹配
  • 原文地址:https://www.cnblogs.com/xing901022/p/4830684.html
Copyright © 2020-2023  润新知