¿Cómo obtengo rsyslogd para registrar el FQDN de un servidor en lugar de su nombre de host corto?

Estoy tratando de implementar un simple servidor centralizado syslog utilizando stock rsyslogd (4.2.0-2ubuntu8.1) en Ubuntu 10.04 LTS. En este punto, tengo todos mis nodos cliente enviando registros al servidor central, pero los clientes están enviando mensajes de registro que contienen su nombre de host corto en lugar de su FQDN.

Por la página de manual de rsyslogd de Ubuntu:

Si el host remoto se encuentra en el mismo dominio que el host, rsyslogd se está ejecutando, sólo se registrará el nombre de host simple en lugar de todo el fqdn.

Esto es problemático para mí, ya que estoy reutilizando nombres cortos entre entornos, por ejemplo, core1.example.com y core1.stg.example.com registran sus mensajes como core1.

Tanto el cliente como el servidor tienen el mismo / etc / default / rsyslog:

RSYSLOGD_OPTIONS="-c4" 

Y el mismo archivo /etc/rsyslogd.conf:

 $ModLoad imuxsock $ModLoad imklog $PreserveFQDN on $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $FileOwner root $FileGroup adm $FileCreateMode 0640 $IncludeConfig /etc/rsyslog.d/*.conf 

Los clientes tienen este archivo /etc/rsyslog.d/remote.conf, diciéndoles que envíen al servidor remoto:

 *.* @@syslog.example.com 

Y el servidor utiliza este archivo /etc/rsyslog.d/server.conf:

 $ModLoad imtcp $InputTCPServerRun 514 $DirGroup root $DirCreateMode 0755 $FileGroup root $template PerHostAuth,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/auth.log" $template PerHostCron,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/cron.log" $template PerHostSyslog,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/syslog" $template PerHostDaemon,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/daemon.log" $template PerHostKern,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/kern.log" $template PerHostLpr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/lpr.log" $template PerHostUser,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/user.log" $template PerHostMail,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.log" $template PerHostMailInfo,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.info" $template PerHostMailWarn,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.warn" $template PerHostMailErr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.err" $template PerHostNewsCrit,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.crit" $template PerHostNewsErr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.err" $template PerHostNewsNotice,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.notice" $template PerHostDebug,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/debug" $template PerHostMessages,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages" auth,authpriv.* ?PerHostAuth *.*;auth,authpriv.none -?PerHostSyslog cron.* ?PerHostCron daemon.* -?PerHostDaemon kern.* -?PerHostKern lpr.* -?PerHostLpr mail.* -?PerHostMail user.* -?PerHostUser mail.info -?PerHostMailInfo mail.warn ?PerHostMailWarn mail.err ?PerHostMailErr news.crit ?PerHostNewsCrit news.err ?PerHostNewsErr news.notice -?PerHostNewsNotice *.=debug;\ auth,authpriv.none;\ news.none;mail.none -?PerHostDebug *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -?PerHostMessages 

Como el cliente y el servidor comparten una configuración que especifica "$ PreserveFQDN on", espero ver nombres de host FQDN en mensajes syslog, pero la configuración parece no haber tenido ningún efecto. La mayoría de los otros ajustes que he encontrado para rsyslog apuntan a despojar dominios de FQDNs en lugar de retenerlos. Creo que la raíz del problema es que mis clientes no envían el FQDN en primer lugar, pero no veo cómo forzar ese comportamiento.

¿Puede alguien comentar sobre lo que podría faltar? Me imagino que no soy la única persona que necesita FQDN para ser incluidos en los mensajes de registro.

Me encontré con este tema también. Aquí es cómo pude arreglarlo.

  1. En los clientes, modifique el archivo / etc / hosts de modo que el nombre de host deseado venga antes de localhost.

    127.0.0.1 hostnameforlogs localhost

  2. En los clientes y servidor, modifique /etc/rsyslog.conf para incluir esta declaración:

    $ PreserveFQDN on

  3. En el servidor utilicé la variable% HOSTNAME% para las plantillas en rsyslog.conf:

Podría ser un error. FQDN apoyo es o fue conocido por ser wonky , aunque ninguno de los registros FQDN errores parecen aplicar.

Como solución, si no realiza ninguna retransmisión, utilice %FROMHOST% lugar de% HOSTNAME%.

Para cambiar el nombre de host rsyslog envía, agregue la directiva siguiente como la primera línea en /etc/rsyslog.conf antes de cargar cualquier módulo:

 $LocalHostName yourhostname 

Como alternativa, para que rsyslog envíe con el nombre de dominio completo (FQDN, como system1.example.com) en lugar de simplemente el nombre de host (system1), utilice la directiva:

 $PreserveFQDN on 

Esto raramente es necesario. Recomendamos usar el nombre de host (sin el nombre de dominio) a menos que tenga sistemas de nombre idéntico.

Una forma alternativa de configurarlo (que le permite enviar registros diferentes como nombres de host diferentes) es mediante el establecimiento de una plantilla personalizada:

 $template MyTemplate, "<%pri%> %timestamp% MySpoofedHostName %syslogtag% %msg%\n" $ActionForwardDefaultTemplate MyTemplate 

Sólo puedo hablar con 7.6.x, pero $PreserveFQDN era todo lo que se necesitaba para que funcione. Puede evitar tener que meterse con /etc/hosts si el FQDN de su nodo está configurado correctamente.

Ejemplo para sistemas CentOS / RHEL:

 $ -> vi /etc/sysconfig/network # Change this HOSTNAME=service-a-1 # To this HOSTNAME=service-a-1.sn1.vpc3.example.com 

Asegúrese de reiniciar.

Puede usar esto en la configuración de rsyslog del lado del cliente.

 $LocalHostName {{HOSTNAME}} 

Y reemplaza {{HOSTNAME}} por el nombre de host deseado o puedes destemplificarlo en cada uno de los clientes usando bigote automáticamente.

    Intereting Posts