grok没有用连字符读一个字

时间:2017-09-25 09:37:53

标签: elasticsearch logstash kibana logstash-grok

这是我的格鲁克模式

2017-09-25 08:58:17,861 p = 14774 u = ec2-user | 14774 1506329897.86160:检查any_errors_fatal

我正在尝试阅读用户,但它只给出了ec2,它没有给出完整的单词

抱歉,我对grok过滤器更新

我目前的模式:

%{TIMESTAMP_ISO8601:timestamp} p =%{WORD:process_id} u =%{WORD:user_id}

当前输出:

...
...
...
  "process_id": [
    [
      "14774"
    ]
  ],
  "user_id": [
    [
      "ec2"
    ]
  ]
}

2 个答案:

答案 0 :(得分:4)

WORD定义为"\b\w+\b"

请参阅https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

  • \ b是单词边界

  • \ w匹配单个字母数字字符(字母字符或十进制数字)或" _"

  • +表示前一个字符的任意数量。所以\ w +表示任意数量的字符

请注意\ w不匹配 -

所以要使它工作而不是WORD使用

(?<user_id>\b[\w\-]+\b)

这不使用预定义的grok模式,而是&#34; raw&#34;正则表达式

  • 使用(?....)代替%{因为它是&#34; raw&#34;正则表达式
  • \-表示字面符号
  • []表示一个字符类。所以[\ w-]将匹配所有的事情和 - 以及 - 以及

答案 1 :(得分:0)

输入允许1-2:成功

Grok过滤器(?:%{GREEDYDATA:Output}?|-)

结果 {“ Output”:[[“ Allow1-2:Success”]]}