1.介绍
Linux系统日志是记录了系统运行状态、程序运行情况以及系统事件的文件。它包含了各种级别的信息,从调试信息和错误报告到警告和系统事件等。Linux系统日志主要分为四个部分:内核日志、系统日志、安全日志和应用程序日志。
- 内核日志:记录了系统内核的运行状态和事件,例如系统启动和关机时间、硬件错误等。
- 系统日志:记录了系统服务和进程的运行情况,例如登录信息、网络连接等。
- 安全日志:记录了系统的安全事件,例如认证失败、攻击尝试等。
- 应用程序日志:记录了应用程序的运行状态和事件,例如数据库服务器的连接信息、Web服务器的请求信息等。
通过查看系统日志,管理员可以了解系统的状态和运行情况,诊断问题并进行故障排除。
2.日志文件
日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。这些信息有些非常敏感,所以在 Linux 中这些日志文件只有 root 用户可以读取。
1.重要日志文件说明
在大多数 Linux 发行版中,系统日志文件通常保存在 /var/log 目录下。这个目录包含了许多不同的日志文件,每个日志文件都用于记录特定类型的日志信息。
日志文件 说明
/var/log/cron 记录与系统定时任务相关的日志
/var/log/cups/ 记录打印信息的日志
/var/log/dmesg 记录了系统在开机时内核自检的信息。也可以使用 dmesg 命令直接查看内核自检信息
/var/log/btmp 记录错误登录的日志。这个文件是二进制文件,不能直接用 Vi 查看,而要使用 lastb 命令查看
/var/log/lastlog 记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件,不能直接用 Vi 查看。而要使用 lastlog 命令查看
/var/log/maillog 记录邮件信息的日志
/var/log/messages 它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,已经用户自定义安装软件的日志,也会在这里列出
/var/log/secure 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh 的登录、su 切换用户,sudo 授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件。不能直接用 Vi 查看,而要使用 last 命令查看
/var/run/utmp 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用 Vi 查看,而要使用 w、who、users 等命令查看
2.文件格式
只要是由日志服务 rsyslogd 记录的日志文件,它们的格式就都是一样的。所以我们只要了解了日志文件的格式,就可以很轻松地看懂日志文件。
日志文件的格式包含以下 4 列:
事件产生的时间。
产生事件的服务器的主机名。
产生事件的服务名或程序名。
事件的具体信息。
例如,下面是一条典型的系统日志信息的格式:
May 12 00:00:01 hostname kernel: printk: 1 message suppressed.
其中,“May 12 00:00:01” 表示时间戳,“hostname” 表示主机名,“kernel” 表示日志源头(内核),而 “printk: 1 message suppressed.” 则表示日志内容。不同的日志级别,如 DEBUG、INFO、WARNING 和 ERROR 等,会以不同的颜色或标识显示在日志文件中,方便管理员快速定位和处理问题。
总之,rsyslogd 记录的日志文件一般采用文本格式并包含时间戳、日志级别、来源和内容等信息。
其实分析日志既是重要的系统维护工作,也是一项非常枯燥和烦琐的工作。如果我们的服务器出现了一些问题,比如系统不正常重启或关机、用户非正常登录、服务无法正常使用等,则都应该先查询日志。
实际上,只要感觉到服务器不是很正常就应该查看日志,甚至在服务器没有什么问题时也要养成定时查看系统日志的习惯。
3.配置文件
rsyslogd 服务是依赖其配置文件 /etc/rsyslog.conf 来确定哪个服务的什么等级的日志信息会被记录在哪个位置的。也就是说,日志服务的配置文件中主要定义了服务的名称、日志等级和日志记录位置。
/etc/rsyslog.conf 是 rsyslog 服务的主要配置文件,它用于指定日志消息如何被接收、处理和转发。
rsyslog.conf 文件的格式是基于模块的,并且由一系列指令和参数组成。其中,每个指令都以一个美元符号($)开头,后面跟着指令的名称和参数。下面是一个简单的 rsyslog.conf 配置文件的示例:
# This is a sample rsyslog configuration file.
# Load the kernel log module
$ModLoad imklog
# Set the default logging action to be "standard output"
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
# Log messages from the local system
local0.* /var/log/local-messages.log
在此示例中,我们首先加载了名为 imklog 的内核日志模块。接下来,我们设置了默认的日志记录行为并指定了一些参数,例如将日志文件的权限设置为 0640 等。最后,我们指定了一条规则,该规则将所有使用 local0 设施的消息写入 /var/log/local-messages.log 文件中。
中间的命令我们不去了解,主要是理解最后一行。它的格式可以理解为服务名称[连接符号]日志等级 日志记录位置
服务名称:我们首先需要确定 rsyslogd 服务可以识别哪些服务的日志,也可以理解为以下这些服务委托 rsyslogd 服务来代为管理日志。
服务名称 说明
auth(LOG_AUTH) 安全和认证相关消息 (不推荐使用authpriv替代)
authpriv(LOG_AUTHPRIV) 安全和认证相关消息(私有的)
cron(LOG_CRON) 系统定时任务cront和at产生的日志
daemon(LOG_DAEMON) 与各个守护进程相关的曰志
ftp(LOG_FTP) ftp守护进程产生的曰志
kern(LOG_KERN) 内核产生的曰志(不是用户进程产生的)
Iocal0-local7(LOG_LOCAL0-7) 为本地使用预留的服务
lpr(LOG_LPR) 打印产生的日志
mail(LOG_MAIL) 邮件收发信息
news(LOG_NEWS) 与新闻服务器相关的日志
syslog(LOG_SYSLOG) 存储syslogd服务产生的曰志信息(虽然服务名称已经改为rsyslogd,但是很多配置依然沿用了syslogd服务的,所以这里并没有修改服务名称)
user(LOG_USER) 用户等级类别的日志信息
uucp(LOG_UUCP) uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来也常用在新闻组服务中。
连接符号:在这里,连接符号可以被识别为以下三种。
- “.”代表只要比后面的等级高的(包含该等级)日志都记录。比如,“cron.info”代表cron服务产生的日志,只要日志等级大于等于info级别,就记录。
- “.=”代表只记录所需等级的日志,其他等级的日志都不记录。比如,“*.=emerg”代表人和日志服务产生的日志,只要等级是emerg等级,就记录。这种用法极少见,了解就好。
- “.!”代表不等于,也就是除该等级的日志外,其他等级的日志都记录。
日志等级:
下面是常见的日志等级列表:
- DEBUG:用于详细记录系统或应用程序的内部状态、变量值和事件信息,通常只在调试时使用。
- INFO:表示一般性的系统状态和事件信息,例如服务启动、关机、重启等,通常用于跟踪系统运行情况。
- NOTICE:表示正常但重要的事件信息,例如配置文件更改、用户登录、系统警报等。
- WARNING:表示一个非致命错误或异常发生,比如磁盘空间不足、网络连接中断等,可以引起注意但不会导致系统崩溃。
- ERROR:表示一个异常发生,可能会影响系统的正常运行,需要立即检查并修复。
- CRITICAL:表示一个严重的错误或问题发生,可能会导致系统崩溃或数据丢失,需要立即采取行动。
- ALERT:表示一个需要紧急处理的错误或问题发生,需要发送警报或提示,以便管理员立即采取行动。
- EMERGENCY:表示一个严重的系统崩溃或停机事件发生,需要立即通知所有相关人员,并进行紧急处理。
- *:代表所有日志等级。比如,“authpriv.*”代表amhpriv认证信息服务产生的日志,所有的日志等级都记录
这些日志等级通常根据其重要性和紧急程度排序。在实际应用中,我们可以根据需要自定义额外的日志等级,以适应特定的业务需求。