Rsyslog uses the glibc routine gethostname() or gethostbyname() to determine the hostname of the local machine. The gethostname() or gethostbyname() routine check the contents of /etc/hosts for the fully qualified domain name (FQDN) if you are not using BIND or NIS.
Mais especificamente, se a entrada localhost
do seu IP vier em primeiro lugar em /etc/hosts
, parecerá preceder se hosts
estiver listado primeiro no nsswitch.conf ou se o nome do host não puder ser resolvido usando o DNS. link
You can check what the local machine's currently configured FQDN is by running hostname --fqdn. The output of hostname --short will be used by rsyslog when writing log messages. If you want to have full hostnames in logs, you need to add $PreserveFQDN on to the beginning of the file (before using any directive that write to files). This is because, rsyslog reads config file and applies it on-the-go and then reads the later lines.
The /etc/hosts file contains a number of lines that map FQDNs to IP addresses and that map aliases to FQDNs. See the example /etc/hosts file below:
/etc/hosts
#<ip-address> <hostname.domain.org> <hostname> #<ip-address> <actual FQDN> <aliases> 127.0.0.1 localhost.localdomain somehost.localdomain localhost somehost ::1 localhost.localdomain somehost.localdomain localhost somehost
localhost.localdomain is the first item following the IP address, so gethostbyname() function will return localhost.localdomain as the local machine's FQDN. Then /var/log/messages file will use localhost as hostname.
To use somehost as the hostname. Move somehost.localdomain to the first item:
/etc/hosts
#<ip-address> <hostname.domain.org> <hostname> #<ip-address> <actual FQDN> <aliases> 127.0.0.1 somehost.localdomain localhost.localdomain localhost somehost ::1 somehost.localdomain localhost.localdomain localhost somehost
Pode ser difícil dizer exatamente como as informações relevantes são selecionadas de /etc/hosts
(ou o DNS) em várias circunstâncias. Lendo o código-fonte novamente, acho que rsyslog
tenta resolver o nome do host do sistema (saída do comando hostname
) em um FQDN.
Ou seja, "gethostname ou gethostbyname" acima provavelmente deve ler "gethostname e gethostbyname". Então, acho que as instruções poderiam ser melhoradas, mas eles pelo menos apontam você para o lugar certo.