繁体   English   中英

链接logtash的grok过滤器模式

[英]Chaining grok filter patterns for logstash

我正在尝试配置logstash来管理各种日志源,其中之一是Mongrel2。 Mongrel2使用的格式为tnetstring ,其中日志消息的格式为

86:9:localhost,12:192.168.33.1,5:57089#10:1411396297#3:GET,1:/,8:HTTP/1.1,3:200#6:145978#]

我想编写自己的grok模式以从上述格式中提取某些字段。 我在尝试提取主机的问题上得到了帮助。 所以如果在grok-patterns我定义

M2HOST ^(?:[^:]*\:){2}(?<hostname>[^,]*)

然后在logstash conf中指定

filter {
  grok {
    match => [ "message", "%{M2HOST}" ]
  }
}

它按预期工作。 我现在遇到的问题是我想指定多个模式,例如M2HOST,M2ADDR等。我尝试在同一grok-patterns文件中定义其他模式

M2HOST ^(?:[^:]*\:){2}(?<hostname>[^,]*)
M2ADDR ^(?:[^:]*\:){3}(?<address>[^,]*)

并更改logstash conf

filter {
  grok {
    match => [ "message", "%{M2HOST} %{M2ADDR}" ]
  }
}

但是现在我得到的错误是_grokparsefailure

与其他问题的示例输入一起,并对值名称进行一些猜测,则完全匹配为:

(?:[^:]*:){2}(?<hostname>[^,]*)[^:]*:(?<address>[^,]*)[^:]*:(?<pid>[^#]*)[^:]*:(?<time>[^#]*)[^:]*:(?<method>[^,]*)[^:]*:(?<query>[^,]*)[^:]*:(?<protocol>[^,]*)[^:]*:(?<code>[^#]*)[^:]*:(?<bytes>[^#]*).*

生产:

{
  "hostname": [
    [
      "localhost"
    ]
  ],
  "address": [
    [
      "192.168.33.1"
    ]
  ],
  "pid": [
    [
      "57089"
    ]
  ],
  "time": [
    [
      "1411396297"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "query": [
    [
      "/"
    ]
  ],
  "protocol": [
    [
      "HTTP/1.1"
    ]
  ],
  "code": [
    [
      "200"
    ]
  ],
  "bytes": [
    [
      "145978"
    ]
  ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM