用于提取部分字符串的 Logstash grok 模式以开头和结尾

Logstash grok pattern to extract a part of String starts with and ends with

我正在尝试提取应用程序 ID。

作为示例,我需要提取

application_1621858977521_0074

来自以下日志行

 /yarn/container-logs/application_1621858977521_0074/container_1621858977521_0074_01_000004 [2021-06-08 05:40:06,231] INFO Changing view acls groups to:  (org.apache.spark.SecurityManager)

我尝试了以下自定义 grok 模式,但没有用。

%{(^application_:/$):appID}%

感谢您的建议和帮助

您可以使用

/(?<applicationId>application(?:_[0-9]+)+)/

快速备选方案是:

/(?<applicationId>application(?:_\w+)+)/
/(?<applicationId>application_[^/]*)

参见regex demo

模式(添加 / 作为路径分隔符):

  • / - 一个 / 字符
  • (?<applicationId>application(?:_[0-9]+)+) - 组“applicationId”:application 然后 _ 和一个或多个数字
  • 的一次或多次重复
  • / - 一个 / 字符
  • [^/]* - /.
  • 以外的零个或多个字符

Grok 调试器使用您给定的字符串显示以下输出:

{
  "applicationId": [
    [
      "application_1621858977521_0074"
    ]
  ]
}