#mongodb #rsyslog #loggly
Вопрос:
Я пытаюсь отправить информацию в loggly через rsyslog с данными из mongodb 4.4.2. Однако я не могу получить данные таким образом, чтобы я мог манипулировать ими и удалять определенную информацию. Когда я следую руководству на сайте Loggly, оно работает для информации, отличной от mongodb. Если я оставлю %$!msg% как %msg%, я получу данные mongodb, но я не смогу ими манипулировать.
конфигурационный файл для чтения журналов mongo
module(load="imfile")
#RsyslogGnuTLS
$DefaultNetstreamDriverCAFile /etc/ssl/certs/ca-bundle.crt
# Input for FILE1
input(type="imfile" tag="mongo_lou_qa" ruleset="filelog" file="/var/log/mongodb/mongod.log") #wildcard is allowed at file level only
$template LogglyFormat,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [token@41058 tag="tag1" tag="tag2" ] %$!msg%"
set $!msg = $msg;
if re_match($!msg,'([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])')
then
{
set $!ext = re_extract($!msg,'([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])',0,1,"");
set $!msg= replace($!msg, $!ext, "xxxxxxxxx");
}
ruleset(name="filelog"){
action(type="omfwd" protocol="tcp" target="logs-01.loggly.com" port="6514" template="LogglyFormat" StreamDriver="gtls" StreamDriverMode="1" StreamDriverAuthMode="x509/name" StreamDriverPermittedPeers="*.loggly.com")
}
Пример журнала Mongodb
{"t":{"$date":"2021-01-01T00:00:00.000-00:00"},"s":"I", "c":"ACCESS", "id":20000, "ctx":"conn79","msg":"Successful authentication","attr":{"mechanism":"ABC","principalName":"__system","authenticationDatabase":"local","client":"0.0.0.0:00000"}}
Комментарии:
1. Я не вижу в вашем примере журнала строки из 9 цифр, чтобы шаблон re соответствовал. Кроме того, я понял , что вам нужно было определить
ruleset()
, с чем вы могли бы его использоватьinput(ruleset=)
, но это может быть только в более старых версиях.2. @meuh Да, в примере нет 9 цифр, поэтому я ожидал бы увидеть возвращенную полную строку, но я даже этого не вижу.
3. @meuh — Это решило проблему. Спасибо — Есть ли какой-нибудь способ, которым я могу поддержать или сделать ваш ответ ответом?
Ответ №1:
наборы правил используются для разделения входных данных таким образом, чтобы к ним применялись только некоторые правила. Похоже, что переменные типа $!msg
и $.msg
являются локальными для каждого набора правил, поэтому их установка вне набора правил не повлияет на значения в действии, которое находится внутри набора правил. В документации не очень ясно, что еще должно быть внутри набора правил, например, шаблон, вероятно, не должен быть.
Ответ №2:
Вы можете использовать jq для извлечения или обработки данных из вашего файла журнала.
Примечание. Вы также можете создавать сообщения системного журнала, установив
systemLog:
destination: syslog
тогда вам не нужно будет записывать в файл и читать его снова.