![为什么我的一些日志使用本地主机而其他日志使用主机名 - 不同的服务器](https://linux22.com/image/97538/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E4%B8%80%E4%BA%9B%E6%97%A5%E5%BF%97%E4%BD%BF%E7%94%A8%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA%E8%80%8C%E5%85%B6%E4%BB%96%E6%97%A5%E5%BF%97%E4%BD%BF%E7%94%A8%E4%B8%BB%E6%9C%BA%E5%90%8D%20-%20%E4%B8%8D%E5%90%8C%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我正在调试与 LDAP 登录相关的内容,Ldap SSH 登录不起作用 - 相同的配置在 20 多个其他服务器上工作 - Ubuntu我注意到在某些服务器中,日志使用本地主机,而在其他服务器中,日志使用主机名。拥有主机名似乎最有意义,特别是如果我们要集中日志文件的话。
这是如何配置的?为什么不默认使用主机名?只是有点让我好奇......
例子 :
Oct 29 11:23:56 daily sshd[20625]: pam_unix(sshd:session): session opened for user LDAPUSERNAME by (uid=0)
或者
Oct 29 10:56:36 localhost sshd[2560]: pam_unix(sshd:auth): check pass; user unknown
更新:
user@qa-ops:~$ hostname
qa-ops
user@daily:~$ hostname
daily.domain.com
也许这与 Daily 在主机名中有完整的域名有关?我一直认为 /etc/hostname 应该是主机名的简短部分,而不是完整的 hostname.domain.com 等。
答案1
https://wiki.archlinux.org/index.php/rsyslog#Configure_Hostname
Rsyslog 使用 glibc 例程 gethostname() 或 gethostbyname() 来确定本地计算机的主机名。如果您不使用 BIND 或 NIS ,则 gethostname() 或 gethostbyname() 例程会检查
/etc/hosts
完全限定域名 (FQDN) 的内容。
更具体地说,如果localhost
您的 IP 条目排在第一位/etc/hosts
,那么它将优先。
(假设这是中行files
中的第一个值。或者,您的主机名无法使用 DNS 解析)。hosts:
/etc/nsswitch.conf
Arch Wiki 页面继续解释:
您可以通过运行 hostname --fqdn 来检查本地计算机当前配置的 FQDN。 rsyslog 在写入日志消息时将使用 hostname --short 的输出。如果您希望在日志中包含完整的主机名,则需要将 $PreserveFQDN 添加到文件的开头(在使用任何写入文件的指令之前)。这是因为,rsyslog 读取配置文件并即时应用它,然后读取后面的行。
/etc/hosts 文件包含许多将 FQDN 映射到 IP 地址以及将别名映射到 FQDN 的行。请参阅下面的示例 /etc/hosts 文件:
/etc/主机
#<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 是 IP 地址后面的第一项,因此 gethostbyname() 函数将返回 localhost.localdomain 作为本地计算机的 FQDN。然后 /var/log/messages 文件将使用 localhost 作为主机名。
使用 somehost 作为主机名。将 somehost.localdomain 移动到第一项:
/etc/主机
#<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
在各种情况下,可能很难准确地说明如何从/etc/hosts
(或 DNS)中选择相关信息。再次阅读源代码,我认为rsyslog
尝试将系统主机名(hostname
命令的输出)解析为 FQDN。
我认为这意味着上面说“gethostname 或 gethostbyname”的地方,它实际上应该说“gethostname和gethostbyname”。所以这些说明可能可以改进,但它们至少为您指出了正确的位置。
网上也有人问了一个非常相似的问题rsyslog-用户邮件列表。