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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

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

本文转自博客园xingoo的博客,原文链接:[logstash-input-log4j]插件使用详解,如需转载请自行联系原博主。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
39
分享
相关文章
ASP.NET COR3.1 集成日志插件NLog
ASP.NET COR3.1 集成日志插件NLog
96 0
|
9月前
|
在Kubernetes(k8s)中部署Higress时,查看Wasm插件日志的方法如下
在Kubernetes(k8s)中部署Higress时,查看Wasm插件日志的方法如下
168 1
IDEA控制台如何查看格式化的SQL(MyBatis Log插件)
IDEA控制台如何查看格式化的SQL(MyBatis Log插件)
1526 0
IDEA插件-Mybatis Log Free日志替换
MyBatis Log Free 是一个免费的用于在 IntelliJ IDEA 中显示 MyBatis 日志的插件。它可以帮助您更方便地查看和分析 MyBatis 的 SQL 执行情况,以及定位潜在的性能问题,提高开发效率。
546 0
IDEA插件-Mybatis Log Free日志替换
IDEA插件-Mybatis Log Free日志替换
MyBatis Log Free 是一个免费的用于在 IntelliJ IDEA 中显示 MyBatis 日志的插件。它可以帮助您更方便地查看和分析 MyBatis 的 SQL 执行情况,以及定位潜在的性能问题,提高开发效率。
499 0
IDEA插件-Mybatis Log Free日志替换
【Azure 云服务】Azure Cloud Service (Extended Support) 云服务开启诊断日志插件 WAD Extension (Windows Azure Diagnostic) 无法正常工作的原因
【Azure 云服务】Azure Cloud Service (Extended Support) 云服务开启诊断日志插件 WAD Extension (Windows Azure Diagnostic) 无法正常工作的原因
使用日志上下文聚合插件使能上下文查询及Livetail
本文介绍如何使用日志上下文聚合插件保持日志的上下文,以及如何在控制台查询上下文
249 0
使用日志上下文聚合插件使能上下文查询及Livetail
写个代码扫描插件,再也不怕 log4j 等问题
写个代码扫描插件,再也不怕 log4j 等问题
60 0
同事写的console.log太多令人烦恼?来手撕一个vite插件去掉它
同事写的console.log太多令人烦恼?来手撕一个vite插件去掉它