首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Logstash模式与Python?

Logstash模式与Python?
EN

Stack Overflow用户
提问于 2014-09-24 09:37:13
回答 2查看 4.3K关注 0票数 1

我正在尝试配置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模式,从上面的格式中提取某些字段。我首先在上面的消息这里上测试我的regex,regex是

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

这与localhost相匹配。当我在表单中使用与grok模式相同的正则表达式时

代码语言:javascript
复制
TEST ^(?:[^:]*\:){2}([^,]*)
MONGREL %{TEST:test}

配置logstash

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

相同的正则表达式将导致匹配的86:9:localhost。我不知道我哪里出了问题?是我用来测试的regex引擎是基于Python,而grok过滤器regex是基于Onigurama吗?

当前使用以下输入在格氏调试中测试它

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

和下面的模式

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

结果是

代码语言:javascript
复制
{
  "hostname": [
    [
      "86:9:localhost"
    ]
  ]
}

在我想要的地方

代码语言:javascript
复制
{
  "hostname": [
    [
      "localhost"
    ]
  ]
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-24 13:59:31

这样的模式将提取主机名:

代码语言:javascript
复制
^(\d+)?:(\d+)?:(?<hostname>[^,]+),

或者以与您已经写过的方式类似的方式编写它:

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

捕获名称需要在要捕获的括号内.你的模式捕捉到了这点之前的一切。

票数 1
EN

Stack Overflow用户

发布于 2014-09-24 13:23:48

http://grokdebug.herokuapp.com/试一试。这是最好的方法来调试不导致脱发的grok模式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26013516

复制
相关文章

相似问题

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