Linux 系统 rsyslog 配置

Linux 系统 rsyslog 配置指南

rsyslog 是 Linux 系统的下一代日志处理系统,功能强大且高效。以下是从基础到高级的全面配置指南:

1. 安装与基础配置

安装 rsyslog

# Ubuntu/Debian
sudo apt update
sudo apt install rsyslog

# CentOS/RHEL
sudo yum install rsyslog

基础配置

配置文件:/etc/rsyslog.conf

# 查看默认配置
sudo vim /etc/rsyslog.conf

# 启用的模块
module(load="imuxsock") # 提供本地系统日志支持
module(load="imklog")   # 提供内核日志支持
module(load="immark")  # 提供标记消息支持

# 标准日志规则
*.info;mail.none;authpriv.none;cron.none  /var/log/messages
authpriv.*                               /var/log/secure
mail.*                                   -/var/log/maillog
cron.*                                   /var/log/cron
*.emerg                                 :omusrmsg:*

重启服务

sudo systemctl restart rsyslog
sudo systemctl enable rsyslog

2. 关键配置功能详解

日志分级

级别优先级描述
debug7调试信息
info6一般信息
notice5正常但重要的事件
warning4警告
err3错误
crit2严重情况
alert1需要立即采取行动
emerg0系统不可用

常用日志路径

日志文件描述
/var/log/messages系统级常规日志
/var/log/secure认证相关日志
/var/log/cron计划任务日志
/var/log/maillog邮件系统日志
/var/log/boot.log系统启动日志

3. 高级配置功能

3.1 远程日志集中管理

日志发送端配置
sudo vim /etc/rsyslog.conf

# 添加在文件底部
# UDP方式(快速但不保证送达)
*.* @192.168.1.100:514

# TCP方式(可靠传输)
*.* @@192.168.1.100:514

# 重试队列(如果服务器离线)
$ActionQueueFileName queue   # 唯一名称
$ActionQueueMaxDiskSpace 1g  # 最大磁盘空间
$ActionQueueSaveOnShutdown on # 关机保存
$ActionQueueType LinkedList  # 队列类型
$ActionResumeRetryCount -1   # 无限重试
日志接收端配置
sudo vim /etc/rsyslog.conf

# 启用TCP/UDP接收
module(load="imudp")
input(type="imudp" port="514")

module(load="imtcp")
input(type="imtcp" port="514")

# 指定接收日志的目录
$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
& ~  # 停止进一步处理

3.2 日志过滤与路由

# 将sshd日志保存到单独文件
:programname, isequal, "sshd" /var/log/ssh.log

# 丢弃指定程序的日志
:msg, contains, "debug" ~

# 按严重级别过滤
*.emerg /var/log/critical.log

# 自定义时间格式
$template MyFormat,"%$NOW% %TIMESTAMP:8:15% %hostname% %syslogtag% %msg%\n"

3.3 性能优化配置

# /etc/rsyslog.conf 顶部添加
$MaxMessageSize 64k  # 最大日志大小
$WorkDirectory /var/lib/rsyslog  # 工作目录
$MainMsgQueueSize 50000  # 主队列大小

# 批量处理
$ActionQueueSize 100000   # 队列大小
$ActionQueueTimeoutEnqueue 500 # 超时(毫秒)
$ActionDequeueBatchSize 2000 # 批量处理数

4. 日志轮转配置

配置文件:/etc/logrotate.d/rsyslog

/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/cron
/var/log/spooler
/var/log/boot.log
{
    daily            # 按天轮转
    rotate 30        # 保留30份
    size 100M        # 或达到100MB轮转
    missingok        # 文件不存在不报错
    compress         # 压缩旧日志
    delaycompress    # 延迟压缩
    sharedscripts    # 所有文件处理完后运行脚本
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

5. 安全增强配置

5.1 TLS加密传输

# 生成证书
sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/private/rsyslog-key.pem \
-out /etc/ssl/certs/rsyslog-cert.pem -days 365 -nodes

# 发送端配置
$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /etc/ssl/certs/ca-cert.pem
$DefaultNetstreamDriverCertFile /etc/ssl/certs/client-cert.pem
$DefaultNetstreamDriverKeyFile /etc/ssl/private/client-key.pem
*.* @@(o)192.168.1.100:6514  # 使用TLS端口6514

# 接收端配置
global(
    DefaultNetstreamDriver="gtls"
    DefaultNetstreamDriverCAFile="/etc/ssl/certs/ca-cert.pem"
    DefaultNetstreamDriverCertFile="/etc/ssl/certs/server-cert.pem"
    DefaultNetstreamDriverKeyFile="/etc/ssl/private/server-key.pem"
)

5.2 访问控制

# 接收端限制访问
$AllowedSender UDP, 192.168.1.0/24
$AllowedSender TCP, 192.168.1.0/24
$AllowedSender TLS, 192.168.1.0/24

5.3 SELinux策略

# 开放rsyslog端口
sudo semanage port -a -t syslogd_port_t -p udp 514
sudo semanage port -a -t syslogd_port_t -p tcp 514

# 允许写入远程日志目录
sudo semanage fcontext -a -t var_log_t "/var/log/remote(/.*)?"
sudo restorecon -Rv /var/log/remote

6. 监控与故障排除

检查服务状态

sudo systemctl status rsyslog
sudo rsyslogd -N1  # 测试配置文件语法

日志分析工具

# 实时监控日志
sudo tail -f /var/log/messages

# 筛选特定时间范围日志
journalctl --since "2023-01-01 00:00:00" --until "2023-01-02 00:00:00"

# 查看最后100条错误
sudo grep -i error /var/log/messages | tail -100

网络诊断

# 测试UDP发送
echo "Test message" | nc -u -w1 192.168.1.100 514

# 检查端口监听
sudo netstat -tulnp | grep rsyslog
sudo tcpdump -i any port 514 -vv

7. 高级集成方案

与Elastic Stack集成

# 安装Logstash转发模块
sudo apt install logstash

# /etc/logstash/conf.d/rsyslog.conf
input {
  udp {
    port => 514
    type => "syslog"
  }
  tcp {
    port => 514
    type => "syslog"
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "syslog-%{+YYYY.MM.dd}"
  }
}

使用Prometheus监控日志速率

# 安装promtail
curl -s https://api.github.com/repos/grafana/loki/releases/latest | \
grep browser_download_url | grep promtail-linux-amd64 | cut -d '"' -f 4 | wget -i -

# 配置promtail.yaml
server:
  http_listen_port: 9080
  grpc_listen_port: 0
positions:
  filename: /tmp/positions.yaml
clients:
  - url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlog
      __path__: /var/log/*.log

8. 最佳实践

  1. 最小权限原则

    • 使用专用日志账户
    • 限制配置文件权限 chmod 640 /etc/rsyslog.conf
  2. 结构化日志

    template(name="jsonfmt" type="list") {
         property(name="timestamp" dateFormat="rfc3339")
         constant(value=",")
         property(name="hostname")
         constant(value=",")
         property(name="syslogtag")
         constant(value=",")
         property(name="msg" format="json")
    }
    
  3. 日志分级存储

    • /var/log/ 使用高性能 SSD
    • /archive/logs/ 使用大容量机械硬盘
  4. 定期审计

    # 检查日志完整性
    sudo auditctl -w /var/log/ -p wa -k syslog_audit
    
  5. 监控告警

    • 设置日志速率告警
    • 监控日志磁盘空间使用率
    • 检测关键词告警 (ERROR, CRITICAL)

通过以上全面配置,您可以构建一个高效、安全且可扩展的日志管理系统,满足从小型服务器到大型数据中心的各种需求。

### Linuxrsyslog 服务的重启命令 在 Linux 系统中,如果需要重新启动 rsyslog 服务,可以使用 `systemctl` 命令来完成这一操作。具体来说,可以通过以下命令实现 rsyslog 的重启: ```bash sudo systemctl restart rsyslog ``` 上述命令会停止当前正在运行的 rsyslog 服务实例,并立即重新启动该服务[^1]。 此外,在 CentOS 7 或其他类似的 systemd 基础系统上,rsyslog 的管理依赖于其 Unit 文件 `/usr/lib/systemd/system/rsyslog.service` 进行配置控制[^2]。这意味着所有的服务操作(如启动、停止、重启等)都遵循 systemd 的统一接口标准。 需要注意的是,执行此命令通常需要超级用户权限,因此建议加上 `sudo` 来提升权限以确保命令能够成功执行。 #### 验证 rsyslog 是否已成功重启 为了确认 rsyslog 已经被正确重启,可以查看服务状态或者检查日志文件更新情况。以下是验证方法之一: ```bash sudo systemctl status rsyslog ``` 通过这条命令可以获得关于 rsyslog 当前运行状况的信息,包括最近一次启动时间以及任何可能存在的错误消息。 ```python import subprocess def check_rsyslog_status(): try: result = subprocess.run(['sudo', 'systemctl', 'status', 'rsyslog'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) output = result.stdout.decode('utf-8') error_output = result.stderr.decode('utf-8') if "active (running)" in output: return f"Rsyslog service is active and running.\nDetails:\n{output}" else: return f"There was an issue with the Rsyslog service.\nError Details:\n{error_output}" except Exception as e: return str(e) print(check_rsyslog_status()) ``` 以上 Python 脚本可用于自动化检测 rsyslog 的状态并返回相应结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的土拨鼠呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值