凌峰创科服务平台

Linux syslog服务器如何配置与管理?

什么是 Syslog?

Syslog 是一种标准的日志记录协议,广泛应用于 Unix、Linux 和网络设备中,它允许将系统日志、应用程序日志等发送到中央服务器进行集中管理、存储和分析。

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

核心思想:

  • 客户端: 运行各种服务和应用程序的 Linux 服务器、路由器、交换机、防火墙等。
  • 服务器: 一台专门的中央日志服务器,负责接收、存储和处理来自所有客户端的日志。

为什么需要 Syslog 服务器?

  1. 集中管理: 无需登录每台服务器去查看日志,在中央服务器上就能掌握所有系统的运行状态。
  2. 安全性: 日志可以集中存储在安全的地方,防止攻击者在入侵客户端后删除日志痕迹。
  3. 故障排查: 当问题发生时,可以快速关联不同服务器在同一时间点的日志,定位问题根源。
  4. 审计与合规: 满足安全审计要求,记录所有关键操作和系统事件。
  5. 性能分析: 通过分析日志,了解系统负载、应用性能等。

Syslog 的工作原理

Syslog 协议非常简单,通常基于 UDP 协议(端口 514)进行通信,因为它开销小、速度快,但对于高可靠性要求的场景,也可以使用 TCP(端口 514)。

一条 Syslog 日志消息通常包含三个部分:

Linux syslog服务器如何配置与管理?-图2
(图片来源网络,侵删)
  1. PRI (Priority): 由“设施”和“严重级别”组成,用于标识日志的重要性和来源。
  2. HEADER: 包含时间戳、主机名、进程名和 PID(进程 ID)。
  3. MSG: 实际的日志消息内容。

设施

设施指明了日志消息的来源,

  • authauthpriv: 认证相关的安全信息(如登录)。
  • cron: 定时任务 cron 的日志。
  • daemon: 系统守护进程的日志。
  • kern: 内核消息。
  • lpr: 打印系统。
  • mail: 邮件系统。
  • user: 用户进程。
  • uucp: UUCP 系统。
  • local0 ~ local7: 留给本地用户自定义使用。

严重级别

级别从低到高,表示紧急程度:

  • 0: emerg (Emergency): 系统不可用。
  • 1: alert (Alert): 必须立即采取行动。
  • 2: crit (Critical): 严重情况。
  • 3: err (Error): 错误。
  • 4: warn (Warning): 警告。
  • 5: notice (Notice): 普通但重要的事件。
  • 6: info (Information): 一般信息。
  • 7: debug (Debug): 调试信息。

示例: 一条来自 mail 设施、级别为 err 的日志,其 PRI 值就是 3 * 8 + 14 = 38(设施代码为 14,级别代码为 3)。


如何搭建 Syslog 服务器

在 Linux 中,最常用的 Syslog 服务器软件是 Rsyslog,它功能强大、性能优越,并且是现代大多数 Linux 发行版(如 CentOS, RHEL, Ubuntu, Debian)的默认日志系统。

Linux syslog服务器如何配置与管理?-图3
(图片来源网络,侵删)

场景规划

  • 服务器: 168.1.100 (我们将在这台机器上安装 Rsyslog 服务器)
  • 客户端: 168.1.101 (我们将配置这台机器将日志发送到服务器)

在服务器端配置 (192.168.1.100)

  1. 安装 Rsyslog Rsyslog 通常已经预装,如果没有,可以使用以下命令安装:

    # For CentOS/RHEL/Fedora
    sudo yum install -y rsyslog
    # For Debian/Ubuntu
    sudo apt-get update
    sudo apt-get install -y rsyslog
  2. 编辑主配置文件 打开 /etc/rsyslog.conf 文件,我们需要做两件事:

    • 启用 UDP/TCP 监听。
    • 设置接收到的日志的存储规则。
    sudo vim /etc/rsyslog.conf

    在文件中找到并修改以下部分:

    a. 启用网络监听 取消注释以下行,以监听来自网络的 UDP 和 TCP 消息。 代表接受所有 Facility 的日志。

    # Provides UDP syslog reception
    module(load="imudp") # needs to be done just once
    input(type="imudp" port="514")
    # Provides TCP syslog reception
    module(load="imtcp") # needs to be done just once
    input(type="imtcp" port="514")

    b. 配置日志存储规则 在文件末尾添加新的规则,用于处理来自客户端的日志,这是一个推荐的配置,可以按客户端 IP 和日期进行归档,便于管理。

    # Rule for receiving logs from remote clients
    # This template formats the log as: IP, Hostname, Facility, Priority, Message
    # This template formats the log as: IP, Hostname, Facility, Priority, Message
    $template RemoteLogs,"/var/log/clients/%FROMHOSTIP%/%FROMHOSTIP%-%$YEAR%-%$MONTH%-%$DAY%.log"
    # This rule will receive all logs from remote hosts and apply the template
    *.* ?RemoteLogs

    规则解释:

    • $template RemoteLogs, ...: 定义一个名为 RemoteLogs 的模板。
    • /var/log/clients/%FROMHOSTIP%/%FROMHOSTIP%-%$YEAR%-%$MONTH%-%$DAY%.log: 这是日志文件的存储路径。
      • %FROMHOSTIP%: 自动替换为发送日志的客户端 IP 地址。
      • %$YEAR%, %$MONTH%, %$DAY%: 自动替换为年、月、日。
      • 这样,每台客户端的日志都会存放在 /var/log/clients/<客户端IP>/ 目录下,并按天分割文件,结构清晰。
    • *.* ?RemoteLogs: 这是一个全局规则。
      • 表示接收所有 Facility 和所有 Priority 的日志。
      • ?RemoteLogs 表示将匹配的日志使用 RemoteLogs 模板写入文件。
  3. 创建日志目录并设置权限 Rsyslog 不会自动创建目录,需要手动创建并赋予正确的权限。

    sudo mkdir -p /var/log/clients
    sudo chmod 755 /var/log/clients
    # rsyslog 默认以 root 运行,创建的文件会属于 root,所以目录权限 755 即可
  4. 启动并启用 Rsyslog 服务

    sudo systemctl restart rsyslog
    sudo systemctl enable rsyslog
  5. 检查状态和防火墙 确保 Rsyslog 正在运行,并且防火墙允许 514 端口的流量。

    sudo systemctl status rsyslog
    # For firewalld (CentOS/RHEL)
    sudo firewall-cmd --permanent --add-port=514/udp
    sudo firewall-cmd --permanent --add-port=514/tcp
    sudo firewall-cmd --reload
    # For ufw (Ubuntu/Debian)
    sudo ufw allow 514/udp
    sudo ufw allow 514/tcp

你的 Syslog 服务器已经准备就绪!


在客户端配置 (192.168.1.101)

  1. 安装 Rsyslog 和服务器端一样,确保客户端也安装了 rsyslog

  2. 编辑客户端配置文件 打开 /etc/rsyslog.conf/etc/rsyslog.d/50-default.conf

    sudo vim /etc/rsyslog.conf

    我们需要添加一行,将日志发送到服务器,我们会将本地日志和发送到服务器的日志都保留。

    # Standard Log Formats
    # ... (保留默认的本地日志规则) ...
    # Rule to send all logs to the central syslog server
    *.* @192.168.1.100

    符号说明:

    • 使用 UDP 协议发送(速度快,可能丢包)。
    • 使用 TCP 协议发送(可靠,无丢包,但速度稍慢)。

    最佳实践: 你可以只发送特定级别的日志(warning 及以上)到服务器,以减少网络流量和服务器存储压力。

    # Send logs of priority 'warning' and higher to the server
    *.warning;authpriv.none;mail.none @192.168.1.100

    这个规则表示:除了 authprivmail 的日志,其他所有 Facility 的 warning 级别及以上的日志都发送到服务器。

  3. 启动并启用 Rsyslog 服务

    sudo systemctl restart rsyslog
    sudo systemctl enable rsyslog

验证配置

  1. 在客户端上生成一条日志

    # 生成一个认证日志
    logger "This is a test message from client 101"
  2. 在服务器上检查日志 稍等几秒钟,然后到服务器上查看日志文件是否已创建并写入。

    # 查看目录结构
    ls -l /var/log/clients/
    # 查看今天的日志文件
    ls -l /var/log/clients/192.168.1.101/
    # 查看日志内容
    cat /var/log/clients/192.168.1.101/192.168.1.101-$(date +%Y-%m-%d).log

    你应该能看到类似下面内容的日志:

    Oct 27 10:30:01 192.168.1.101 root: This is a test message from client 101

    这里的 168.1.101 是客户端主机名(或 IP),root 是发送日志的用户。


高级功能与扩展

使用 TLS 加密日志传输

为了防止日志在传输过程中被窃听或篡改,可以使用 TLS (SSL) 对通信进行加密,这需要在 Rsyslog 服务器上配置证书和私钥,并在客户端配置使用 gtls (GnuTLS) 驱动。

日志过滤

Rsyslog 支持强大的过滤功能,可以根据 Facility、Priority、消息内容、正则表达式等对日志进行复杂的处理,

  • 只记录包含 "error" 关键字的日志。
  • 忽略来自某个特定进程的日志。

日志转发

Rsyslog 可以级联,A 服务器可以接收 B、C、D 的日志,然后再将所有日志转发到更高级别的中央日志服务器 E。

日志分析与可视化

收集到日志只是第一步,更重要的是分析和利用它们,常用的工具有:

  • ELK Stack (Elasticsearch, Logstash, Kibana): 功能强大,适合大规模日志分析、搜索和可视化。
  • Graylog: 专业的日志管理平台,功能丰富,开箱即用。
  • Loki (by Grafana): 轻量级日志聚合系统,与 Prometheus 和 Grafana 生态无缝集成。

搭建一个 Syslog 服务器是系统管理员的基础技能,通过使用 Rsyslog,你可以轻松实现日志的集中化管理,极大地提升运维效率和问题排查能力,核心步骤如下:

  1. 服务器端: 安装 Rsyslog,配置 imudp/imtcp 模块监听网络,并使用 $template 定义日志存储格式和路径。
  2. 客户端: 安装 Rsyslog,配置 或 将日志发送到服务器 IP。
  3. 验证: 在客户端生成日志,在服务器端检查是否收到。
  4. 安全与扩展: 考虑使用防火墙、TLS 加密以及更高级的分析工具来完善你的日志系统。
分享:
扫描分享到社交APP
上一篇
下一篇