0

这是以下 json 示例,我想在其中 根据 json 中的 Message 标记中的 Client Id 和 User Id进行过滤和索引。

"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}"
}

 }
}
4

2 回答 2

0

这有效!

  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}"

        }
      }
于 2016-07-19T12:59:36.707 回答
0

你可以使用这个 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}"
        ]
    }
}

注意:我删除了**aroundUser idClient id,因为它看起来只是为了强调日志行的有趣部分。但是,如果您的日志中确实有**,则必须使用以下方式修改模式:\*\*User id:\*\* %{NUMBER:user_id}, \*\*Client id:\*\*%{NUMBER:client_id}

于 2016-07-12T08:16:27.040 回答