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 -打印
mail -邮件
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.

时间 主机名 子系统名 消息字段

posted @ 2023-09-04 14:38  寻梦99  阅读(219)  评论(0)    收藏  举报