#regex #logstash #logstash-grok
#регулярное выражение #logstash #logstash-grok
Вопрос:
Я хочу проанализировать поле в logstash, используя Grok или Regex. Я хочу получить все имена процессов, заканчивающиеся на .jar и поместить их в поле с именем «подпроцесс» Пример данных примерно так
/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 «и поместить его в поле «подпроцесс» было бы весьма полезно.
Спасибо
Комментарии:
1. Я обновил свой вопрос, спасибо
2. Попробуйте
(?<subprocess>[^/] .jar)
или(?<subprocess>[^/] .jar)b
, см. regex101.com/r/idOV1Z/13. Большое спасибо Виктору — это сработало, но у меня есть еще один журнал, который выглядит примерно так
/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, я пробовал(?<subprocess>[^/] .jar)b
, но это не сработало, не могли бы вы объяснить, как это работает? Я пытался4. Также что, если в каком-то журнале есть несколько процессов .jar в одной строке
5. Похоже, тоже работает — regex101.com/r/idOV1Z/2
Ответ №1:
Вы можете использовать
/[^/]*?(?<subprocess>[^/s] .jar)
Смотрите демонстрацию регулярных выражений.
Подробные сведения
/
—/
символ[^/]*?
— ноль или больше, но как можно меньше символов, отличных от/
(?<subprocess>[^/s] .jar)
— Группа «подпроцесс»: один или несколько символов, отличных от/
и пробелов, а затем.jar
строка.