关键词:
【中文标题】使用 Grok for Logstash 解析 Apache2 错误日志【英文标题】:Parse Apache2 Error logs with Grok for Logstash 【发布时间】:2013-06-24 06:32:12 【问题描述】:我正在尝试解析我的 apache2 错误日志,但遇到了一些麻烦。它似乎与过滤器不匹配。我很确定时间戳是错误的,但我不确定,我真的找不到任何文档来解决这个问题。另外,有没有办法将fields.errmsg
中的内容提供给我@message
?
日志
[Wed Jun 26 22:13:22 2013] [error] [client 10.10.10.100] PHP Fatal error: Uncaught exception '\Foo\Bar'
发件人配置
input
file
'path' => '/var/log/apache2/*-error.log'
'type' => 'apache-error'
filter
grok
type => "apache-error"
pattern => "\[%HTTPDATE:timestamp\] \[%WORD:class\] \[%WORD:originator %IP:clientip\] %GREEDYDATA:errmsg"
output
stdout
redis
'data_type' => 'list'
'host' => 'logstash.server.net'
'key' => 'logstash'
【问题讨论】:
【参考方案1】:不适合我:
EEE MMM dd HH:mm:ss yyyy
为我工作(Apache 2.4):
EEE MMM dd HH:mm:ss.SSSSSS yyyy
【讨论】:
【参考方案2】:我们的错误日志看起来有些不同:
[Tue Dec 08 12:30:35.997887 2015] [ssl:info] [pid 1178:tid 1072] (70014)End of file found: [client 10.129.24.77:49987] AH01991: SSL input filter read failed.
但我发现了一个完美的预定义模式:
HTTPD24_ERRORLOG
在Logstash source看到这个
【讨论】:
这是更好的方法 值得注意的是,HTTPD_ERRORLOG
将适用于 2.0 和 2.4 格式,因此如果您将带有 ansible 的 logstash 发送到异构环境(如我),那么您可能应该使用包罗万象的版本两者都适用。
@Robbie 能否请您展示一下您的过滤器配置,您是如何使用它的?【参考方案3】:
喂!
我知道我参加聚会有点晚了,但它开始了!
我在系统上创建了一个/etc/logstash/patterns.d/
目录,并在其中创建了一个名为apache-error
的文件,其中包含:
APACHE_ERROR_TIME %DAY %MONTH %MONTHDAY %TIME %YEAR
APACHE_ERROR_LOG \[%APACHE_ERROR_TIME:timestamp\] \[%LOGLEVEL:loglevel\] (?:\[client %IPORHOST:clientip\] )0,1%GREEDYDATA:errormsg
/etc/logstash/patterns.d/
将在logstash
配置中引用如下:
grok
patterns_dir => [ "/etc/logstash/patterns.d" ]
match => [ "message", "%APACHE_ERROR_LOG" ]
您可以在 Grok Debugger 进行测试,就像 Adam 在他的评论中提到的那样。似乎与您发送的示例日志条目一起工作得很好。我一直在与我的一位客户合作得很好。
上面的模式将最终消息放在errormsg
字段中。所以我只删除了message
字段。
这是我目前在我的 logstash 配置中使用的:
filter
if [type] == "apache_error_log"
grok
patterns_dir => [ "/etc/logstash/patterns.d" ]
match => [ "message", "%APACHE_ERROR_LOG" ]
if !("_grokparsefailure" in [tags])
mutate
remove_field => [ "message" ]
add_field => ["timestamp_submitted", "%@timestamp"]
date
# Try to pull the timestamp from the 'timestamp' field (parsed above with
# grok). The apache time format looks like: "18/Aug/2011:05:44:34 -0700"
# Sat Feb 08 06:31:09 2014
match => [ "timestamp", "EEE MMM dd HH:mm:ss yyyy" ]
remove_field => [ "timestamp" ]
geoip
source => "clientip"
请注意,我使用的是apache_error_log
,而不是apache-error
。
试一试。我很想知道这是否适用于您和其他人!
干杯!
【讨论】:
谢谢!一个快速说明:我正在使用 GELF 输出插件将日志发送到 Graylog2。它要求消息字段不能丢失,所以我不得不相应地调整模式。 我猜日志错误日志格式自这篇文章以来发生了变化,但如果它对某人有所帮助,我将 APACHE_ERROR_LOG 模式更新为如下所示:APACHE_ERROR_LOG \[%APACHE_ERROR_TIME:timestamp\] \[:%LOGLEVEL:loglevel\] \[pid %NUMBER:pid\] (?:\[client %IPORHOST:clientip:%POSINT:port\] )0,1%GREEDYDATA:errormsg
似乎对我不起作用.. [Sun Oct 11 23:38:09.105800 2015] [mpm_event:notice] [pid 21264:tid 140035264497536] AH00489: Apache/2.4.7 (Ubuntu) configured -- resuming normal operations
这个对我有用APACHE_ERROR_LOG \[%APACHE_ERROR_TIME:timestamp\] \[%WORD:source:%LOGLEVEL:loglevel\] \[pid %NUMBER:pid:tid %NUMBER:tid\] (?:\[client %IPORHOST:clientip:%POSINT:port\] )0,1%GREEDYDATA:errormsg
如果其他人也遇到这种情况,我需要在其中添加一个ssl
:APACHE_ERROR_TIME %DAY %MONTH %MONTHDAY %TIME %YEAR APACHE_ERROR_LOG \[%APACHE_ERROR_TIME:timestamp\] \[ssl:%LOGLEVEL:loglevel\] \[pid %NUMBER:pid\] (?:\[client %IPORHOST:clientip:%POSINT:port\] )0,1%GREEDYDATA:errormsg
【参考方案4】:
Logstash 有一个内置的 apache 日志解析器。
这是一个例子......
grok
type => 'company'
pattern => ["%COMBINEDAPACHELOG"]
add_tag => "apache"
作为参考,可以查看Logstash的docs
【讨论】:
感谢您指出这一点 - 没有意识到这一点。在将 Grok 模式放入配置文件之前,您应该使用 GrokDebugger 检查您的 Grok 模式。这是不言自明的。 grokdebug.herokuapp.com 不错。这有帮助。知道如何获得它,所以@message
与@fields.message
相同吗?
我不确定它是如何工作的。我知道您可以使用replace => [ "@message", "%message_remainder" ]
之类的东西来更新字段的值,但我不知道如何将@fields
添加到新的message
变量中。出于兴趣,你会用它做什么?我想不出一个用例。
我不希望整个日志行都是@message
,我只想要实际的错误
消息本身将始终存储在@message 中,除非您使用replace
函数更改它。我建议您继续前进的道路(来自问题中的 sn-p)。最好创建一个新变量errmsg
,然后访问错误消息,只需查看@fields.errmsg
logstash:日志解析的grok模式示例(代码片段)
...和分析工具中解析日志数据。在这里查看我的Grok教程“Logstash:Grokfilter入门”。但是用Grok解析日志可能会很棘手。本博客将研究一些Grok模式示例,这些示例可以帮助你了解如何解析日志数据。什么是grok?最初的术语实际... 查看详情
logstash:日志解析的grok模式示例(代码片段)
如果没有日志解析,搜索和可视化日志几乎是不可能的,一个被低估的技能记录器需要读取他们的数据。解析结构化你的传入(非结构化)日志,以便用户可以在调查期间或设置仪表板时搜索清晰的字段和值... 查看详情
elk日志处理之使用grok解析日志
...。Grok内置了120多种的正则表达式库,地址:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/ 查看详情
logstash:grok模式示例(代码片段)
Logstash可以轻松解析CSV和JSON文件,因为这些格式的数据组织得很好,可以进行Elasticsearch分析。但是,有时我们需要处理非结构化数据,例如纯文本日志。在这些情况下,我们需要使用LogstashGrok或其他第三方服... 查看详情
Logstash 应该只记录 grok 解析的消息
】Logstash应该只记录grok解析的消息【英文标题】:Logstashshouldlogonlygrokparsedmessages【发布时间】:2017-01-1609:54:07【问题描述】:目前我有一个ELK堆栈,其中的日志由filebeat传送,在logstash中的一些过滤器之后,它被转发到ES。由于有... 查看详情
Logstash Grok 解析器
】LogstashGrok解析器【英文标题】:LogstashGrokparser【发布时间】:2015-12-0217:10:00【问题描述】:我是log-stash和grok的新手,我需要解析非常自定义的日志文件。我在任何地方都找不到一个很好的教程来完成这项工作。尝试了syslog示... 查看详情
logstash笔记-----grok插件的正则表达式来解析日志
(一)简介: 丰富的过滤器插件的存在是logstash威力如此强大的重要因素。名为过滤器,其实提供的不单单是过滤的功能,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的logs... 查看详情
logstash / grok 模式文件
】logstash/grok模式文件【英文标题】:logstash/grokpatternfile【发布时间】:2015-09-2902:24:38【问题描述】:我正在解析IIS日志,当所有模式都在配置文件中时,我一切正常。我想取出所有模式并将它们放在一个模式文件中,但似乎无... 查看详情
Logstash - grok 使用消息以外的字段
】Logstash-grok使用消息以外的字段【英文标题】:Logstash-grokuseafieldotherthanmessage【发布时间】:2014-09-1505:55:01【问题描述】:我正在使用Logstash转发器从远程服务器接收Log4j生成的日志文件。日志事件的字段包括一个名为“文件”... 查看详情
logstash:grok模式示例(代码片段)
Logstash可以轻松解析CSV和JSON文件,因为这些格式的数据组织得很好,可以进行Elasticsearch分析。但是,有时我们需要处理非结构化数据,例如纯文本日志。在这些情况下,我们需要使用LogstashGrok或其他第三方服... 查看详情
elasticsearch-logstash-kibana(三)配置优化
...,nginx日志格式往往使用的是自定义的格式,我们需要把logstash中的message结构化后再存储,方便kibana的搜索和统计,因此需要对message进行解析。本文采用grok过滤器,使用match正则表达式解析,根据自己的log_format定制。nginx日志格... 查看详情
logstash语法常用案例解析
摘要此篇主要讲Filter插件,已经对nginx日志的各种处理实例接着上篇继续说插件1,Filter插件Grok:正则捕获Date:时间处理Mutate:数据修改Geoip:查询归类JSON:编解码Grok:解析和结构化任何文本。http://grokdebug.herokuapp.com/patterns# ... 查看详情
logstash的过滤插件及其应用
一、Logstash的过滤插件数据从源传输到存储库的过程中,Logstash过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便进行更强大的分析和实现商业价值。Logstash能够动态地转换和解析数据,不... 查看详情
logstash之grok(代码片段)
nginx匹配示例nginx日志格式\'$remote_user[$time_local]$http_x_Forwarded_for$remote_addr$request$status$upstream_status\'\'$http_x_forwarded_for\'\'$upstream_addr\'\'ups_resp_time:$upstream_response_time\'\'request_time:$request_time\';nginx日志示例-[09/May/2023:15:01:31+0800]11.20.1.3038.... 查看详情
logstash:使用自定义正则表达式模式(代码片段)
有时LogstashGrok没有我们需要的模式。幸运的是我们有正则表达式库:Oniguruma。在很多时候,如果Logstash所提供的正则表达不能满足我们的需求,我们选用定制自己的表达式。定义Logstash是一种服务器端数据处理管道ÿ... 查看详情
Logstash,grok 过滤器不适用于固定长度字段
】Logstash,grok过滤器不适用于固定长度字段【英文标题】:Logstash,grokfilternotworkingforfixedlengthfields【发布时间】:2015-11-1315:08:37【问题描述】:我是logstash的新手,我有一个带有固定长度字段的输入文件和一个使用正则表达式配置... 查看详情
grok 解析数据的重复字段值
...er中运行的uwsgi应用程序捕获日志的filebeat。数据被发送到logstash,它解析它并转发到elasticsearch。这里是logstashconf文件:inputbeatsport=>5044filtergrokma 查看详情
Grok 用于日志文件 Logstash
】Grok用于日志文件Logstash【英文标题】:GrokforlogfilesLogstash【发布时间】:2020-04-2212:03:00【问题描述】:我需要编写一个grok模式来检索“****”中的内容-----Startofscriptforserversitboap1at**FriApr1714:24:19**HKT2020---------**user11**8775110Apr16?00:00... 查看详情