怎么用filebeat收集json格式的tomcat日志

发布时间:2022-08-23 14:26:03 作者:iii
来源:亿速云 阅读:159

怎么用Filebeat收集JSON格式的Tomcat日志

在现代的分布式系统中,日志管理是一个至关重要的环节。Tomcat广泛使用的Java应用服务器,其日志信息对于监控、调试和性能分析至关重要。Filebeat是Elastic Stack中的一个轻量级日志收集器,它可以帮助我们高效地收集和传输日志数据。本文将详细介绍如何使用Filebeat收集JSON格式的Tomcat日志。

1. 环境准备

在开始之前,确保你已经具备以下环境:

2. 配置Tomcat输出JSON格式日志

默认情况下,Tomcat的日志格式是纯文本的。为了便于解析和分析,我们可以将Tomcat的日志格式配置为JSON格式。

2.1 修改logging.properties

找到Tomcat的conf/logging.properties文件,并进行如下修改:

handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

.level = INFO

# 配置FileHandler输出JSON格式日志
1catalina.org.apache.juli.FileHandler.level = INFO
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.formatter = org.apache.juli.JulFormatter
1catalina.org.apache.juli.FileHandler.formatter.json = true

# 配置ConsoleHandler输出JSON格式日志
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = org.apache.juli.JulFormatter
java.util.logging.ConsoleHandler.formatter.json = true

2.2 添加JSON格式化类

Tomcat默认的日志格式化类并不直接支持JSON格式。我们需要自定义一个JSON格式化类。创建一个新的Java类JsonFormatter.java

package org.apache.juli;

import java.util.logging.Formatter;
import java.util.logging.LogRecord;

public class JsonFormatter extends Formatter {
    @Override
    public String format(LogRecord record) {
        return String.format("{\"timestamp\":\"%s\",\"level\":\"%s\",\"logger\":\"%s\",\"message\":\"%s\"}\n",
                new java.util.Date(record.getMillis()),
                record.getLevel(),
                record.getLoggerName(),
                record.getMessage());
    }
}

编译该类并将其打包到Tomcat的lib目录下。

2.3 修改logging.properties以使用自定义格式化类

修改logging.properties文件,使用我们自定义的JsonFormatter

1catalina.org.apache.juli.FileHandler.formatter = org.apache.juli.JsonFormatter
java.util.logging.ConsoleHandler.formatter = org.apache.juli.JsonFormatter

2.4 重启Tomcat

完成上述配置后,重启Tomcat以使配置生效。

./bin/shutdown.sh
./bin/startup.sh

3. 配置Filebeat收集JSON格式日志

接下来,我们需要配置Filebeat来收集Tomcat生成的JSON格式日志。

3.1 修改Filebeat配置文件

找到Filebeat的配置文件filebeat.yml,并进行如下修改:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /path/to/tomcat/logs/catalina.*.log
  json.keys_under_root: true
  json.add_error_key: true

output.elasticsearch:
  hosts: ["localhost:9200"]
  index: "tomcat-logs-%{+yyyy.MM.dd}"

setup.kibana:
  host: "localhost:5601"

3.2 启动Filebeat

完成配置后,启动Filebeat:

./filebeat -e -c filebeat.yml

3.3 验证日志收集

在Kibana中查看是否成功收集到Tomcat的JSON格式日志。如果一切正常,你应该能够在Kibana中看到类似以下的日志条目:

{
  "timestamp": "2023-10-01T12:34:56.789Z",
  "level": "INFO",
  "logger": "org.apache.catalina.startup.Catalina",
  "message": "Server startup in 1234 ms"
}

4. 高级配置

4.1 多行日志处理

如果Tomcat的日志包含多行消息(如异常堆栈跟踪),我们需要配置Filebeat来处理多行日志。

filebeat.yml中添加以下配置:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /path/to/tomcat/logs/catalina.*.log
  json.keys_under_root: true
  json.add_error_key: true
  multiline.pattern: '^\{'
  multiline.negate: true
  multiline.match: after

4.2 日志过滤

如果你只想收集特定级别的日志(如ERROR级别),可以使用Filebeat的include_lines配置:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /path/to/tomcat/logs/catalina.*.log
  json.keys_under_root: true
  json.add_error_key: true
  include_lines: ['"level":"ERROR"']

4.3 日志解析

如果JSON日志中包含嵌套的JSON对象,可以使用Filebeat的json处理器来解析这些嵌套对象:

processors:
- decode_json_fields:
    fields: ["message"]
    target: ""

5. 总结

通过以上步骤,我们成功地配置了Tomcat输出JSON格式的日志,并使用Filebeat收集这些日志。JSON格式的日志不仅便于解析和分析,还能与Elasticsearch和Kibana无缝集成,为日志管理和监控提供了强大的支持。

在实际生产环境中,你可能还需要根据具体需求进一步调整和优化配置,例如增加日志轮转、设置日志保留策略等。希望本文能为你提供有价值的参考,帮助你更好地管理和利用Tomcat日志。

推荐阅读:
  1. filebeat nginx 日志处理配置
  2. Filebeat使用内置的mysql模块收集日志存储到ES集群并使用kibana存储

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

filebeat json tomcat

上一篇:怎么使用JavaScript封装弹框插件

下一篇:Pandas怎么将表格的前几行生成html

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》