首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对数存储的链式grok滤波模式

对数存储的链式grok滤波模式
EN

Stack Overflow用户
提问于 2014-09-24 14:40:32
回答 1查看 1.1K关注 0票数 0

我正在尝试配置logstash来管理我的各种日志源,其中一个是Mongrel2。Mongrel2使用的格式是tnetstring,其中日志消息将采用以下形式

代码语言:javascript
复制
86:9:localhost,12:192.168.33.1,5:57089#10:1411396297#3:GET,1:/,8:HTTP/1.1,3:200#6:145978#]

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

代码语言:javascript
复制
M2HOST ^(?:[^:]*\:){2}(?<hostname>[^,]*)

然后在logstash中指定

代码语言:javascript
复制
filter {
  grok {
    match => [ "message", "%{M2HOST}" ]
  }
}

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

代码语言:javascript
复制
M2HOST ^(?:[^:]*\:){2}(?<hostname>[^,]*)
M2ADDR ^(?:[^:]*\:){3}(?<address>[^,]*)

以及更改logstash conf

代码语言:javascript
复制
filter {
  grok {
    match => [ "message", "%{M2HOST} %{M2ADDR}" ]
  }
}

但是现在我只得到了错误_grokparsefailure

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-24 15:07:31

对于来自其他问题的示例输入,以及对值名称的一些猜测,完全匹配如下:

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

制作:

代码语言:javascript
复制
{
  "hostname": [
    [
      "localhost"
    ]
  ],
  "address": [
    [
      "192.168.33.1"
    ]
  ],
  "pid": [
    [
      "57089"
    ]
  ],
  "time": [
    [
      "1411396297"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "query": [
    [
      "/"
    ]
  ],
  "protocol": [
    [
      "HTTP/1.1"
    ]
  ],
  "code": [
    [
      "200"
    ]
  ],
  "bytes": [
    [
      "145978"
    ]
  ]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26019768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档