Использование Rsyslog для отправки в журнал и очистки данных журнала mongodb

#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
 

тогда вам не нужно будет записывать в файл и читать его снова.