Linux 日志管理
Linux 日志管理
介绍
Linux 日志管理是指对 Linux 系统中产生的各种日志文件进行收集、分析、备份、轮转和删除等操作,以便监控系统的运行状况,诊断和解决问题,提高系统的安全性和性能。
Linux 系统中有两种主要的日志服务,一种是传统的 rsyslog 服务,它是一个灵活的日志处理器,可以将日志信息发送到不同的目标,如文件、数据库、网络等。另一种是新添加的 systemd-journal 服务,它是一个二进制日志系统,可以存储更多的元数据,如时间戳、主机名、优先级等,并支持日志查询和过滤。
Linux 系统中的日志文件通常存放在 /var/log 目录下,不同的程序和服务会生成不同的日志文件,记录了各种类型的信息,如内核消息、用户登录事件、程序错误等。常见的日志文件及其存放内容如下:
日志文件 | 存放内容 |
---|---|
/var/log/message | 内核消息及各种应用程序的公共日志信息,是 Red Hat Linux 中最常用的日志之一 |
/var/log/secure | 与安全相关的日志信息 |
/var/log/maillog | 与邮件相关的日志信息 |
/var/log/cron | 与定时任务相关的日志信息 |
/var/log/dmesg | 引导过程中的各种事件信息 |
/var/log/lastlog | 每个用户最近一次登录信息 |
/var/log/wtmp | 每个用户登录注销及系统启动和停机事件 |
/var/log/btmp | 失败的、错误的登录尝试及验证事件 |
Linux 系统中的日志文件会定期进行轮转,即将旧的日志文件重命名并压缩,创建新的日志文件。这样可以避免日志文件占用过多的磁盘空间,并保留一定时间段内的日志记录。日志轮转由 logrotate 命令实现,它根据 /etc/logrotate.conf 和 /etc/logrotate.d/ 目录下的配置文件来执行轮转操作。这些配置文件可以指定轮转周期、轮转次数、轮转方式、轮转后执行的命令等。
Linux 系统中有多种命令和工具可以用来查看和分析日志文件,例如:
-
tail 命令:用于查看日志文件的最后几行,常用 -f 选项实时监控日志变化。
-
grep 命令:用于在日志文件中搜索特定的关键字或模式。
-
who 命令:用于查看当前登录到系统的用户信息。
-
last 命令:用于查看成功登录到系统的用户记录。
-
lastlog 命令:用于查看系统中所有用户最近一次登录信息。
-
lastb 命令:用于查看用户错误的登录列表。
-
Logcheck 工具:用于分析系统日志并报告异常或重要事件。
-
Logcheck 工具:用于分析系统日志并报告异常或重要事件。
相关软件包和配置文件
软件包
[root@Demo01 ~]# rpm -qa | grep rsyslog
rsyslog-relp-8.24.0-57.el7_9.3.x86_64
rsyslog-libdbi-8.24.0-57.el7_9.3.x86_64
rsyslog-mmnormalize-8.24.0-57.el7_9.3.x86_64
rsyslog-mmjsonparse-8.24.0-57.el7_9.3.x86_64
rsyslog-crypto-8.24.0-57.el7_9.3.x86_64
rsyslog-gnutls-8.24.0-57.el7_9.3.x86_64
rsyslog-snmp-8.24.0-57.el7_9.3.x86_64
rsyslog-kafka-8.24.0-57.el7_9.3.x86_64
rsyslog-mysql-8.24.0-57.el7_9.3.x86_64
rsyslog-mmkubernetes-8.24.0-57.el7_9.3.x86_64
rsyslog-gssapi-8.24.0-57.el7_9.3.x86_64
rsyslog-mmaudit-8.24.0-57.el7_9.3.x86_64
rsyslog-mmsnmptrapd-8.24.0-57.el7_9.3.x86_64
rsyslog-8.24.0-57.el7_9.3.x86_64
rsyslog-pgsql-8.24.0-57.el7_9.3.x86_64
rsyslog-udpspoof-8.24.0-57.el7_9.3.x86_64
rsyslog-elasticsearch-8.24.0-57.el7_9.3.x86_64
rsyslog-doc-8.24.0-57.el7_9.3.noarch
配置文件
/etc/rsyslog.conf #主配置文件
/etc/rsyslog.d/*.conf #辅配置文件
/var/log/ #日志文件存放位置
/usr/sbin/rsyslogd #执行文件
/usr/lib64/rsyslog/ #模块路径
/usr/lib/systemd/system/rsyslog.service #服务单元
[root@Demo01 ~]# grep '####' /etc/rsyslog.conf
#### MODULES ####定义模块
#### GLOBAL DIRECTIVES ####定义全局环境
#### RULES #### 定义规则
模块定义
module(load="imuxsock" # 提供对本地系统日志的支持
SysSock.Use="off") # 关闭通过本地日志接口的信息接收功能,日志信息接收通过下面的imjournal模块
module(load="imjournal" # 提供对systemd日志的访问
StateFile="imjournal.state") # 定义状态文件,rsyslog用于记录文件上传进度,避免日志内容混乱
全局环境设置
# 定义工作目录
global(workDirectory="/var/lib/rsyslog")
# 使用默认的时间戳格式
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
# 定义辅助配置文件位置
include(file="/etc/rsyslog.d/*.conf" mode="optional")
规则设置
信息来源.安全级别 处理方式
信息来源
kern:内核相关的日志
user:用户相关的日志
mail:邮件相关的日志
daemon:系统服务相关的日志
lpr:打印相关的日志
cron:计划任务相关的日志
authpriv:认证相关的日志
news:新闻相关的日志
uucp:文件copy相关的日志
local0-local7:自定义相关的日志信息
*: 所有
安全级别
debug: 调试
info: 消息
notice: 注意
warn,warning: 警告
err,error: 错误
crit: 严重级别
alert: 需要立即修改该的信息
emerg,panic: 内核崩溃,系统接近崩溃
*:所有日志级别
none:没有任何级别,也就是不记录日志信息
表达形式
mail.err err+crit+alert+emerg
mail.=err err
mail.!err 除了err
处理方式
/PATH/FILENAME:将信息储存至 /PATH/FILENAME文件中。注意,如果要系统日志服务把信息储存到文件,该文件必须以
斜线(/) 开头的绝对路径命名之。
USERNAME:将信息送给已登录的用户。
@HOSTNAME:代表使用udp协议将信息转送到远端的日志服务器。
@@hostname:代表使用tcp协议将信息传送到远端的日志服务器
*:将信息传送给所有已登录的用户。
#### RULES ####
########## 日志设备.日志级别 ################## ######### 消息发送位置 ###############
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
local2.info /tmp/test.log
日志设备
日志设备.级别 | 说明 |
---|---|
auth | -pam(linux中的认证机制) 产生的日志 |
authpriv | -ssh,ftp 等登录信息的验证信息 |
cron | 时间任务相关 |
kern | -内核相关 |
lpr | -打印 |
-邮件 | |
mark(syslog) | -rsyslog服务内部的信息,时间标识 |
news | -新闻组 |
user | -用户程序产生的相关信息 |
uucp | -unix to unix copy unix主机之间的相关通信 |
local 1~7 | 自定义日志设备文件 |
日志级别
级别 | 说明 |
NONE | 什么都不记录 |
EMERG (紧急) | 导致主机系统不可用的情况 |
ALERT(警告) | 必须马上采取解决措施 |
CRIT (严重) | 比较严重的情况 |
ERR | 运行时的错误 |
WARNING (提醒) | 可能影响系统功能的事件 |
NOTICE(注意) | 不会影响系统功能,但是值得注意 |
INFO | 一般信息 |
DEBUG | 调试信息 |
自下而上,信息记录的越来越少 |
常用的日志文件
/var/log/boot.log #系统启动时的日志。
/var/log/dnf.* #dnf软件包管理器相关日志
/var/log/firewalld #防火墙日志
/var/log/lastlog #所有用户最后一次登录信息,需要使用lastlog命令查看
/var/log/maillog #电子邮件系统相关日志
/var/log/messages #整体的系统日志,具体记录范围取决于服务的配置文件
/var/log/wtmp #记录当前登录和过去登录的用户信息,使用last命令查看
日志格式
[root@Demo01 ~]# tail -n 20 /var/log/messages
Jul 1 05:05:41 LAMP dhclient[2115]: bound to 192.168.10.25 -- renewal in 736 seconds.
Jul 1 05:05:41 LAMP systemd: Starting Network Manager Script Dispatcher Service...
Jul 1 05:05:41 LAMP dbus[777]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Jul 1 05:05:41 LAMP systemd: Started Network Manager Script Dispatcher Service.
DATE TIME HOSTNAME APP(NAME)[PID]: MESSAGES
每一个字段的意义如下说明:
DATE:信息发生的日期。
TIME:信息发生的时间。
HOSTNAME:信息发生的主机。
APP:产生信息的软件。
NAME:软件的名称,或是软件组件(Component)的名称。可以省略。
PID:进程标识符 (Process ID)。可以省略。
MESSAGES:信息的内容。
Sep 15 09:03:59 ecs-t6-large-2-linux-20190824103606 systemd-logind: New session 314 of user root.
时间 主机名 子系统名 消息字段