elasticsearch 格罗克一个字也不读连字符,elasticsearch,logstash,kibana,logstash-grok,elasticsearch,Logstash,Kibana,Logstash Grok" /> elasticsearch 格罗克一个字也不读连字符,elasticsearch,logstash,kibana,logstash-grok,elasticsearch,Logstash,Kibana,Logstash Grok" />

elasticsearch 格罗克一个字也不读连字符

elasticsearch 格罗克一个字也不读连字符,elasticsearch,logstash,kibana,logstash-grok,elasticsearch,Logstash,Kibana,Logstash Grok,这是我的格洛克模式 2017-09-25 08:58:17861 p=14774 u=ec2用户124741506329897.86160:检查是否存在任何错误 我试图阅读用户,但它只给出ec2,没有给出完整的单词 对不起,我是grok过滤器的新手 我目前的模式: %{TIMESTAMP_ISO8601:TIMESTAMP}p=%{WORD:process_id}u=%{WORD:user_id} 电流输出: ... ... ... "process_id": [ [ "

这是我的格洛克模式

2017-09-25 08:58:17861 p=14774 u=ec2用户124741506329897.86160:检查是否存在任何错误

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

对不起,我是grok过滤器的新手

我目前的模式:

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

电流输出:

...
...
...
  "process_id": [
    [
      "14774"
    ]
  ],
  "user_id": [
    [
      "ec2"
    ]
  ]
}
单词定义为
“\b\w+\b”

  • \b是一个词的边界

  • \w匹配单个字母数字字符(字母字符或十进制数字)或“\u1”

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

请注意\w不匹配-

所以要让它工作,而不是用词

(?<user_id>\b[\w\-]+\b)
(?\b[\w\-]+\b)
这不使用预定义的grok模式,而是使用“raw”regexp

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

  • 输入允许1-2:成功

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

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

    它正在工作。%{TIMESTAMP_ISO8601:TIMESTAMP}p=%{WORD:process_id}u=%{USERNAME:user_id}如果您使用用户名,维护您的代码的人可能会认为日志包含一个,嗯,用户名。按照Vorspringor所述创建您自己的模式,或者您可以像我没有读过的评论中那样使用用户名。欢迎使用Stack Overflow。虽然此代码可能会回答这个问题,但提供有关此代码的原因和/或方式的其他上下文回答了这个问题,提高了它的长期价值。