Это не полный ответ, так как он не является частью rsyslog, который я использовал ранее, но он должен приблизить вас к окончательному решению.
Вы можете использовать библиотеку разбора ввода rsyslog, liblognorm
и модуль mmnormalize
.Вам может понадобиться установить дополнительный пакет или два, если они не включены в rsyslog.Для начала напишите файл правил myrules.rb
, содержащий одну строку, описывающую поля, которые у вас есть:
rule=:%date:date-rfc3164% %tag:word% %host:char-to:[%[%pid:number%]: %msg:rest%
Вы можете использовать пример строки, предоставив ее в качестве стандартного ввода в тестовую программу lognormalizer
:
echo 'Dec 5 10:50:06 wifi coova-chilli[10099]: Client process timed out: 2' |
lognormalizer -r myrules.rb
Вы должны получить вывод в формате json:
{ "msg": "Client process timed out: 2", "pid": "10099",
"host": "coova-chilli", "tag": "wifi", "date": "Dec 5 10:50:06" }
Теперь вы можете добавить использование этого модуля в файл конфигурации rsyslog:
module(load="mmnormalize")
action(type="mmnormalize" rulebase="myrules.rb")
template(name="simple" type="string" string="%$!date:::date-rfc3339% %$!host% %$!msg%\n")
if $parsesuccess=="OK" then action(type="omfile" file="output" template="simple")
В этом же примере строка ввода во входном файле должна быть проанализирована, и ключи json будут доступны в виде переменных, таких как $!host
, для использования в шаблоне.Выше следует написать строку в выходном файле, например:
Dec 5 10:50:06 coova-chilli Client process timed out: 2
Многое я еще не понимаю в связи с вышеизложенным, поэтому вам, вероятно, следует начинать новый отдельный пост для каждого нового вопроса по конкретным вопросам.чтобы другие могли ответить.