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

Logstash 配置Java日志格式的方法的更多相关文章

  1. logstash收集java日志,多行合并成一行

    使用codec的multiline插件实现多行匹配,这是一个可以将多行进行合并的插件,而且可以使用what指定将匹配到的行与前面的行合并还是和后面的行合并. 1.java日志收集测试 input { ...

  2. Java日志格式应该是占位符还是字符串拼接

    背景 ​ 上次在群中,有个群友说自己把所有项目中,所有使用占位符打印日志的方式都修改成为了字符串拼接的方式,因为他曾经看了一篇文章,说字符串拼接的形式比占位符形式的性能更好,这个话题引起了大家的广泛讨 ...

  3. 【转】logstash配置java环境

    1.bin/logstash,新增 JAVA_CMD=/home/admin/soft/jdk1.8.0_121/bin JAVA_HOME=/home/admin/soft/jdk1.8.0_121 ...

  4. 第六章·Logstash深入-收集java日志

    1.通过Logstash收集java日志并输出到ES中 因为我们现在需要用Logstash收集tomcat日志,所以我们暂时将tomcat安装到Logstash所在机器,也就是db03:10.0.0. ...

  5. Linux配置java环境变量 【随手记】

    JAVA环境变量 1. PATH环境变量.作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序. 2. CLASSPATH环境变量.作用是 ...

  6. kong更改日志格式

    基于业务的需求,需要对网关层的日志进行适当定制,以满足使用kibana的制图. 对于kong的日志格式更改,可查看到的资料都过于繁琐,特此记录. 修改kong的日志格式 # ctl edit depl ...

  7. Java日志管理方法(转载)

    原文地址:http://www.cnblogs.com/leocook/p/log_java.html java开发中常见的几种日志管理方案有以下4种: 1. Commons-logging + lo ...

  8. java log4j基本配置及日志级别配置详解

    java log4j日志级别配置详解 1.1 前言 说出来真是丢脸,最近被公司派到客户公司面试外包开发岗位,本来准备了什么redis.rabbitMQ.SSM框架的相关面试题以及自己做过的一些项目回顾 ...

  9. java日志框架log4j详细配置及与slf4j联合使用教程

    最后更新于2017年02月09日 一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” <d ...

  10. java日志规约及配置示例终极总结

    目录 什么是日志 常用日志框架 日志级别详解 日志的记录时机 日志使用规约 logback 配置示例 loh4j2 配置示例 什么是日志? 简单的说,日志就是记录程序的运行轨迹,方便查找关键信息,也方 ...

随机推荐

  1. 全新发布!桌面端效率工具RunFlow

    RunFlow是一款跨平台的生产力工具,可以启动应用程序和搜索文件等,类似于Windows平台的Wox和PowerToys,同样也类似于Mac平台的Alfred和Raycast.但我们并不与这些工具相 ...

  2. Solo 开发者周刊 (第5期):打破常规,探索技术新边界

    这里会整合 Solo 社区每周推广内容.产品模块或活动投稿,每周五发布.在这期周刊中,我们将深入探讨开源软件产品的开发旅程,分享来自一线独立开发者的经验和见解.本杂志开源,欢迎投稿. 产品推荐 1. ...

  3. 苹果手机使用charles抓包无法下载charles证书

    苹果手机使用charles抓包无法下载charles证书的问题记录: 使用:chls.pro/ssl       --------无效 使用:http://chls.pro/ssl      ---- ...

  4. vue3 + ts 中出现 类型“typeof import(".........../node_modules/vue/dist/vue")”的参数不能赋给类型“Component<any, any, any, ComputedOptions, MethodOptions>”的参数。

    错误示例截图 解决方法 修改shims-vue.d.ts中的内容 declare module "*.vue" { import { defineComponent } from ...

  5. Windows安装虚拟机软件-VirtualBox

    1.VirtualBox简介 VirtualBox号称是最强的开源免费虚拟机软件,它不仅具有丰富的特色,而且性能也很优异. 它简单易用,可虚拟的系统包括Windows.Mac OS X.Linux.O ...

  6. 【MySQL】LEFT JOIN 踩坑

    一.问题发现: 主查询功能发现两条一样的记录,但是审批状态不一样,一个已通过,一个待审核 主表付款表: CREATE TABLE `pur_or_payment` ( `id` int(11) NOT ...

  7. 为什么模具设计人员中很多人不喜欢使用CAE仿真软件呢? —— 以汽车制造领域为例

    参考论文: 通常 的有限元分析软件在后处理 上只是将计算结果 以图形或表格的 方式显 示 在屏幕上 , 并没有对计算结果进行系统的整理 和提炼 . 在基于有 限元 计算结果 的反复设计过程 中, 设计 ...

  8. 【转载】 nohup和&区别

    原文地址: https://www.cnblogs.com/xinzaiyuan/p/12097919.html =========================================== ...

  9. Python报错:WARNING conda.models.version:get_matcher(542): Using .* with relational operator is superfluous and deprecated and will be removed in a future version of conda.

    参考: https://blog.csdn.net/weixin_45685859/article/details/132916216 报错: [23:59:14](pytorch) devil@OM ...

  10. Ubuntu18.04系统下网络文件系统nfs的安装及简单配置

    硬件环境: 两台Ubuntu18.04服务器使用局域网连接,IP分别为192.168.11.66 和 192.168.11.206. ================================= ...