Logstash合并多行日志为一行(Tomcat日志的合并和grok处理)

本文介绍如何使用Logstash将Tomcat的catalina.out日志中以日期开头的多行合并为一条记录,并进行grok处理。配置文件中的注释有助于理解和排除错误,成功运行logstash后,日志匹配完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tomcat的catalina.out日志如下:

[root@localhost logs]# cat to_catalina.log
-----------------alarm start------------------------
--------------mail start---------------
-----------------alarm start------------------------
--------------mail start---------------
[2020-04-01 03:37:33.595] ERROR [com.base.util.MailUtils @348] - 发送邮件失败!
javax.mail.MessagingException: Could not connect to SMTP host: smtphz.qiye.163.com, port: 25
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961) ~[mail-1.4.7.jar:1.4.7]
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654) ~[mail-1.4.7.jar:1.4.7]
	at javax.mail.Service.connect(Service.java:295) ~[mail-1.4.7.jar:1.4.7]
	at javax.mail.Service.connect(Service.java:176) ~[mail-1.4.7.jar:1.4.7]
	at com.base.util.MailUtils.sendMail(MailUtils.java:344) [classes/:?]
	at com.common.service.sysemail.SEmailService.sendEmail(SEmailService.java:109) [classes/:?]
	at com.timer.SysEmailOneMinuteTask.doTask(SysEmailOneMinuteTask.java:74) [classes/:?]
	at sun.reflect.GeneratedMethodAccessor670.invoke(Unknown Source) ~[?:?]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
	at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:269) [spring-core-4.0.2.RELEASE.jar:4.0.2
### Logstash 提取多行日志的配置 Logstash 的 `multiline` 插件可以用来处理多行日志条目。通过该插件,可以从多个行中组合成单个事件。以下是实现这一功能的具体方法。 #### 配置示例 以下是一个典型的 Logstash 配置文件片段,展示如何使用 `multiline` 进行多行日志提取: ```ruby input { file { path => "/path/to/logs/*.log" start_position => "beginning" sincedb_path => "/dev/null" # 确保每次重启都重新读取文件 } } filter { multiline { pattern => "^%{YEAR}-%{MONTHNUM}-%{MONTHDAY}" # 假设每行以日期开头的日志为新记录 negate => true # 如果不匹配模式,则认为属于上一条日志的一部分 what => "previous" # 将当前行附加到前一行 } grok { # 使用 Grok 解析最终的完整日志消息 match => { "message" => "%{GREEDYDATA:message_content}" } patterns_dir => ["/path/to/custom/patterns"] # 自定义模式路径可选[^3] } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "logs-multiline" } } ``` 上述配置中的关键部分解释如下: - **Input Section**: 定义了输入源为 `/path/to/logs/*.log` 文件,并设置从头开始读取日志数据。 - **Filter Section (Multiline)**: - `pattern`: 正则表达式用于识别新的日志条目。如果某一行不符合此正则表达式,则被认为是之前日志条目的延续。 - `negate`: 设置为 `true` 表明未匹配的行应被合并到之前的日志条目中。 - `what`: 指定将这些未匹配的行追加到何处(这里是前一行)。 - **Grok Filter**: 对于完整的多行日志条目,进一步解析其结构化字段以便存储或查询。 - **Output Section**: 输出目标是 Elasticsearch 实例,索引名称为 `logs-multiline`. #### 注意事项 为了确保正确处理多行日志,需注意以下几点: 1. 日志格式的一致性规律性至关重要。例如,在上面的例子中假设每一行以标准日期时间戳作为起始标志来区分不同日志项。 2. 可能需要调整 `sincedb_path` 参数以适应特定需求;通常将其指向 `/dev/null` 是为了避免重复消费旧有日志内容。 3. 若涉及复杂自定义日志格式,可能还需要扩展默认提供的 Grok 模式库或者创建自己的模式集合并加载它们。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值