rsyslog импортирует нестандартные логи - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь импортировать журнал приложений в mysql, который не имеет стандартного формата системного журнала.

Пример строки:

Dec  5 10:50:06 wifi coova-chilli[10099]: Client process timed out: 2

Когда я использую модуль imfile для импортажурнал (а затем затем переслать его в MySQL), он работает нормально, но вся строка все идет в поле сообщения.Это также означает, что поля ReceivedAt и DeviceReportedTime - это временная метка, когда журнал импортируется, а не фактическое время события в сообщении.

Я думаю, что ответ лежит в заменителе свойства, но я не могуПохоже, в Интернете можно найти пример того, как на самом деле получить фактическую дату и ввести ее в поле DeviceReportedTime.

Это то, что заканчивается в БД:

53052   NULL    2018-12-04 16:17:44 2018-12-04 16:17:44 16  5   server   Dec  5 10:50:06 wifi coova-chilli[10099]: Client process timed out: 2  5   NULL    customtag   NULL    NULL    0   NULL    NULL    NULL    NULL    NULL    3   customtag   -   NULL    NULL

У меня естьследующий конфиг на стороне клиента в /etc/rsyslog.d:

module(load="imfile" mode="inotify")

input(type="imfile"
        File="/var/log/appname/applog.log"
        Tag="customtag")

И это на стороне сервера в /etc/rsysconfig.d:

:syslogtag, contains, "customtag":ommysql:10.255.2.6,rsyslogdb,loganalyzer,password

1 Ответ

0 голосов
/ 06 декабря 2018

Это не полный ответ, так как он не является частью 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

Многое я еще не понимаю в связи с вышеизложенным, поэтому вам, вероятно, следует начинать новый отдельный пост для каждого нового вопроса по конкретным вопросам.чтобы другие могли ответить.

...