linux-日志服务

发布于:2025-07-23 ⋅ 阅读:(14) ⋅ 点赞:(0)


一、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 mail 邮件系统 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 系统中日志管理的两大核心组件,分别负责日志的收集 / 转发和存储 / 生命周期管理,二者配合确保系统日志高效、有序、可持续地运行


网站公告

今日签到

点亮在社区的每一天
去签到