为什么我的一些日志使用本地主机和其他主机名 - 不同的服务器

Fre*_*ers 3 logs hostname rsyslog

我正在调试与 LDAP登录相关的内容,Ldap SSH 登录不起作用 - 相同的配置在 20 多个其他服务器上工作 - Ubuntu,我注意到在某些服务器中,日志使用 localhost,而在其他服务器中,它们具有主机名。拥有主机名似乎最有意义,尤其是当我们要集中日志文件时。

这是怎么配置的?为什么不默认使用主机名?只是有点让我好奇...

例子 :

Oct 29 11:23:56 daily sshd[20625]: pam_unix(sshd:session): session opened for user LDAPUSERNAME by (uid=0)
Run Code Online (Sandbox Code Playgroud)

或者

Oct 29 10:56:36 localhost sshd[2560]: pam_unix(sshd:auth): check pass; user unknown
Run Code Online (Sandbox Code Playgroud)

更新:

user@qa-ops:~$ hostname
qa-ops
user@daily:~$ hostname
daily.domain.com
Run Code Online (Sandbox Code Playgroud)

也许这与 Daily 在主机名中拥有完整域名有关?我一直认为 /etc/hostname 应该是主机名的简短部分,而不是完整的 hostname.domain.com 等。

sou*_*edi 6

https://wiki.archlinux.org/index.php/rsyslog#Configure_Hostname

Rsyslog 使用 glibc 例程 gethostname() 或 gethostbyname() 来确定本地机器的主机名。/etc/hosts如果您没有使用 BIND 或 NIS ,gethostname() 或 gethostbyname() 例程会检查完全限定域名 (FQDN)的内容。

更具体地说,如果localhost您的 IP的条目首先出现在 中/etc/hosts,那么它将优先。

(假设这fileshosts:行中的第一个值/etc/nsswitch.conf。或者,您的主机名无法使用 DNS 解析)。


Arch Wiki 页面继续解释:

您可以通过运行 hostname --fqdn 来检查本地计算机当前配置的 FQDN 是什么。rsyslog 在写入日志消息时将使用 hostname --short 的输出。如果你想在日志中有完整的主机名,你需要将 $PreserveFQDN 添加到文件的开头(在使用任何写入文件的指令之前)。这是因为 rsyslog 读取配置文件并在运行中应用它,然后读取后面的行。

/etc/hosts 文件包含许多将 FQDN 映射到 IP 地址以及将别名映射到 FQDN 的行。请参阅下面的示例 /etc/hosts 文件:

/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
Run Code Online (Sandbox Code Playgroud)

localhost.localdomain 是 IP 地址之后的第一项,因此 gethostbyname() 函数将返回 localhost.localdomain 作为本地机器的 FQDN。然后 /var/log/messages 文件将使用 localhost 作为主机名。

使用 somehost 作为主机名。将 somehost.localdomain 移动到第一项:

/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
Run Code Online (Sandbox Code Playgroud)

可能很难准确说明/etc/hosts在各种情况下如何从(或 DNS)中选择相关信息。再次阅读源代码,我认为rsyslog尝试将系统主机名(hostname命令输出)解析为 FQDN。

我认为这意味着上面说“gethostname 或 gethostbyname”的地方,它真的应该说“gethostnamegethostbyname”。因此,这些说明可能会得到改进,但它们至少将您指向正确的位置。

rsyslog-users 邮件列表上也有一个非常相似的问题。