写在前面
这则笔记主要整理linux日志管理的相关知识,主要包括:
系统日志介绍
日志服务:rsyslogd
日志查看:dmesg、last、lastb
日志管理:journalctl
linux系统日志简介
系统日志是了解linux系统运行状况的重要途径,centos系统日志保存在/var/log/
目录下。
从centOS6.x开始,已经用syslogd取代了原先的syslogd服务。syslogd特点如下:
基于TCP网络协议传输日志信息;
更安全的网络传输方式;
有日志消息的及时分析框架;
后台数据库;
配置文件中可以写简单的逻辑判断;
与syslog配置文件相兼容;
查看系统日志是否启动
1 | //查看服务是否启动 |
常见日志类型
文件名 | 内容说明 |
---|---|
message | 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 |
secure | 与安全相关的日志信息 |
maillog | 与邮件相关的日志信息 |
cron | 与定时任务相关的日志信息 |
spooler | 与UUCP和news设备相关的日志信息 |
boot.log | 守护进程启动和停止相关的日志消息 |
access-log | 纪录HTTP/web的传输 |
btmp | 纪录失败的纪录 |
lastlog | 纪录最近几次成功登录的事件和最后一次不成功的登录 |
sudolog | 纪录使用sudo发出的命令 |
sulog | 纪录使用su命令的使用 |
syslog | 从syslog中记录信息(通常链接到messages文件) |
utmp | 纪录当前登录的每个用户 |
wtmp | 一个用户每次登录进入和退出时间的永久纪录 |
xferlog | 纪录FTP会话 |
日志服务:rsyslogd
日志文件格式(四列):
时间产生的时间
发生事件的服务器的主机名
产生事件的服务名或进程名
事件的具体信息
配置文件
rsyslogd 配置文件为 /etc/rsyslog.conf
配置文件格式为:
服务名称[连接符号]日志等级 日志记录位置
服务名称 | 说明 |
---|---|
auth | 安全和认证相关消息(不推荐使用authpriv替代) |
authpriv | 安全和认证相关消息(私有的) |
cron | 系统定时任务cront和at产生的日志 |
daemon | 和各个守护进程相关的日志 |
ftp | ftp守护进程产生的日志 |
kern | 内核产生的日志(不是用户进程产生的) |
local0-local7 | 为本地使用预留的服务 |
lpr | 打印产生的日志 |
邮件收发信息 | |
news | 与新闻服务器相关的日志 |
syslog | 由syslogd服务产生的日志信息 |
user | 用户等级类别的日志信息 |
uucp | uucp子系统的日志信息,uucp是早期linux系统进行数据传递的协议,后来也常用在新闻组服务中 |
连接符号
*
代表所有日志等级,比如:”authpriv”代表authpriv认证服务产生的日志,所有的日志等级都记录
.
代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:”cron.info”代表cron服务产生的日志,只要日志等级大于info级别,就记录;
.=
代表只记录所需等级的日志,其他等级的都不记录。比如:”*.=emerg”代表人和日志服务产生的日志,只要等级是emerg等级就记录。这种用法及少见。
.!
代表不等于,也就是除了该等级的日志外,其他等级的日志都记录;
日志等级
debug :一般的调试信息说明
info:基本的通知信息
notice :普通信息,但是有一定的重要性
warning :警告信息,但是还不会影响到服务或系统的运行
err :错误信息,一般达到err等级的信息就影响到服务或系统的运行了
crit:临界状况信息,比err等级还要严重
alert:警告状态信息,比crit还要严重,必须立即采取行动
emerg :疼痛等级信息,系统已经无法使用了;
日志保存位置
日志文件的绝对路径,如 “/var/log/secure”;
系统设备文件,如 “/dev/lp0”;
转发给远程主机,如 “@192.168.0.210:514”;
发给在线的用户,如 “root”,”*”;
忽略或丢弃日志,如 “~”;
说明:* 星号代表任何内容。
如果是在服务名称处,代表任何服务;
如果是在日志等级处,代表任何日志等级;
如果是在保存位置处,代表发给所有的在线用户。
日志论替切割 :logrotate 命令
logrotate
程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,从而节省磁盘空间。
日志轮转是系统自动完成的 为了方便管理将每个服务类型的日志轮替配置信息形成独立文件存储在/etc/logrotate.d/*
。
如果配置文件中拥有 dateext 参数
,那么日志会用日期来作为日志文件的后缀。例如 secure-20140609。这样,日志文件就不会重名,也就不需要更改日志的文件名,只需保存指定的日志个数,删除其他的日志文件即可。如果配置文件中没有 dateext 参数
,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的 secure 日志会自动更名为 secure.1 ,然后新建 secure 日志,用来保存新的日志。当第二次进行日志轮替时, secure.1 会自动改名为 secure.2 ,当前的 secure 日志会自动更名为 secure.1 ,然后新建 secure 日志,用来保存新的日志。
logrotate
配置文件
Logrotate的配置信息保存在/etc/logrotate.conf
文件中。
参数 | 说明 |
---|---|
daily | 日志的轮替周期是每天。 |
weekly | 日志的轮替周期是每周。 |
monthly | 日志的轮替周期是每月。 |
rotate 数字 | 保留的日志文件的个数。0指没有备份。 |
compress | 日志轮替时,旧的日志进行压缩 |
create mode owner group | 建立新日志,同时指定新日志的权限、所有者和所属组。 如 create 0600 root utmp。 |
mail address | 当日志轮替时,输出内容通过邮件发送到指定的邮箱。 |
missingok | 如果日志不存在,则忽略该日志的警告信息。 |
notifempty | 如果日志为空文件,则不进行日志轮替。 |
minisize 大小 | 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替。 |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。 如 size 100k。 |
dateext | 使用日期作为日志轮替文件的后缀。 如 secure-20140609 |
1 | [root@localhost ~]# cat /etc/logrotate.conf |
logrotate
语法
命令格式:
1 | logrotate [OPTION] [configfile] |
常用参数 | 说明 |
---|---|
-d, –debug | debug模式,测试配置文件是否有错误; |
-f, –force | 强制转储文件; |
-m, –mail=command | 压缩日志后,发送日志到指定邮箱; |
-s, –state=statefile | 使用指定的状态文件; |
-v, –verbose | 显示转储过程; |
常见用法:
1 | //强制进行日志文件都进行轮替操作 |
查看日志的常见命令
dmesg
命令
dmesg
命令显示linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构、cpu、挂载的硬件,RAM等多个运行级别的大量的系统信息。
命令行格式:
1 | dmesg [options] |
参数 | 说明 |
---|---|
-c | 显示信息后,清除ring buffer中的内容 |
-s<缓冲区大小> | 预设置为8196,刚好等于ring buffer的大小 |
-n | 设置记录信息的层级 |
示例:
- 列出加载到内核中的所有驱动
1 | dmesg | less |
- 搜索包含特定字符串的被检测到的硬件,-i 表示忽略大小写
1 | dmesg | grep -i usb |
- 实时监控dmesg日志输出
1 |
|
- 只输出dmesg命令开头/结尾20行日志
1 | dmesg | head -n 20 //开头20行 |
last
命令
last
命令,用来显示/var/log/wtmp
文件,这是一个二进位制文件,内容是所有登录、登出的用户。
命令行格式:
1 | last [options] |
选项 | 说明 |
---|---|
-a | 把从何处登入系统的主机名称或IP地址,显示在最后一行; |
-d | 将IP地址转换成主机名称。 |
-f <记录文件> | 指定记录文件,默认是显示/var/log目录下的wtmp文件的记录,但/var/log目录下得btmp能显示的内容更丰富,可以显示远程登录,例如ssh登录 ,包括失败的登录请求。 |
-n <显示列数>或-<显示列数> | 设置列出名单的显示列数。 |
-R | 不显示登入系统的主机名称或IP地址。 |
-x | 显示系统关机,重新开机,以及执行等级的改变等信息。 |
-i | 显示特定ip登录的情况 |
-t | 显示特定时刻之前的信息 |
-num | 展示前 num 个 |
username | 展示 username 的登入讯息 |
tty | 限制登入讯息包含终端机代号 |
last 命令能查看哪些信息
字段 | 说明 |
---|---|
第一列 | 用户名 |
第二列 | 终端位置 |
第三列 | 登录ip或者内核 |
第四列 | 开始时间 |
第五列 | 结束时间(still login in 还未退出 down 直到正常关机 crash 直到强制关机) |
第六列 | 持续时间 |
示例:
- 显示特定的用户名
1 | last root //root可替换为需要查询的username |
- 最后一列显示主机IP地址
1 | last -n 5 -a -i |
lastb
查看失败登录
lastb
命令记录失败的登录尝试。你必须拥有root权限才能运行lastb命令。
示例:
1 | [root@stevey log]# lastb |
lastlog
命令 查看每一个用户最近一次的登录信息
1 | [root@local-linux00 ~]# lastlog |
日志管理
Systemd统一管理所有Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有内核日志和应用日志,其配置文件/etc/systemd/journald.conf
journalctl用法
1 | // 查看所有日志(默认情况下 ,只保存本次启动的日志) |