rsyslog: ¿cómo etiquetar y aplicar un conjunto de reglas por contenido de línea?

rsyslog: ¿cómo etiquetar y aplicar un conjunto de reglas por contenido de línea?

Estoy limpiando y estandarizando nuestro manejo de registros, agregando fluentd y ELK. Esta parte funciona bien, ya que nginx inicia sesión en su propio archivo:

input(type="imfile" tag="app.nginx" file="/var/log/nginx/access.log" ruleset="fluentd")

Sin embargo, otros componentes de la aplicación, por ejemplo, el proceso de Python, inician sesión /var/log/syslogcon mensajes de registro que tienen el prefijo [flask]. Me gustaría filtrar /var/log/sysloglos mensajes que contienen [flask], etiquetarlos con app.flasky aplicar el fluentdconjunto de reglas.

Podría configurar cada servicio para que inicie sesión en su propio archivo como nginx, pero me gustaría evitar cambiar la configuración de systemd si es posible.

Respuesta1

Terminé resolviendo este problema redirigiendo los mensajes a un archivo de registro específico y luego agregando un inputmensaje dirigido a él.

if $rawmsg contains "[flask]" then /var/log/flask.log

input(type="imfile" tag="app.flask" file="/var/log/flask.log" ruleset="fluentd")

Si hay una manera de hacer esto sin redirigir a un archivo diferente, todavía me gustaría saberlo.

información relacionada