我有以下形式的nginx错误日志: -
2015/09/30 22:19:38 [错误] 32317#0:* 23 [lua] answers.lua:61: handler():Cassandra错误:UNIQUE检查时出错:Cassandra 错误:连接被拒绝,客户端:127.0.0.1,服务器:,请求:“POST / consumers / HTTP / 1.1“,host:”localhost:8001“
如上所述here我能够解析这些日志。
我的过滤器配置如下: -
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" => [
"request: \"%{WORD:[request_method]} %{DATA:[request_uri]} HTTP/%{NUMBER:[request_version]:float}\""
]
}
}
grok {
match => {
"mymessage" => [
"client: %{IPORHOST:[clientip]}",
"client %{IP:[clientip]} "
]
}
}
grok {
match => {
"mymessage" => [
"referrer: \"%{DATA:[request_referrer]}\""
]
}
}
}
}
mydate
的日期为: -
"mydate" => "15/09/30 22:19:38"
有人可以告诉我如何添加一个字段log_day
日期的字段(假设2015-09-30
)?
答案 0 :(得分:6)
将时间/日期保存在date
类型的字段中始终是个好主意。它使您可以使用Elasticsearch或Kibana进行complex range queries。
您可以使用logstash's date filter来解析日期。
过滤强>
date {
match => [ "mydate", "YY/MM/dd HH:mm:ss" ]
}
<强>结果:强>
"@timestamp" => "2015-09-30T20:19:38.000Z"
默认情况下,日期过滤器会将结果放在@timestamp
字段中。
要避免默认映射进入@timestamp
字段,请指定目标字段,例如&#34; log_day&#34;,如下所示:
过滤强>
date {
match => [ "mydate", "YY/MM/dd HH:mm:ss" ]
target => "log_day"
}
<强>结果:强>
"log_day" => "2015-09-30T20:19:38.000Z"
如果您拥有date
类型的字段,则可以继续进行进一步操作。您可以使用date_formatter过滤器以特殊格式创建另一个日期字段。
date_formatter {
source => "log_day"
pattern => "YYYY-MM-dd"
}
结果:"log_day" => "2015-09-30"