这是以下 json 示例,我想根据客户端 ID 和用户 ID 进行过滤和索引,这些 ID 和用户 ID 位于 json 中的消息标记中。
"message": "12 Jul 2016 15:28:14,851 http-bio-9080-exec-3 [INFO ] corporate_access - Request details - Uri: /corporate/create, Ip: x.x.x.x, User id: 12461, Client id:11048",
我想根据客户端 ID 和用户 ID 为用户活动编制索引。我在 logstash conf 中的过滤器是:
filter {
grok {
match => {
"message" => "Uri: %{URIPATHPARAM:url}%{SPACE}Ip: %{IP:ip},%{SPACE}User id: %{WORD:Userid}, Client id:%{WORD:Clientid}"
}
}
}
您可以使用此 grok 过滤器:
grok {
match => {
"message" => [
"%{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{GREEDYDATA} [%{DATA}]%{SPACE}%{WORD}%{SPACE}- Request details - Uri: %{URIPATH}, Ip: %{IP}, User id: %{NUMBER:user_id}, Client id: %{NUMBER:client_id}"
]
}
}
注意:我已经删除了User id
和Client id
周围的**
,因为它看起来只是为了强调日志行的有趣部分。但是,如果您的日志中确实有**
,则必须使用以下命令修改模式:**User id:** %{NUMBER:user_id}, **Client id:**%{NUMBER:client_id}
。
这奏效了!!
filter {
if [type] == "corporate-access" {
grok {
break_on_match => false
match => { "message" => "Uri: %{URIPATHPARAM:url}%{SPACE}" }
match => { "message" => "User id: %{WORD:Userid}, Client id:%{WORD:Clientid}" }
add_tag => "%{Userid}"
add_tag => "%{Clientid}"
add_tag => "%{url}"
}
}