首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Logstash 配置Java日志格式的方法

编程知识
2024年09月11日 16:45

Logstash 是用于日志收集的开源工具,通常与 Elasticsearch 和 Kibana 一起使用,形成 ELK Stack(现在称为 Elastic Stack)。Logstash 非常灵活,可以通过配置文件(通常是 .conf 文件)来定义数据的输入、处理和输出。对于处理 Java 日志,一个常见的场景是解析 Java 应用生成的日志文件(如使用 Log4j 或 Logback 生成的日志文件)。

1.方法一: Logstash 配置示例

下面是一个 Logstash 配置示例,该示例假设我们有一个 Java 应用,其日志文件遵循常见的日志格式,例如 Logback 的默认模式(包含时间戳、日志级别、线程名称、日志记录器名称和消息)。

首先,我们需要一个 Logstash 配置文件,比如命名为 java_log_pipeline.conf。以下是该配置文件的一个示例:

input {  
  file {  
    # 指定日志文件的路径  
    path => "/path/to/your/java/application/logs/app.log"  
    # 只在文件有新内容时触发读取  
    start_position => "beginning"  
    # 读取文件时使用的字符编码  
    codec => "plain" { charset => "UTF-8" }  
    # 检测文件变化的时间间隔(秒)  
    sincedb_path => "/dev/null"  
    # 忽略旧数据  
    ignore_older => 0  
  }  
}  
  
filter {  
  # 使用 grok 插件来解析日志  
  grok {  
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{DATA:thread}\] %{LOGLEVEL:level} %{DATA:logger} - %{GREEDYDATA:message}" }  
  }  
  
  # 可以添加其他过滤器,如 date、mutate 等  
  date {  
    match => ["timestamp", "ISO8601"]  
    target => "@timestamp"  
  }  
  
  # 转换日志级别为小写(可选)  
  mutate {  
    lowercase => ["level"]  
  }  
}  
  
output {  
  # 输出到 Elasticsearch  
  elasticsearch {  
    hosts => ["http://localhost:9200"]  
    index => "java-app-logs-%{+YYYY.MM.dd}"  
    document_type => "_doc"  
    # 如果 Elasticsearch 设置了用户名和密码  
    # user => "your_username"  
    # password => "your_password"  
  }  
  
  # 可以在控制台打印日志,用于调试  
  stdout {  
    codec => rubydebug  
  }  
}

注意事项

(1)文件路径path 字段需要修改为我们的 Java 应用实际生成日志文件的路径。

(2)时间戳格式:如果日志中的时间戳格式不是 ISO8601,我们需要修改 grok 插件中的 TIMESTAMP_ISO8601 为相应的模式。

(3)Elasticsearch 配置:如果我们的 Elasticsearch 服务不是运行在 localhost 或端口不是 9200,需要相应地修改 hosts 字段。

(4)调试:使用 stdout 输出可以帮助我们验证 Logstash 是否正确解析了日志。

这个配置示例首先通过 file 插件读取日志文件,然后使用 grok 插件来解析日志消息,并将其分解成更具体的字段(如时间戳、日志级别、消息等)。之后,使用 date 插件将时间戳字段转换为 Logstash 理解的格式,并作为事件的时间戳。最后,通过 elasticsearch 插件将处理后的日志发送到 Elasticsearch 进行存储和进一步分析。同时,使用 stdout 插件将日志打印到控制台以便于调试。

2.方法二: Logstash 输入、过滤和输出配置

除了之前提到的基于文件的输入配置外,Logstash 还支持多种其他类型的输入配置,这些配置可以根据我们的具体需求和环境进行选择和调整。以下是一些常见的 Logstash 输入、过滤和输出配置示例,这些配置可以与 Java 日志处理相结合:

2.1 输入配置

(1)TCP 输入
如果我们希望 Logstash 通过 TCP 端口接收来自 Java 应用的日志(例如,Java 应用配置了 Log4j 或 Logback 以发送日志到 TCP Socket),我们可以使用 TCP 输入插件。

input {  
  tcp {  
    port => 5000  
    codec => json_lines # 如果 Java 应用发送的是 JSON 格式的日志  
    # 或者使用 plain 编码,如果日志不是 JSON 格式  
    # codec => plain { charset => "UTF-8" }  
  }  
}

注意:如果 Java 应用发送的是非 JSON 格式的日志,并且我们希望使用 Grok 插件进行解析,我们可能需要保持 codec => plain 并确保日志格式与 Grok 模式匹配。

(2)Beats 输入
Logstash 可以通过 Beats input 插件接收来自 Filebeat 或其他 Beats 产品的数据。这种方法特别适合于需要从多个源收集日志的情况,并且 Filebeat 可以在宿主机上高效地收集、压缩和转发日志。

在 Logstash 配置中,我们不需要为 Beats 输入指定特别的配置,因为 Beats 会作为客户端发送数据到 Logstash 指定的端口(通常是 5044,但可以自定义)。然而,我们需要在 Filebeat 配置中指定 Logstash 的地址和端口。

2.2 过滤配置

除了之前提到的 Grok 插件外,Logstash 还提供了其他过滤插件,如 datemutatejson 等,用于进一步处理和转换日志数据。

JSON 过滤
如果 Java 应用发送的是 JSON 格式的日志,我们可以使用 json 插件来解析这些日志,并将 JSON 字段作为单独的字段提取出来。

filter {  
  json {  
    source => "message" # 假设整个日志消息是一个 JSON 字符串  
  }  
}

注意:如果日志消息本身已经是一个 JSON 对象,并且我们想直接解析它,那么上述配置是适用的。但是,如果日志消息包含 JSON 字符串(即被引号包围的 JSON),我们可能需要先在 grok 插件中提取该字符串,然后再使用 json 插件进行解析。

2.3 输出配置

除了 Elasticsearch 之外,Logstash 还支持多种输出配置,如文件、标准输出、HTTP、Kafka 等。

(1)文件输出
如果我们需要将处理后的日志保存到文件中,可以使用 file 输出插件。

output {  
  file {  
    path => "/path/to/your/output/file.log"  
    codec => line { format => "Custom format: %{message}" }  
  }  
}

注意:这里的 format 是可选的,用于定义输出文件的格式。如果不指定,Logstash 将使用默认的格式。

(2)标准输出
在调试过程中,我们可能希望将日志输出到控制台。这可以通过 stdout 插件实现。

output {  
  stdout { codec => rubydebug }  
}

rubydebug 编码器将提供一个易于阅读的格式化输出,包括事件的所有字段。

综上所述,Logstash 的配置非常灵活,可以根据我们的具体需求进行定制。上述示例提供了一些常见的配置选项,但请注意,我们需要根据我们的实际环境和需求进行选择和调整。

From:https://www.cnblogs.com/TS86/p/18408630
本文地址: http://shuzixingkong.net/article/1909
0评论
提交 加载更多评论
其他文章 VS2022 17.12.0 Preview2版本对Copilot的功能增强
前提条件,使用最新版的17.12.0 Preview2,并且有有效的Copilot AI订阅,那么可以体验这些新鲜好用的功能 增强了Copilot AI对IEnumerable Visualizer的可编辑表达式功能 我们可以通过AI实现一些复杂的条件筛查,并且可以即时验证结果是否符合预期,对于开发
VS2022 17.12.0 Preview2版本对Copilot的功能增强 VS2022 17.12.0 Preview2版本对Copilot的功能增强 VS2022 17.12.0 Preview2版本对Copilot的功能增强
SQL 高级语法 MERGE INTO
根据与源表相联接的结果,对目标表进行插入、更新、删除等操作。 例如,对目标表,如果源表存在的数据则更新,没有的则插入,就可以使用MEREG进行同步。 基本语法 MERGE INTO target_table USING source_table ON condition WHEN MATCHED T
.NET 9 RC1 正式发布,ASP.NET Core 得到完善
.NET 9 RC1 是 .NET 9 的第一个候选发布版本(Release Candidate),标志着该版本接近最终发布。这次更新包括增强的WebSocket API、新的压缩选项、高级SignalR跟踪以及.NET MAUI的更新,以改善文本对齐等。在文章还宣布了.NET Conf 2024的
数据库容灾等级
数据库容灾等级 在信息化时代,企业的数据安全和业务连续性变得至关重要,容灾备份作为确保数据不丢失和业务不中断的重要措施备受关注。 我们通常将容灾备份分为四个等级,从最基本的本地备份到复杂的异地多活系统,每个等级的特点和适用场景各不相同。 下面我们就来详细了解一下这四个等级的容灾备份方案。容灾备份容灾
数据库容灾等级 数据库容灾等级 数据库容灾等级
Blazor开发框架Known-V2.0.10
Known今天迎来了2.0的第11个版本,同时网站网址和板块也进行了一次升级改造,虽不完美,但一直在努力改变,之前一直在完善框架功能,忽略了文档的重要性,所以这次更新了文档和API。交流互动板块也在进行当中,尽请期待。 官方网站:http://known.org.cn 最新版本:V2.0.10 下面
Blazor开发框架Known-V2.0.10 Blazor开发框架Known-V2.0.10 Blazor开发框架Known-V2.0.10
一文看懂什么是架构
对程序员来说,架构是一个常见词汇。如果想成为一名架构师,对架构概念的理解必须清晰。否则,在制定架构方案时,肯定会漏洞百出,问题频发,这将对你的面试、晋升和团队领导产生负面影响。 我们看下维基百科关于架构的定义: 软件架构是抽象描述系统的一组结构,以及构建这些结构的规则。这些结构包括:软件要素、要素之
一文看懂什么是架构 一文看懂什么是架构
日志与追踪的完美融合:OpenTelemetry MDC 实践指南
前言 在前面两篇实战文章中: OpenTelemetry 实战:从零实现分布式链路追踪 OpenTelemetry 实战:从零实现应用指标监控 覆盖了可观测中的指标追踪和 metrics 监控,下面理应开始第三部分:日志。 但在开始日志之前还是要先将链路追踪和日志结合起来看看应用实际使用的实践。 通
日志与追踪的完美融合:OpenTelemetry MDC 实践指南 日志与追踪的完美融合:OpenTelemetry MDC 实践指南 日志与追踪的完美融合:OpenTelemetry MDC 实践指南
Redis集群slot迁移改造实践
Redis集群经常需要进行在线水平扩缩容,实际操作过程中发现迁移期间服务时延剧烈抖动,业务侧感知明显,为了应对以上问题对原生Redis集群slot迁移功能进行优化改造。
Redis集群slot迁移改造实践 Redis集群slot迁移改造实践 Redis集群slot迁移改造实践