rsyslog

出自 Arch 维基

此文章或章节已过时。

理由: 参考过时的文档(在 Talk:Rsyslog 中讨论)

rsyslogsyslog 的一种实现,它比 syslog-ng 提供了许多优势。它可以配置为从 systemd 的 journal 接收日志条目,以便在快速写入磁盘或通过网络发送之前对其进行处理或过滤。

安装

注意: 建议禁用并卸载 syslog-ng 软件包,以防止可能发生的冲突。

安装 rsyslogAUR 软件包。

启动服务

您可以在安装后 启动/启用 rsyslog.service

配置主机名

Rsyslog 使用 glibc 例程 gethostname()gethostbyname() 来确定本地计算机的主机名。如果您不使用 BINDNIS,则 gethostname()gethostbyname() 例程会检查 /etc/hosts 的内容以获取完全限定域名 (FQDN)。

您可以通过运行 hostname --fqdn 来检查本地计算机当前配置的 FQDN 是什么。hostname --short 的输出将由 rsyslog 在写入日志消息时使用。如果您希望日志中包含完整的主机名,则需要在文件开头添加 $PreserveFQDN on(在使用任何写入文件的指令之前)。这是因为 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

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

配置

rsyslog 在 /etc/rsyslog.conf 中配置。有关可用配置选项的更多信息,请参阅 官方文档

默认情况下,所有 syslog 消息都由 systemd 的 journal 处理。为了在 rsyslog 中收集系统日志,您必须启用 #journald 的 syslog-forward 功能 或使用 rsyslog 的 #imjournal 模块从 systemd journald 导入日志来收集日志。

imjournal

如果您希望 rsyslog 从 systemd 拉取消息,请加载 imjournal 模块

/etc/rsyslog.conf
$ModLoad imjournal

有关更多信息,请参阅 关于 imjournal 输入模块的文档

journald 的 syslog-forward 功能

/etc/systemd/journald.conf
ForwardToSyslog=yes

rsyslogAUR 不会创建其工作目录 /var/spool/rsyslog,该目录由配置文件中的 $WorkDirectory 变量定义。您可能需要手动创建它或更改其目标位置。

可以在 /etc/rsyslog.conf 中微调日志输出。守护程序使用 Facility levels(参见下文)来确定将内容放入何处。例如

/etc/rsyslog.conf
# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

声明所有属于 authpriv facility 的消息都记录到 /var/log/secure

另一个示例,它类似于旧 auth.logsyslog-ng 的行为

/etc/rsyslog.conf
auth.*                                                  -/var/log/auth

有关更多信息,请参阅 Systemd/Journal#Journald 与 syslog 结合使用

Facility levels

注意: Facility Number 和 Keyword 之间的映射在不同的操作系统和不同的 syslog 实现中并不统一。请尽可能使用关键字,直到确定 Arch 使用哪些数字。
Facility Number Keyword Facility Description
0 kern 内核消息
1 user 用户级别消息
2 mail 邮件系统
3 daemon 系统守护进程
4 auth 安全/授权消息
5 syslog 由 syslogd 内部生成的消息
6 lpr 行式打印机子系统
7 news 网络新闻子系统
8 uucp UUCP 子系统
9 clock daemon
10 authpriv 安全/授权消息
11 ftp FTP 守护进程
12 - NTP 子系统
13 - log audit
14 - log alert
15 cron clock daemon
16 local0 本地使用 0 (local0)
17 local1 本地使用 1 (local1)
18 local2 本地使用 2 (local2)
19 local3 本地使用 3 (local3)
20 local4 本地使用 4 (local4)
21 local5 本地使用 5 (local5)
22 local6 本地使用 6 (local6)
23 local7 本地使用 7 (local7)

Severity levels

RFC 5424 中定义,共有八个严重级别

代码 严重性 Keyword 描述 通用描述
0 Emergency emerg (panic) 系统不可用。 一种“panic”情况,通常影响多个应用/服务器/站点。在此级别,通常会通知所有值班技术人员。
1 Alert alert 必须立即采取行动。 应立即纠正,因此通知可以解决问题的员工。例如,主 ISP 连接丢失。
2 Critical crit 严重情况。 应立即纠正,但表明主系统出现故障,例如备用 ISP 连接丢失。
3 Error err (error) 错误情况。 非紧急故障,这些应转发给开发人员或管理员;每个项目都必须在给定的时间内解决。
4 Warning warning (warn) 警告情况。 警告消息,不是错误,但表明如果不采取措施将发生错误,例如文件系统已满 85% - 每个项目都必须在给定的时间内解决。
5 Notice notice 正常但重要的条件。 不寻常但不是错误情况的事件 - 可能会在电子邮件中总结给开发人员或管理员,以发现潜在问题 - 无需立即采取行动。
6 Informational info 信息性消息。 正常操作消息 - 可以收集用于报告、测量吞吐量等 - 无需采取行动。
7 Debug debug 调试级别消息。 对开发人员调试应用程序有用的信息,在操作期间无用。
提示: 一个常用的助记符,用于反向记住 syslog 级别:“Do I Notice When Evenings Come Around Early”。

示例

journald 与 rsyslog 用于内核消息

此文章或章节需要语言、wiki 语法或样式改进。请参阅 Help:Style 以获取参考。

理由: 冗余指令,systemd 命令...(在 Talk:Rsyslog 中讨论)

由于 systemd 的 syslog 组件 journald 在正常操作期间不会将其日志刷新到磁盘,因此当机器异常关闭(断电、内核锁死等)时,这些日志将丢失。在内核锁死的情况下,拥有一些内核日志对于调试可能很重要。在 journald 获得刷新内核日志的配置选项之前,rsyslog 可以与 journald 结合使用。

需求概要

  • journald 必须仍然获取所有日志消息。
  • rsyslog 必须仅记录内核消息,所有其他日志均由 journald 处理。
  • 内核日志必须单独记录到 /var/log/kernel.log
  • 使用 systemd 启动服务。

安装和配置步骤

  1. 安装 rsyslogAUR
  2. 编辑 /etc/logrotate.d/rsyslog 并将 /var/log/kernel.log 添加到日志列表中。如果没有此修改,内核日志将无限增长。
  3. 编辑 /etc/rsyslog.conf 并注释掉除 $ModLoad imklog 之外的所有内容。如果首选心跳(重复确认日志处于活动状态),则 $ModLoad immark 也应保持未注释状态。
  4. 将下一行添加到同一配置文件
    kern.*     /var/log/kernel.log;RSYSLOG_TraditionalFileFormat
    kern.* 部分捕获所有源自内核的消息。此处使用 ;RSYSLOG_TraditionalFileFormat 是为了使用不太详细的日期格式。默认情况下,使用类似于 2013-03-09T19:29:33.103897+01:00 的日期格式。由于内核日志已经包含精度(printk 时间),并且实际日志时间无关紧要,因此可能首选类似于 Mar 9 19:29:13 的格式。
  5. 由于 rsyslog 应与 systemd 完全分离运行,因此请删除与 systemd 共享套接字的选项
    # sed 's/^Sockets=/#&/' /usr/lib/systemd/system/rsyslog.service > /etc/systemd/system/rsyslog.service
  6. 接下来,通过启动并启用 rsyslog.service,使 rsyslog 在启动时启动并在本次会话中启动它。
注意: rsyslog 从 /proc/kmsg 读取。这意味着后续从该文件(用户或 syslog 守护程序)的读取将不再从该文件读取“旧”日志。journald 不受影响,因为它从允许多个读取器的 /dev/kmsg 读取。

参见