Estoy tratando de implementar un servidor syslog centralizado simple usando stock rsyslogd (4.2.0-2ubuntu8.1) en Ubuntu 10.04 LTS. En este punto, todos mis nodos de cliente envían registros al servidor central, pero los clientes envían mensajes de registro que contienen su nombre de host corto en lugar de su FQDN.
Según la página de manual de Ubuntu rsyslogd:
Si el host remoto se encuentra en el mismo dominio que el host, rsyslogd se está ejecutando, solo se registrará el nombre de host simple en lugar del fqdn completo.
Esto es problemático para mí, ya que estoy reutilizando nombres cortos entre entornos, por ejemplo, core1.example.com y core1.stg.example.com, ambos 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, que les dice que envíen al servidor remoto:
*.* @@syslog.example.com
y el servidor usa 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 los mensajes de syslog, pero la configuración parece no haber tenido efecto. La mayoría de las otras configuraciones que he encontrado para rsyslog están destinadas a eliminar los dominios de los FQDN 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.
¿Alguien puede comentar sobre lo que podría estar perdiendo? Me imagino que no soy la única persona que necesita que se incluyan los FQDN en los mensajes de registro.
Respuestas:
Me encontré con este problema también. Así es como pude arreglarlo.
En los clientes, modifique el archivo / etc / hosts para que el nombre de host deseado aparezca antes que localhost.
127.0.0.1 hostnameforlogs localhost
En los clientes y el servidor, modifique /etc/rsyslog.conf para incluir esta declaración:
$ PreserveFQDN en
En el servidor utilicé la variable% HOSTNAME% para las plantillas en rsyslog.conf:
fuente
Para cambiar el nombre de host que envía rsyslog, agregue la siguiente directiva como la primera línea en /etc/rsyslog.conf antes de cargar cualquier módulo:
Alternativamente, para que rsyslog se envíe con el nombre de dominio completo (FQDN, como system1.example.com) en lugar de simplemente el nombre de host (system1), use la directiva:
Esto rara vez se necesita. Recomendamos usar el nombre de host (sin el nombre de dominio) a menos que tenga sistemas con nombres idénticos.
Una forma alternativa de configurarlo (que le permite enviar diferentes registros como diferentes nombres de host) es estableciendo una plantilla personalizada:
fuente
Podría ser un error. El soporte de FQDN es o se sabía que era inestable , aunque ninguno de los errores de FQDN registrados parece aplicarse.
Como solución alternativa, si no realiza ninguna retransmisión, use en
%FROMHOST%
lugar de% HOSTNAME%.fuente
%FROMHOST%
me da un FQDN, pero parece ser el resultado de una búsqueda inversa en la dirección IP del nodo del cliente. Dado que mis sistemas se ejecutan en AWS EC2, desafortunadamente, esto siempre generará un FQDN que no tiene un significado inmediato para mí.Solo puedo hablar con 7.6.x, pero
$PreserveFQDN
era todo lo que necesitaba para que funcionara. Puede evitar tener que meterse con/etc/hosts
si el FQDN de su nodo está configurado correctamente.Ejemplo para sistemas CentOS / RHEL:
Asegúrese de reiniciar.
fuente
Puede usar esto en la configuración de rsyslog del lado del cliente.
y reemplácelo
{{HOSTNAME}}
con el nombre de host deseado o puede descartarlo en cada uno de los clientes usando bigote automáticamente.fuente