我看到Grok在解析日志数据时非常强大和致命.我想在我们的应用程序中使用Grok进行日志解析,这是在java中.我如何从Java连接/使用Grok.
我一直在那里四处寻找,但找不到工作决议.我尝试在Logstash配置文件中使用Grok Filter来过滤Apache-Access日志文件.日志消息如下所示:{"message":"00.00.0.000 - - [dd/mm/YYYY:hh:mm:ii +0000] \"GET /index.html HTTP/1.1\" 200 00"}.
在这一刻,我只能通过使用过滤客户端IP grok { match => [ "message", "%{IP:client_ip}" ] }.
我想过滤:
- The GET method,
- requested page (index.html),
- HTTP/1.1\,
- server response 200
- the last number 00 after 200 inside the message body
Run Code Online (Sandbox Code Playgroud)
请注意,这些都不适合我:
grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }
Run Code Online (Sandbox Code Playgroud)
要么
grok { match => [ "message", "%{COMBINEDAPACHELOG}" ] }
Run Code Online (Sandbox Code Playgroud) 我一直在关注本指南:
http://deviantony.wordpress.com/2014/06/04/logstash-debug-configuration/
我希望能帮助我测试我的logstash过滤器,看看我是否在全职使用之前得到了所需的输出.
作为指南的一部分,它告诉您设置输入和输出,然后设置过滤器文件.输入似乎工作正常:
input {
stdin { }
}
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
output {
stdout {
codec => json
}
file {
codec => json
path => /tmp/debug-filters.json
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行logstash进程时,我收到以下错误(这里我用--configtest运行它,因为错误建议我尝试一下,但它不提供任何更多信息):
# /opt/logstash/bin/logstash -f /etc/logstash/debug.d -l /var/log/logstash/logstash-debug.log --configtest
Sending logstash logs to /var/log/logstash/logstash-debug.log.
Error: Expected one of #, ", ', -, [, { at line 21, column 17 (byte 288) after output {
stdout {
codec => json
}
file {
codec => json
path =>
Run Code Online (Sandbox Code Playgroud)
我已经尝试删除输出中的文件部分,我可以运行logstash进程,但是当我将日志行粘贴到shell时,我没有看到日志条目分解为我希望grok过滤器的组件打破它.我这样做的全部是:
Oct 30 08:57:01 VERBOSE[1447] …Run Code Online (Sandbox Code Playgroud) 我了解使用捕获组和非捕获组编写正则表达式的概念。
例如:
a(b|c)会匹配并捕获ab和ac
a(?:b|c)将匹配ab和ac但捕获一个
但是,当我制作一个新的自定义grok模式时,它有什么用?使用非捕获组又意味着什么?
在下面的HOUR中查看一些现有的grok模式:
HOUR (?:2[0123]|[01]?[0-9])
Run Code Online (Sandbox Code Playgroud)
在这里,我们还可以使用匹配小时格式(2[0123]|[01]?[0-9])。是什么使grok模式在这里使用非捕获表达式?我应该基于什么参数决定使用此参数(?:subex)
如何将此Logstash过滤器更改为不区分大小写?
filter {
if "foo" in [message] {
mutate { add_field => { "Alert_level" => "5" }}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试为我的日志文件编写grok模式,该日志文件有三种不同类型的日志,我想在类型名称(TYPE1,TYPE2,TYPE3)上放置一个过滤器,然后为这一个日志文件写入三种不同的grok模式.此外,我的日志文件是一个csv分隔文件.
日志文件:
TYPE1,word,word,word,num
TYPE2,word,word,word,word
TYPE3,num,word,num,word
这是我到目前为止所尝试的:
filter {
if [message] =~ /TYPE1/ {
grok {
match => [ "message", "%{WORD:type},%{WORD:a1"},%{WORD:a2"},%{WORD:a3"},%{POSINT:a4"}]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.另外,在这个配置文件中,我为其他文件(运行良好)编写了grok模式,如:
filter {
if [type] == "sometype1" or [type] == "sometype2" {
grok {
match => [ "message", "%{POSINT:moduleid}%{SPACE}%{NUMBER:date}"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且给我问题的日志文件有type = sometype3,我没有在任何地方提到过.
谢谢
我有以下形式的nginx错误日志: -
2015/09/30 22:19:38 [错误] 32317#0:*23 [lua] responses.lua:61:handler():Cassandra错误:UNIQUE检查错误:Cassandra错误:连接被拒绝,客户端:127.0. 0.1,server :, request:"POST/consumers/HTTP/1.1",host:"localhost:8001"
如上所述,我能够解析这些日志.
我的过滤器配置如下: -
filter {
grok {
match => {
"message" => [
"%{DATESTAMP:mydate} \[%{DATA:severity}\] (%{NUMBER:pid:int}#%{NUMBER}: \*%{NUMBER}|\*%{NUMBER}) %{GREEDYDATA:mymessage}",
"%{DATESTAMP:mydate} \[%{DATA:severity}\] %{GREEDYDATA:mymessage}",
"%{DATESTAMP:mydate} %{GREEDYDATA:mymessage}"
]
}
add_tag => ["nginx_error_pattern"]
}
if ("nginx_error_pattern" in [tags]) {
grok {
match => {
"mymessage" => [
"server: %{DATA:[request_server]},"
]
}
}
grok {
match => {
"mymessage" => [
"host: \"%{IPORHOST:[request_host]}:%{NUMBER:[port]}\""
]
}
}
grok {
match => {
"mymessage" => …Run Code Online (Sandbox Code Playgroud) 嗨如何为下面的日志写一个grok表达式
[2017-03-25T00:00:07,137][WARN ]
match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}/]/[%{LOGLEVEL:log-level}\s*\]" }
Run Code Online (Sandbox Code Playgroud)
这是正确的,如何在grok中写空间?谢谢
这是我第一次使用 grok 和 elasticsearch。我正在尝试编写一个 grok 文件来解析以下行。
2017-07-25 10:48:23,477 [[api-my-app-v1-20.0.0].apiHttpListenerConfig.worker.58] INFO esb.api-my-app-v1.get-blah.http.response - transactionID=f61b8053-70d2-11e7-b274-3639cc5335d0 creationTime=2017-07-25T10:48:23.254+10:00 txnState=END timeTaken=11
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经写了这个 grok...
%{TIMESTAMP_ISO8601:timestamp}\s+%{DATA:thread}\s+%{LOGLEVEL:loglevel}\s+%{JAVACLASS:category}\s+-\s+%{GREEDYDATA:msgbody}
Run Code Online (Sandbox Code Playgroud)
它给了我这个......
{
"timestamp": [
[
"2017-07-25 10:48:23,477"
]
],
"YEAR": [
[
"2017"
]
],
"MONTHNUM": [
[
"07"
]
],
"MONTHDAY": [
[
"25"
]
],
"HOUR": [
[
"10",
null
]
],
"MINUTE": [
[
"48",
null
]
],
"SECOND": [
[
"23,477"
]
],
"ISO8601_TIMEZONE": [
[
null
]
],
"thread": [
[
"[[api-my-app-v1-20.0.0].apiHttpListenerConfig.worker.58]"
]
],
"loglevel": [ …Run Code Online (Sandbox Code Playgroud) 我是胶水新手,我正在尝试让爬虫功能从一些日志文件中提取数据库表。问题是文件的第一行不同。我定义了一个自定义 Grok 分类器,只要删除第一行,它就可以正常工作,但是当我使用原始日志文件时,它会停止工作并使用默认的粘合分类器(这显然对我不起作用)。我尝试将 'skip.header.line.count'=1 添加到表属性(并将爬网程序设置为不更新架构),但这也不起作用。有没有办法在 grok 模式中写“跳过第一行”?
amazon-web-services logstash-grok aws-glue aws-glue-data-catalog