凌峰创科服务平台

Linux syslog日志服务器如何搭建与配置?

Syslog 是一种标准的日志记录系统,几乎所有的 Linux/Unix 系统都使用它,它的工作核心是 客户端-服务器 架构,也称为 集中式日志管理

Linux syslog日志服务器如何搭建与配置?-图1
(图片来源网络,侵删)

核心概念

在开始配置之前,需要理解 syslog 的几个核心组件:

  1. Syslog 协议:一个简单的文本协议,用于在 IP 网络上传输日志消息,它定义了消息的格式。
  2. Syslog 守护进程:在后台运行的服务程序,负责接收、处理和存储日志消息。
    • 传统实现sysklogdsyslog-ng
    • 现代实现 (推荐)rsyslog,现在绝大多数 Linux 发行版(如 RHEL/CentOS, Ubuntu/Debian)都默认使用 rsyslog,它功能强大、性能高、配置灵活。
  3. 日志来源
    • 本地:系统内核、应用程序(如 sshd, nginx)等。
    • 远程:网络中的其他服务器、网络设备(如路由器、交换机)。
  4. 日志消息格式:通常遵循 RFC 3164 或 RFC 5424 标准,一个典型的日志条目包含:
    • 优先级:由 设施严重级别 组成。
    • 时间戳:消息产生的时间。
    • 主机名:产生消息的主机名。
    • :实际的日志信息。

Syslog 的 Facility 和 Severity

这是配置 syslog 的关键,通过组合 Facility 和 Severity,你可以精确地控制哪些日志应该被记录、记录到哪里。

Facility (设施)

定义了日志消息的来源类别。

Facility 数字 描述
kern 0 内核消息
user 1 用户进程
mail 2 邮件系统
daemon 3 系统守护进程
auth 4 安全/认证相关 (如 login, sudo)
syslog 5 syslogd 守护进程本身
lpr 6 打印系统
news 7 网络新闻系统 (NNTP)
uucp 8 UUCP 系统
cron 9 计划任务 (cron)
authpriv 10 安全/认证相关 (与 auth 类似,但日志权限更私有)
ftp 11 FTP 守护进程
local0 16 本地使用 (自定义应用常用)
local1 - local7 17-23 本地使用 (自定义应用常用)

Severity (严重级别)

定义了消息的紧急程度,数字越小越严重。

Linux syslog日志服务器如何搭建与配置?-图2
(图片来源网络,侵删)
Severity 数字 描述
emerg 0 系统不可用 (紧急)
alert 1 需要立即行动的警报
crit 2 严重情况
err 3 错误
warning 4 警告
notice 5 重要通知
info 6 一般信息
debug 7 调试信息

组合示例

  • *.info:记录所有设施()的 info 级别及以上的日志。
  • mail.*:记录 mail 设施的所有级别的日志。
  • authpriv.none:不记录 authpriv 设施的任何日志。
  • local0.*:记录所有自定义应用(使用 local0 设施)的日志。

配置 Syslog 服务器 (以 Rsyslog 为例)

我们将配置一台服务器(logserver.example.com)作为中央日志服务器,接收其他客户端的日志。

场景1:仅作为日志服务器,不记录本地日志

  1. 安装 Rsyslog

    # CentOS / RHEL / Fedora
    sudo yum install rsyslog
    # Ubuntu / Debian
    sudo apt-get install rsyslog
  2. 编辑 Rsyslog 配置文件 主配置文件通常是 /etc/rsyslog.conf,为了管理方便,建议为远程日志创建一个单独的配置文件,/etc/rsyslog.d/50-remote.conf

    Linux syslog日志服务器如何搭建与配置?-图3
    (图片来源网络,侵删)
    sudo nano /etc/rsyslog.d/50-remote.conf
  3. 添加配置规则 在文件中添加以下内容,这行配置的含义是:接收所有来自远程客户端的 级别的日志,并将其追加到 /var/log/remotehosts.log 文件中

    # UDP is less reliable but faster. TCP is recommended for production.
    # $ModLoad imudp
    # $UDPServerRun 514
    # TCP is more reliable. Recommended for production.
    $ModLoad imtcp
    $InputTCPServerRun 514
    # 接收所有远程日志并存入指定文件
    # ?RemoteHost 是一个模板宏,会自动在日志中记录发送日志的客户端IP或主机名
    *.* ?RemoteHost
    • $ModLoad imtcp:加载 TCP 输入模块,用于监听网络连接。
    • $InputTCPServerRun 514:在 TCP 端口 514 上启动监听。注意:确保防火墙允许此端口。
    • *.* ?RemoteHost:这是核心规则。
      • 表示接收所有设施和所有严重级别的日志。
      • ?RemoteHost 是一个特殊的 "动态文件名",Rsyslog 会为每个客户端创建一个以客户端IP地址或主机名命名的日志文件,并存放在 /var/log/hosts/ 目录下,这是一种更灵活的组织方式。
      • 如果你希望所有客户端的日志都写入一个文件,可以使用 *.* /var/log/remotehosts.log
  4. 创建日志目录并设置权限 Rsyslog 通常会以 root 身份运行,但它写入的文件/目录权限可能不正确,为了安全,建议以非特权用户身份运行。

    # 创建一个专门用于运行 rsyslog 的用户
    sudo useradd -r -s /bin/false rsyslog
    # 创建日志目录
    sudo mkdir -p /var/log/hosts
    # 设置正确的所有权和权限
    sudo chown -R rsyslog:rsyslog /var/log/hosts
    sudo chmod 750 /var/log/hosts
  5. 重启并启用 Rsyslog 服务

    sudo systemctl restart rsyslog
    sudo systemctl enable rsyslog
  6. 配置防火墙 允许 TCP 端口 514 的入站流量。

    # 使用 firewalld (CentOS/RHEL 7+)
    sudo firewall-cmd --permanent --add-port=514/tcp
    sudo firewall-cmd --reload
    # 使用 ufw (Ubuntu/Debian)
    sudo ufw allow 514/tcp

你的日志服务器已经准备就绪。


配置 Syslog 客户端

假设客户端主机名为 webserver01.example.com

  1. 确保 Rsyslog 已安装 客户端也需要安装 rsyslog,但它作为发送方,不需要复杂的配置。

  2. 编辑 Rsyslog 客户端配置文件 同样,建议创建一个单独的配置文件,/etc/rsyslog.d/50-forward.conf

    sudo nano /etc/rsyslog.d/50-forward.conf
  3. 添加配置规则 在文件中添加以下内容,将特定或所有日志发送到日志服务器。

    # 将所有本地日志发送到远程日志服务器
    *.* @<日志服务器IP地址>:514
    # 或者,如果你想发送特定设施,例如只发送认证日志和自定义应用日志
    # authpriv.*,local0.* @<日志服务器IP地址>:514
    # 使用 '@' 表示 UDP (不可靠但快)
    # 使用 '@@' 表示 TCP (可靠
分享:
扫描分享到社交APP
上一篇
下一篇