linux 的日志管理介绍
1,日志管理流程
采集日志 (rsyslog)——> 滚动日志(logrotate)——> 自动化管理日志(cron、anacron)
2、日志管理服务 rsyslog,采集日志进程 rsyslogd。
systemd-journal是一个改进型的日志管理服务,可以收集来自内核、系统早期的启动阶段的日志、系统守护进程在启动和运行中的标准
输出和错误信息、还有syslog的日志。
该日志服务仅仅把日志集中保存在单一结构化的日志文件/run/log默认情况下并不会持久化保存日志、每次重启后,之前的日志都会丢失。
另外,一些rsyslog无法收集的日志也会被jounral记录到
【1】作用:主要用来采集日志,不产生日志
【2】rsyslog的配置文件:/etc/rsyslog.conf
3,在rsyslogd服务的控制下,会将系统日志 按照不同的类型采集整理在不同的文件中,在需要查看时,可以在对应的文件中找到相应的日志信息:
系统日志
/var/log/message //绝大多数的系统日志都记录到文件
/var/log/secure //所有跟安全和认知授权等日志都会记录到此文件中
/var/log/maillog //邮件服务日志
/var/log/cron //计划任务日志
/var/log/boot.log //系统启动相关的日志
/var/log/demsg //内核缓冲信息,系统启动时,硬件相关信息
/var/log/audit/audit.log //系统审计相关的日志
程序日志
/var/log/yum.log //yum相关的日志
/var/log/xferlog //ftp文件上传下载日志
/var/log/httpd/access_log //httpd访问日志
/var/log/httpd/error_log //httpd错误日志
/var/log/mysql.log //mysql日志
特殊日志,二进制文件,不能直接查看
/var/log/wtmp //登录用户信息,使用w命令
/var/log/btmp //最近登录用户信息,使用last命令
/var/log/lastlog //所有用户登录信息,使用lastlog命令
4,linux日志分类linux系统中主要有三个日志子系统:连接时间日志,进程统计日志,错误日志。
连接时间日志
连接时间日志是有多个程序执行的,把日志记录到/var/log/wtmp /var/run/utmp /var/log/lastlog三个文件中,这三个文件记录了用户登录系统和退出的有关信息,utmp保存了当前用户的每个用户的信息,wtmp记录了每个用户登录注销和系统的启动,关机的事件,lastlog记录了每个用户最后登录的信息记录。
wtmp和utmp文件都是二进制,不能使用cat和tail命令查看,但是可以使用who w users last等命令查看着两个文件的信息
who [参数]
-a 显示全部信息
-m 只显示当前终端的登录用户信息
-q 只显示当前登录到系统中的用户名称和数量,和其他参数共同使用的时候,其他参数将被忽略
日志文件
多数日志文件存放在/var/log/目录下面,一下是各类日志文件和记录的内容
assess-log 记录和HTTP/web的传输
secure 记录登录系统存取资料的消息
btmp 记录失败的消息
lastlog 记录最近几次成功登录的事件和最后一次不成功的登录
messages 从syslog中记录信息(有的是连接到syslog文件)
sudolog 记录sudo发出的命令
sulog 记录使用su命令的使用
utmp 记录当前登录的每个用户
wtmp 一个用户每次登录进入和退出的的永久记录
syslog 通常连接到messages文件
xferlog 记录了FTP会话中上传和下载的详细日志
5,journal 的使用
journalctl 用来查询 systemd-journald 服务收集到的日志。systemd-journald 服务是 systemd init 系统提供的收集系统日志的服务。
1、查看journal占用磁盘空间大小:
journalctl --disk-usage
2、指定journal占用磁盘空间大小:
journalctl --vacuum-size=1G
3、指定journal日志保存时间:
journalctl --vacuum-time=1years
4、查看具体服务的日志:
journalctl -u nginx.service
journalctl -u nginx.service -f 实时查看
5、实时查看最新日志:
journalctl -f
6、查看尾部最新的n行日志:
journalctl -n 20
7、查看指定时间的日志:
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since 09:00 --until "1 hour ago"
8、查看内核日志:
journalctl -k
9、查看系统启动日志:
journalctl -b
10、检查journal是否运行正常以及日志文件是否完整无损坏
journalctl --verify
所以这里我们只需要指定下journal占用空间大小和保存时间就好了。
6、使用logrotae 切割,转储,删除日志。
1,常用的文件和目录
#查看logrotate的配置文件
cat /etc/logrotate.conf
#查看logrotate配置了什么日志的切割
ll /etc/logrotate.d/
?
logrotate最常用的三个方式为:
logrotate /etc/logrotate.conf #重新读取配置文件,并对符合条件的文件文件进行rotate。
logrotate -d /etc/logrotate.conf #调试模式,输出调试结果,但并不执行。
logrotate -f /etc/logrotate.conf #强制模式,对所有相关文件进行rotate。
2,转储的日志文件配置
参数 功能
compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
?
发送日志到邮箱的配置
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
?
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
?
sharescript 共享脚本、下边的postrotateendscript只执行一次即可,同时设置多个日志时用到
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
?
时间配置
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
?
常用的两个配置:
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
?
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
dateformat -%Y%m%d%s 设置后缀名格式,此格式是年月日和秒组成的后缀名。
dateext 添加归档文件后缀名为日期格式。