Linux系统日志
系统日志简介
日志的三种类型
- 内核及系统日志
这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。系统中有相当一部分程序会把日志文件交由rsyslog管理,因而这些程序使用的日志记录也具有相似的格式。 - 用户日志
这种日志数据用于记录Linux操作系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
rsyslog的管理
Rsyslog的全称是 rocket-fast system for log,它提供了高性能,高安全功能和模块化设计。rsyslog能够接受从各种各样的来源,将其输入,输出的结果到不同的目的地。rsyslog可以提供超过每秒一百万条消息给目标文件。
特点:
- 多线程
- 可以通过许多协议进行传输UDP,TCP,SSL,TLS,RELP;
- 直接将日志写入到数据库;
- 支持加密协议:ssl,tls,relp
- 强大的过滤器,实现过滤日志信息中任何部分的内容
- 自定义输出格式;
配置文件:
配置文件/etc/rsyslog.conf主要有3个部分
MODULES :模块
GLOBAL DRICTIVES :全局设置
RULES:规则
常见日志文件
常见的日志文件 | 作用 |
---|---|
/var/log/boot.log | 录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息 |
/var/log/lastlog | 记录最后一次用户成功登陆的时间、登陆IP等信息 |
/var/log/messages | 记录Linux操作系统常见的系统和服务错误信息 |
/var/log/secure | Linux系统安全日志,记录用户和工作组变坏情况、用户登陆认证情况 |
/var/log/btmp | 记录Linux登陆失败的用户、时间以及远程IP地址 |
/var/log/syslog | 只记录警告信息,常常是系统出问题的信息,使用lastlog查看 |
/var/log/wtmp | 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,使用last命令查看 |
/var/run/utmp | 该日志文件记录有关当前登录的每个用户的信息。如 who、w、users、finger等就需要访问这个文件 |
日志级别
优先级 | 说明 |
---|---|
emerg | 紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。 |
alert | 需要立即修复,例如系统数据库损坏。 |
crit | 危险情况,例如硬盘错误,可能会阻碍程序的部分功能。 |
err | 一般错误消息。 |
warning | 警告。 |
notice | 不是错误,但是可能需要处理。 |
info | 通用性消息,一般用来提供有用信息。 |
debug | 调试程序产生的信息。 |
none | 没有优先级,不记录任何日志消息。 |
注意: 从上到下,级别从低到高,记录的信息越来越少 详细的可以查看手册:man3 sys log
系统日志进阶
日志采集
编辑日志的配置文件
vim /etc/rsyslog.conf
把日志放入新建立的文件westos里
查看日志,再重启日志,可以看到日志生成
日志的远程同步
为方便一台服务器管理多台服务器 可以将其他服务器中的日志集中到一台服务器中管理
将client服务器的日志同步到server服务器中
发送方client IP 172.25.254.126
接受方server IP 172.25.254.176
编辑server服务器的日志配置文件
vim /etc/rsyslog.conf
将所有日志发送给server
之后重启,清空日志,输入logger test, 再查看日志,可以看到生成刚才的进程日志
在接受方编辑日志配置文件
vim /etc/rsyslog.conf
将15,16行的注释取消
15 $ModLoad imudp 日志接受模块
16 $UDPServerRun 514 开启接收模块
重启日志,关闭防火墙,
防火墙为开启状态,关闭防火墙
清空日志后在发送方输入logger test查看日志(清空日志是为了避免被其他进程产生的日志干扰),可以看到发送方的日志
日志采集格式的设定
为了在管理服务器的时候方便,可以通过日志采集格式的设定来获得日志的生成时间、日志发送方的ip地址、日志的服务目标、日志的内容
编辑日志配置文件
vim /etc/rsyslog.conf
vim /etc/rsyslog.conf
$template LOGFMT,"%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"
在自己显示的日志文件后面,把格式添加进去:*.*/var/log/westos;LOGFMT
%timegenerated% | 显示日志时间 |
%FROMHOST-IP% | 显示主机IP |
%syslogtag% | 日志记录目标 |
%msg% | 日志内容 |
\n | 换行 |
查看日志
时间同步
在服务端编辑时间同步的配置文件
vim /etc/chrony.conf
22行: allow 172.25.254.0/24 允许那些客户端来同步本机时间
29行: local stratum 10 本机不同步任何主机的时间,本机作为时间源
然后重启时间同步
在接受方编辑时间同步配置文件
vim /etc/chrony.conf
3行 server 172.25.254.225 iburst(删除其他的) 本机立即同步225主机的时间
然后重启systemctl restart chronyd,输入下图命令
timedatectl命令
timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具,它作为systemd系统和服务管理器的一部分,
代替旧的传统的用在基于Linux分布式系统的sysvinit守护进程的date命令。
timedatectl命令可以查询和更改系统时钟和设置,你可以使用此命令来设置或更改当前的日期,
时间和时区,或实现与远程NTP服务器的自动系统时钟同步。
通过使用来自于终端使用timedatectl命令的NTP,设置date、time、timezone和synchronize time来管理时间。让Linux服务器或系统保持正确的时间。
它有以下优点:
- 维护及时操作的系统任务,因为在Linux中的大多数任务都是由时间来控制的。
- 记录事件和系统上其它信息等的正确时间。
status | 显示当前时间信息 |
set-time | 设定当前时间 |
set- timezone | 设定当前时区 |
set- local-rtc 0/1 | 设定是否使用utc时间 |
set-tamezone | 查看支持的所有时区 |
journalctl
日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息。Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf
-n 3 | 查看最近3条日志 |
-p err | 查看错误日志 |
-o json | 以json格式显示日志 |
–since | 查看从什么时间开始的日志 |
–until | 查看到什么时间为止的日志 |
journalctl 查看所有日志,默认情况下,只保存本次启动的日志
journalctl -k 查看内核日志(不显示应用日志)
journalctl -b 查看系统本次启动的日志
journalctl -b -0
journalctl -b -1 查看上一次启动的日志,需更改设置,如上次系统崩溃,需要查看日志时,就要看上一次的启动日志。
journalctl --since="2012-10-3018:17:16" 查看指定时间的日志
journalctl --since "20 minago"
journalctl --since yesterday
journalctl --since"2015-01-10" --until "2015-01-11 03:00"
journalctl --since 09:00 --until"1 hour ago"
journalctl --since"15:15" --until now
journalctl -n 显示尾部的最新10行日志(默认10行)
journalctl -n 20 显示尾部指定行数的日志(查看的是/var/log/messages的日志,但是格式上有所调整,如主机名格式不一样而已)
journalctl -f 实时滚动显示最新日志
journalctl /usr/lib/systemd/systemd 查看指定服务的日志
journalctl _PID=1 查看指定进程的日志
journalctl /usr/bin/bash 查看某个路径的脚本的日志
journalctl _UID=33 --since today 查看指定用户的日志
journalctl -u nginx.service 查看某个Unit的日志
journalctl -u nginx.service --since toda
journalctl -u nginx.service -f 实时滚动显示某个Unit的最新日志
journalctl -u nginx.service -u php-fpm.service --since today 合并显示多个Unit的日志
journalctl --disk-usage 查看当前日志占用磁盘的空间的总大小
journalctl --vacuum-size=1G指定日志文件最大空间
journalctl --vacuum-time=1years指定日志文件保存多久
journalctl -p err -b 只显示错误级别或者更高的日志条目(过滤掉优先级较低的信息。)
journalctl -p 3 -b
0 | emerg |
1 | alert |
2 | crit |
3 | err |
4 | warning |
5 | notice |
6 | info |
7 | debug |
journalctl -b -u httpd -o json 将journal条目输出为JSON格式
cat | 只显示信息字段本身。 |
export | 适合传输或备份的二进制格式。 |
json | 标准JSON,每行一个条目。 |
json-pretty | JSON格式,适合人类阅读习惯。 |
json-sse | JSON格式,经过打包以兼容server-sent事件。 |
short | 默认syslog类输出格式。 |
short-iso | 默认格式,强调显示ISO 8601挂钟时间戳。 |
short-monotonic | 默认格式,提供普通时间戳。 |
short-precise | 默认格式,提供微秒级精度。 |
verbose | 显示该条目的全部可用journal字段,包括通常被内部隐藏的字段。 |
/etc/systemd/journald.conf 日志的相关配置
以下参数用于限定journal体积的膨胀速度: | |
---|---|
SystemMaxUse= | 指定journal所能使用的最高持久存储容量。 |
SystemKeepFree= | 指定journal在添加新条目时需要保留的剩余空间。 |
SystemMaxFileSize= | 控制单一journal文件大小,符合要求方可被转为持久存储。 |
RuntimeMaxUse= | 指定易失性存储中的最大可用磁盘容量(/run文件系统之内)。 |
RuntimeKeepFree= | 指定向易失性存储内写入数据时为其它应用保留的空间量(/run文件系统之内)。 |
RuntimeMaxFileSize= | 指定单一journal文件可占用的最大易失性存储容量(/run文件系统之内)。 |