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 等。
https://wiki.archlinux.org/index.php/rsyslog#Configure_Hostname
Rsyslog 使用 glibc 例程 gethostname() 或 gethostbyname() 来确定本地机器的主机名。
/etc/hosts如果您没有使用 BIND 或 NIS ,gethostname() 或 gethostbyname() 例程会检查完全限定域名 (FQDN)的内容。
更具体地说,如果localhost您的 IP的条目首先出现在 中/etc/hosts,那么它将优先。
(假设这files是hosts:行中的第一个值/etc/nsswitch.conf。或者,您的主机名无法使用 DNS 解析)。
Arch Wiki 页面继续解释:
您可以通过运行 hostname --fqdn 来检查本地计算机当前配置的 FQDN 是什么。rsyslog 在写入日志消息时将使用 hostname --short 的输出。如果你想在日志中有完整的主机名,你需要将 $PreserveFQDN 添加到文件的开头(在使用任何写入文件的指令之前)。这是因为 rsyslog 读取配置文件并在运行中应用它,然后读取后面的行。
/etc/hosts 文件包含许多将 FQDN 映射到 IP 地址以及将别名映射到 FQDN 的行。请参阅下面的示例 /etc/hosts 文件:
/etc/hosts
Run Code Online (Sandbox Code Playgroud)#<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 somehostlocalhost.localdomain 是 IP 地址之后的第一项,因此 gethostbyname() 函数将返回 localhost.localdomain 作为本地机器的 FQDN。然后 /var/log/messages 文件将使用 localhost 作为主机名。
使用 somehost 作为主机名。将 somehost.localdomain 移动到第一项:
/etc/hosts
Run Code Online (Sandbox Code Playgroud)#<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-users 邮件列表上也有一个非常相似的问题。