linux-日志服务
一、rsyslog
rsyslog
是 Linux/Unix 系统上的一款高性能、模块化的 日志管理服务,用于收集、处理、过滤和转发系统日志及应用程序日志。支持多种协议(如 TCP/UDP/TLS)、数据库存储(MySQL/PostgreSQL)、远程日志转发等高级功能
rsyslogd
是linux系统内部的一个专门记录日志的服务 --》程序
rsyslog daemon 守护进程:一直在运行的程序,随时都可以访问
[root@rocky-1 rsyslog.d]# ps aux|grep rsyslog
root 931 0.0 0.2 164880 17408 ? Ssl 09:21 0:01/usr/sbin/rsyslogd
-n
root 1655 0.0 0.0 6636 2176 pts/0 S+ 11:10 0:00 grep --color=auto rsyslog
1. 配置文件
/etc/rsyslog.conf
# The authpriv file has restricted access.
authpriv.* /var/log/secure
*.info;mail.none;authpriv.none;cron.none /var/log/messages
设备类型.消息级别
修改sshd_config 配置文件
[root@rocky-1 rsyslog.d]# vim /etc/ssh/sshd_config
# Logging
SyslogFacility AUTH
LogLevel INFO
[root@rocky-1 rsyslog.d]# service sshd restart
rsyslog根据sshd的要求记录日志
[root@rocky-1 rsyslog.d]# vim /etc/rsyslog.conf
auth,authpriv.* /var/log/ssh.log
[root@rocky-1 rsyslog.d]# service rsyslog restart
Redirecting to /bin/systemctl restart rsyslog.service
2. 消息级别
数值 | 级别名称 | 含义说明 | 典型场景 |
---|---|---|---|
0 | emerg | 系统不可用(最高级别) | 系统崩溃、严重硬件故障 emergency |
1 | alert | 需要立即采取行动 | 关键服务停止、磁盘满 alert |
2 | crit | 严重错误 | 数据库崩溃、认证失败 critcal |
3 | err | 一般错误(不影响系统运行) | 服务启动失败、网络连接超时 error |
4 | warning | 警告信息 | 磁盘空间不足(未满)、配置参数已过期 |
5 | notice | 正常但重要的事件(默认记录级别) | 用户登录、服务正常启动 |
6 | info | 一般信息(调试或运行日志) | 请求处理完成、状态变更 information |
7 | debug | 调试信息(最低级别,通常不记录) | 开发阶段的详细日志 |
mail.info 记录info以上级别的日志,包括info
mail.none 排除所有来自 mail 设备的日志(无论级别)
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# /var/log/messages 会记录绝大多数的程序的日志
优先级匹配规则 | |
---|---|
* | 匹配所有设备和级别 |
none | 排除指定设备(如 mail.none) |
= | 精确匹配(如 =error 仅匹配 err 级别) |
! | 否定匹配(如 !info 排除 info 级别) |
3. 设备类型
数值 | 关键字 | 说明 | 典型日志来源 |
---|---|---|---|
0 | kern | 内核消息 | 内核启动日志、硬件驱动错误 kernel —》推荐 |
1 | user | 用户级程序消息(默认值) | 普通应用程序日志 |
2 | 邮件系统 | Postfix、Sendmail 的收发日志 —》推荐 |
|
3 | daemon | 系统守护进程 | Nginx、MySQL、Rsyslog 自身的日志 |
4 | auth | 安全/认证日志 | SSH 登录、sudo 命令、PAM 认证 —》推荐 |
5 | syslog syslogd | 内部日志 | Rsyslog 自身的调试信息 |
6 | lpr | 打印系统 | CUPS 打印服务日志 |
7 | news | 新闻组系统(已废弃) | 极少使用 |
8 | uucp | UUCP 系统 | (历史遗留) 几乎不用 |
9 | cron | 计划任务 | cron 作业执行日志 --》推荐 |
10 | authpriv | 私有认证日志(更敏感) | sudo 的详细审计日志 |
11 | ftp | FTP 服务 | vsftpd、ProFTPD 日志 |
12 | ntp | 时间同步服务 | NTP 或 chrony 日志 |
13 | security | 安全事件(部分系统等同于 auth) | SELinux 审计日志 |
14 | console | 控制台输出 | 物理终端消息 |
15 | solaris-cron | Solaris 的 cron(Linux 通常用 cron) | 兼容性字段 |
16 | local0 | 自定义日志(0-7) | 常用于第三方应用(如 HAProxy、Nginx 自定义日志) |
… | local1-7 | 保留给用户自定义 | 数据库、中间件等专用日志 |
二、日志轮转
日志文件会随时间不断增大,会占用大量磁盘空间,因此需要日志轮转(自动切割、压缩、删除旧日志)
日志轮转功能 logrotate
--》定期去产生一个新的日志文件,将旧的日志文件保存
1. 主配置文件
/etc/logrotate.conf
[root@rocky-2 log]# cat /etc/logrotate.conf
# see “man logrotate” for details
# global options do not affect preceding include directives
# rotate log files weekly 每周执行一次
weekly
# keep 4 weeks worth of backlogs 保留4个日志文件
rotate 4
# create new (empty) log files after rotating old ones 创建空文件做为新的日志文件
create
# use date as a suffix of the rotated file 加日期后缀
dateext
# uncomment this if you want your log files compressed 压缩功能
compress
# packages drop log rotation information into this directory 加载次要的配置文件
include /etc/logrotate.d
# system-specific logs may be also be configured here.
2. 配置日志轮转功能
案例 - > 给monitor_nginx.log配置日志轮转功能
查看 nginx 日志的 logrotate 配置文件
[root@rocky-2 log]# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
create 0640 nginx root
daily
rotate 10
missingok 作用:如果日志文件不存在,不报错,直接跳过。
notifempty 作用:如果日志文件为空(0 字节),不进行轮转。
compress
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
给monitor_nginx.log配置日志轮转
[root@rocky-2 logrotate.d]# cd /etc/logrotate.d
[root@rocky-2 logrotate.d]#vim monitor_nginx
/var/log/monitor_nginx.log
{
missingok
sharedscripts
postrotate
/usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
endscript
}
调整下时间
[root@rocky-2 log]# date -s “2025-7-9 17:07”
Wed Jul 9 17:07:00 CST 2025
手工执行日志轮转
[root@rocky-2 log]#
logrotate /etc/logrotate.conf
[root@rocky-2 log]# ls monitor_nginx.log*
monitor_nginx.log monitor_nginx.log-20250709.gz
3. 结合cron使用
每天自动轮转系统日志
[root@rocky-2 cron.daily]# vim logrotate
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
授予logrotate脚本可执行权限
[root@rocky-2 cron.daily]# chmod +x logrotate
[root@rocky-2 cron.daily]# ll
total 4
-rwxr-xr-x 1 root root 82 Jul 1 17:03 logrotate
总结
rsyslog 和日志轮转是 Linux 系统中日志管理的两大核心组件,分别负责日志的收集 / 转发和存储 / 生命周期管理,二者配合确保系统日志高效、有序、可持续地运行