当前位置: 首页 > news >正文

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 || trueendscript
}

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 => 514type => "syslog"}tcp {port => 514type => "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: 9080grpc_listen_port: 0
positions:filename: /tmp/positions.yaml
clients:- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: systemstatic_configs:- targets:- localhostlabels: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)

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

http://www.xdnf.cn/news/875413.html

相关文章:

  • 1.1随机试验与随机事件
  • Java 2D 图形变换方法
  • Linux 云服务器部署 Flask 项目(含后台运行与 systemd 开机自启)
  • 在java中不同数据类型的运算与内存占用分析
  • WordToCard,一键将Markdown内容转换为精美知识卡片(使用Qwen3)
  • image: ragsaas/backend:latest 背后的 来源机制 和 可能的来源地
  • Elasticsearch中的映射(Mapping)是什么?
  • 一文读懂开源AI框架REINVENT 4
  • EtherCAT AOE
  • Linux防火墙实战演练
  • Vue Router 导航方法完全指南
  • Openwrt 嵌入式Linux发行版
  • 计算机系统结构第5章-线程级并行
  • JAVA 集合进阶 Map集合的实现类 TreeMap
  • 嵌入式分析利器:DuckDB与SqlSugar实战
  • Python中class定义系统讲解
  • promise和异步编程
  • Java框架面试题
  • (1-6-3)Java 多线程
  • iptables实战案例
  • STM32最小CLion开发环境
  • L2-056 被n整除的n位数 - java
  • Docker慢慢学
  • unity+ spine切换武器不换皮肤解决方案
  • C#Winform中DevExpress下的datagridview 特定列可编辑,其他列不可编辑
  • “详规一张图”——香港土地利用数据
  • java.sql.BatchUpdateException: Incorrect string value: ‘\xF0\x9F\x91\x91**...‘
  • 面试题小结(真实面试)
  • Java编程常见错误与最佳实践
  • machine_env_loader must have been assigned before creating ssh child instance