骗子不读连字符

Vic*_*cky 2 elasticsearch logstash kibana logstash-grok

这是我的骗子模式

2017年9月25日08:58:17,861 p = 14774 u = ec2用户| 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"
    ]
  ]
}
Run Code Online (Sandbox Code Playgroud)

Vor*_*ung 5

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)
Run Code Online (Sandbox Code Playgroud)

这不使用预定义的grok模式,而是使用“原始”正则表达式

  • 使用(?....)代替%{,因为它是“原始”正则表达式
  • \- 表示文字-符号
  • []表示字符类。因此[\ w-]将匹配\ w做的所有事情,以及-