rsyslog: как извлечь значения из метаданных и сохранить в переменной?

На платформе со стандартным procfsс поддержкой procfs -2 вы получаете результат через:

ls -l /proc/<pid>/path/a.out

Файл a.out является символической ссылкой на абсолютный путь к двоичному файлу.

1
05.05.2020, 21:27
1 ответ

Язык сценариев rsyslog RainerScript имеет несколько вспомогательных функций . Проще всего применить в этом случае, вероятно, поле , которое разбивает строку на поля, разделенные некоторым символом (, заданным его кодом ascii в десятичном виде ), или строкой. Вы выбираете, какое из результирующих разделенных полей вы хотите, начиная с 1. Например,:

field("/a/b/c", 47, 2)

дает результат "а" как 2-е поле,так как первое поле - это пустое место перед первым «/». Таким образом, вы можете использовать

set $.sourceIP = field($!metadata!filename, 47, 3);

Не забудьте ";" что является обязательным. Вы можете использовать ту же функцию, чтобы извлечь 4-е поле, а затем снова разделить на "." символ, чтобы занять 1-е поле.

Для более сложных извлечений существует re _Extract , где вы можете использовать регулярное выражение POSIX ERE для сопоставления некоторой части строки, возможно, что-то вроде

re_extract("/a/b/c.d.log", "([^/]*).log$",0,1,"failed")
0
28.04.2021, 23:16

Теги

Похожие вопросы