【问题标题】:GROK or Regex to get filename ending with.jarGROK 或 Regex 获取以 .jar 结尾的文件名
【发布时间】:2020-10-14 14:48:54
【问题描述】:

我想使用 Grok 或 Regex 解析 logstash 中的字段。 我想获取所有以 .jar 结尾的进程名称并将它们放在一个名为 "subprocess" 的字段中 样本数据是这样的

/opt/java/jdk1.8.0_241/bin/java -server -Xms256m - Xms512m -XX:CompileThreshold=7000 -cp /opt/fmw/middleware/wlserver/server/lib/weblogic-launcher.jar -Dlaunch.use.env.classpat

到目前为止,我已经尝试过关注

.*\.jar$          #This works on regex101.com but not in logstash
(?<subprocess>[$.*\w.jar$])    #This only gives j in subprocess

任何可以提取 "weblogic-launcher.jar" 并将其放入字段 "subprocess" 的正则表达式模式都将受到高度赞赏。

谢谢

【问题讨论】:

  • 我已经更新了我的问题,谢谢
  • 试试(?&lt;subprocess&gt;[^/]+\.jar)或(?&lt;subprocess&gt;[^/]+\.jar)\b,见regex101.com/r/idOV1Z/1
  • 非常感谢 Wiktor - 这行得通但是我有另一个类似这样的日志/opt/java/jdk1.8.0_241/bin/java -server -Xms256m - Xms512m -XX:CompileThreshold=7000 -cp /opt/fmw/middleware/wlserver/server/lib - jar process.jar -Dlaunch.use.env.classpat 在这种情况下,正则表达式正在获取所有内容,直到 .jar 但我想要它只提取 process.jar 仅供参考,我正在 Kibana 调试器上对其进行测试 我尝试过 (?&lt;subprocess&gt;[^/]+.jar)\b 但它没有用你能解释一下它是如何工作的吗?我试过了
  • 如果某个日志在同一行中有多个 .jar 进程怎么办
  • 似乎也可以 - regex101.com/r/idOV1Z/2

标签: regex logstash logstash-grok


【解决方案1】:

你可以使用

/[^/]*?(?<subprocess>[^/\s]+\.jar)

请参阅regex demo。

详情

  • / - 一个 / 字符
  • [^/]*? - 零个或多个,但尽可能少,除/ 以外的字符
  • (?&lt;subprocess&gt;[^/\s]+\.jar) - 组“子进程”:除/ 和空格之外的一个或多个字符,然后是.jar 字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2022-01-20
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多