J'essaie d'implémenter un serveur syslog centralisé simple en utilisant rsyslogd (4.2.0-2ubuntu8.1) sur Ubuntu 10.04 LTS. À ce stade, tous mes nœuds clients envoient des journaux au serveur central, mais les clients envoient des messages de journal qui contiennent leur nom d'hôte court au lieu de leur nom de domaine complet.
Selon la page de manuel Ubuntu rsyslogd:
Si l'hôte distant se trouve dans le même domaine que l'hôte, rsyslogd s'exécute sur, seul le nom d'hôte simple sera enregistré au lieu du fqdn entier.
C'est problématique pour moi, car je réutilise des noms courts entre les environnements, par exemple core1.example.com et core1.stg.example.com enregistrent tous les deux leurs messages en tant que core1.
Le client et le serveur ont le même / etc / default / rsyslog:
RSYSLOGD_OPTIONS="-c4"
et le même fichier /etc/rsyslogd.conf:
$ModLoad imuxsock
$ModLoad imklog
$PreserveFQDN on
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$IncludeConfig /etc/rsyslog.d/*.conf
Les clients ont ce fichier /etc/rsyslog.d/remote.conf, leur disant d'envoyer au serveur distant:
*.* @@syslog.example.com
et le serveur utilise ce fichier /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
Comme le client et le serveur partagent une configuration qui spécifie "$ PreserveFQDN on", je m'attends à voir les noms d'hôte FQDN dans les messages syslog, mais le paramètre semble n'avoir eu aucun effet. La plupart des autres paramètres que j'ai trouvés pour rsyslog visent à supprimer les domaines des FQDN au lieu de les conserver. Je pense que la racine du problème est que mes clients n'envoient pas le FQDN en premier lieu, mais je ne vois pas comment forcer ce comportement.
Quelqu'un peut-il commenter ce que je pourrais manquer? J'imagine que je ne suis pas la seule personne qui a besoin de noms de domaine complets pour être inclus dans les messages de journal.
Réponses:
J'ai également rencontré ce problème. Voici comment j'ai pu le réparer.
Sur les clients, modifiez le fichier / etc / hosts de sorte que le nom d'hôte souhaité passe avant localhost.
127.0.0.1 hostnameforlogs localhost
Sur les clients et le serveur, modifiez /etc/rsyslog.conf pour inclure cette instruction:
$ PreserveFQDN sur
Sur le serveur, j'ai utilisé la variable% HOSTNAME% pour les modèles dans rsyslog.conf:
la source
Pour modifier le nom d'hôte envoyé par rsyslog, ajoutez la directive suivante en tant que toute première ligne dans /etc/rsyslog.conf avant le chargement des modules:
Alternativement, pour que rsyslog envoie avec le nom de domaine complet (FQDN, tel que system1.example.com) au lieu de simplement le nom d'hôte (system1), utilisez la directive:
Cela est rarement nécessaire. Nous vous recommandons d'utiliser le nom d'hôte (sans le nom de domaine) sauf si vous avez des systèmes portant le même nom.
Une autre façon de le définir (qui vous permet d'envoyer différents journaux sous différents noms d'hôte) consiste à définir un modèle personnalisé:
la source
Ce pourrait être un bug. Le support FQDN est ou était connu pour être bancal , bien qu'aucun des bogues FQDN enregistrés ne semble s'appliquer.
Comme solution de contournement, si vous ne faites aucun relais, utilisez
%FROMHOST%
au lieu de% HOSTNAME%.la source
%FROMHOST%
me donne un nom de domaine complet, mais cela semble être le résultat d'une recherche inversée sur l'adresse IP du nœud client. Étant donné que mes systèmes fonctionnent sur AWS EC2, cela donnera malheureusement toujours un FQDN qui n'a aucune signification immédiate pour moi.Je ne peux parler que de la version 7.6.x, mais
$PreserveFQDN
c'était tout ce qu'il fallait pour que cela fonctionne. Vous pouvez éviter d'avoir à jouer avec/etc/hosts
si le nom de domaine complet de votre nœud est correctement configuré.Exemple pour les systèmes CentOS / RHEL:
Assurez-vous de redémarrer.
la source
Vous pouvez l'utiliser dans la configuration rsyslog côté client.
et remplacez-le
{{HOSTNAME}}
par le nom d'hôte souhaité ou vous pouvez le dépeindre sur chacun des clients à l'aide de la moustache automatiquement.la source