2017-08-08 306 views
2

我的问题是关于logstash中的grok过滤器。对于logstash过滤器,我需要解析一个日志文件。 INFO [QuorumPeer [本身份识别码= 1]/0 - 53135:0:0:0:0:0:0:0:2181:ZooKeeperServer 01:下面grok的自定义正则表达式

2017年7月31日09样品日志语句@ 617] - 以协商超时5000 建立的会话0x15d964d654646f4为 客户/10.191.202.89:56232

我想分析使用正则表达式,但没有得到任何成功之间[]声明?从上面的行

  1. QuorumPeer [本身份识别码= 1]/0:0:0:0:0:0:0:0:2181应该被映射到线程ID。
  2. ZooKeeperServer应该被映射到类名
  3. 应与行号映射

有人可以帮我这个正则表达式?

+0

你可以添加你已经尝试过? – TehSphinX

+0

你会发布你的整个配置文件,所以我可以看到所有这些是如何完成的?我一整天都在试图弄清楚如何使自定义的正则表达式工作,甚至在kibana调试器中我都搞不清楚。谢谢 – Elijah

回答

1

您可以使用

\[(?<threadid>\w+[^/]*/[\d:]+):(?<classname>[^\]@]+)@(?<linenumber>\d+)\] 

详细

  • \[ - 字面[
  • (?<threadid>\w+[^/]*/[\d:]+) - 组 “线程ID”:1+字字符,然后0+字符比/其他,/然后再输入一个或多个数字或:(注意你可以调整这个您认为合适的图案,例如它也可以写成(?<threadid>.*?[\d:]+)但它不会是安全的)
  • : - 冒号
  • (?<classname>[^\]@]+) - 组“类名”:1个或更多字符比]其他和@
  • @ - 一个@字符
  • (?<linenumber>\d+) - 组 “行号”:1个或多个数字
  • \] - 字面]

在线测试结果在grokdebug.herokuapp.com

enter image description here

+0

感谢您回答这个问题。我不想在正则表达式中硬编码QuorumPeer。它不会在下面的语句的情况下工作:[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn @ 178] – BobCoder

+0

@BobCoder我更新了答案。 –