首先来看看这个目录, 下面存放大部分的系统日志, 以下是比较常用的几个日志文件:
/var/log/message : 核心系统日志文件, 包含系统启动引导, 系统运行状态和大部分错误信息等都会记录到这个文件, 因此这个日志是故障诊断的首要查看对象.
/var/log/dmesg: 核心启动日志, 系统启动时会在屏幕显示与硬件有关的信息, 这些信息会保存在这个文件里面.
/var/log/secure: 验证, 授权和安全日志, 常见的用户登录验证相关日志就存放在这里.
/var/log/spooler:UUCP 和 news 设备相关的日志信息
/var/log/cron: 与定时任务相关的日志信息
/var/log/maillog: 记录每一个发送至系统或者从系统发出的邮件活动
/var/log/boot: 系统引导日志
2,logrotate 分割日志工具
目前大部分 Linux 系统都会默认安装有 logrotate, 日志分割工具. 而这个工具的功能就是大家在 /var/log/ 目录下面看到的形如 messages-20181028 样式的日志, 在使用 logrotate 进行配置后就可以按照时间或者大小对日志进行分割存储. 如果对 /etc/logrotate.conf 文件和 /etc/logrotate.d / 目录没有改动, 可以看到 /etc/logrotate.conf 默认配置:
- /etc/logrotate.conf
- # 按周轮训
- weekly
- # 保留 4 周日志备份
- rotate 4# 标记分割日志并创建当前日志
- create
- # 使用时间作为后缀
- dateext
- # 对 logrotate.d 目录下面的日志种类使用
- include /etc/logrotate.d
- # 对于 wtmp 和 btmp 日志处理在这里进行设置
- /var/log/wtmp {
- monthly
- create 0664 root utmp
- minsize 1M
- rotate 1
- }
- /var/log/btmp {
- missingok
- monthly
- create 0600 root utmp
- rotate 1
}
那么在 /etc/logrotate.d/ 目录下面. 我们来看比较典型的两类日志, 按时间和大小处理.
- /etc/logrotate.d/syslog
- /var/log/cron
- /var/log/maillog
- /var/log/messages
- /var/log/secure
- /var/log/spooler
- {
- missingok # 忽略文件相关错误
- sharedscripts # 所有指令完成之后, 执行 script 中内容
- postrotate
- /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true # 对每次的轮循处理后, rsyslog 重新读取配置运行
- endscript
}
/etc/logrotate.d/syslog 对日志的处理, 是继承了 /etc/logrotate.conf 里面的配置, 因此就会对日志 cron,maillog,messages,secure,spooler 进行按周分割, 并保留 4 周内的分割日志, 久远的日志将进行删除.
- /etc/logrotate.d/yum
- /var/log/yum.log {
- missingok
- notifempty # 日志为空不轮循
- size 30k
- yearly
- create 0600 root root
}
而在 /etc/logrotate.d/yum 里面可以看到指定了 size 和 yearly, 因此对于 yum 类日志将会按日志大小进行年分割. 如果日志达到设定的大小, 那么将会在现有的日志上面进行分割. 而一年内如果为达到设定大小, 则按年进行分割.
此外, 如果你在服务器上面安装了 MySQL,httpd 或者其他应用服务后, logrotate 它会自动在 /etc/logrotate.d/ 下面创建对应的日志处理方式, 基本是继承 logrotate.conf.
- /etc/logrotate.d/httpd
- /var/log/httpd/*log {
- missingok
- notifempty
- sharedscripts
- delaycompress
- postrotate
- /bin/systemctl reload httpd.service> /dev/null 2>/dev/null || true
- endscript
}
因此, 不论是你服务器上面系统日志还是应用日志, 面对日志量太大的问题, 都可以使用 logrotate 进行设置处理.
3,rsyslog 日志收集
rsyslog 是一个可以进行日志转发和收集的工具, 利用它可以拥有一台日志收集服务器, 从而可以减少客户端日志的压力, 对于相关日志的统一也是非常有用的, 同时还有相应的前端展示工具来进行日志的查看统计.
rsyslog 不仅可以进行系统日志的收集, 同时也支持应用日志的收集, 只不过如果收集应用自定义日志的话, 需要在客户端机器上面进行设置. 因我们业务种类较多, 不可能在初始化装机时在业务服务器上面配置相同的应用日志服务. 因此, 业务可以根据自己的需求, 进行相关配置. 下面让我们看一下当前我们使用的 rsyslog 服务情况.
ps aux | grep rsyslog 查看服务是否正常运行
root 14468 0.0 3.6 664592 69584 ? Ssl Nov06 0:31 /usr/sbin/rsyslogd -n
rsyslog 的配置文件为 /etc/rsyslog.conf, 当我们想把一台服务器变成 rsyslog 日志收集服务器的时候, 对这个配置文件进行修改即可.
在服务端配置有以下两个地方需要进行修改和配置:
/etc/rsyslog.conf
开启 udp 日志传输模式
- $ModLoad imudp
- $UDPServerRun 514
设置日志收集路径, 包括客户端机器名与日志类型
- $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
- $template RemoteLogs,"/home/syslogs/%HOSTNAME%/%PROGRAMNAME%.log"
- *.* ?RemoteLogs
& ~
而在业务机器上面, 只需要在配置的末尾, 开启日志转发即可:
- /etc/rsyslog.conf
- #*.* @10.21.109.2
- #authpriv.* @@10.101.10.199
*.* @syslog.sys.srv
@ 表示使用 UDP 进行转发, 正好对应服务端开启了 UDP 收集方式.
在经过上面的配置之后, 重启 systemctl restart rsyslog.service , 这样一个日志收集服务就成功建立了. 我们可以看一下在 rsyslog 服务器上面收集到的日志是什么样子:
日志收集
- [root@amazing00 amazing01]# pwd
- /home/syslogs/amazing01 # 可以看到这是在配置里面设置好的路径, 转发过来的日志信息会以客户端的主机名进行识别和收集
- [root@amazing00 amazing01]# ll
- total 5484
- -rw------- 1 root root 8651 Nov 15 03:24 anacron.log
- -rw------- 1 root root 284 Nov 13 15:56 auditd.log
- -rw------- 1 root root 126201 Nov 15 15:20 CROND.log
- -rw------- 1 root root 245 Nov 7 17:56 groupadd.log
- -rw------- 1 root root 96 Nov 6 10:18 kernel.log
- -rw------- 1 root root 90 Nov 7 17:37 passwd.log
- -rw------- 1 root root 1980 Nov 7 17:57 polkitd.log
- -rw------- 1 root root 10633 Nov 8 10:14 root.log
- -rw------- 1 root root 434 Nov 12 03:16 rsyslogd.log
- -rw------- 1 root root 39812 Nov 15 15:01 run-parts(.log
- -rw------- 1 root root 4763118 Nov 15 05:42 sshd.log
- -rw------- 1 root root 606036 Nov 15 15:20 systemd.log
- -rw------- 1 root root 1343 Nov 8 13:53 systemd-logind.log
- -rw------- 1 root root 313 Nov 7 17:56 useradd.log
-rw------- 1 root root 874 Nov 7 17:57 yum.log
从这台 amazing01 机器上面转发过来的日志, 我们可以看到和正常服务器 / var/log 下面的日志文件名是不一样的. 这里按照每一条系统日志的种类进行了分类收集, 十分的清楚和方便查询.
最后, rsyslog 还有一个相应的前端日志展示工具 loganalyzer, 其利用的工具有 httpd,PHP 和 MySQL.
这个前端工具适用于中小型服务器集群, 对于我们当前的 rsyslog 服务收集的机器日志非常多, 考虑对 rsyslog 服务器的压力, 所以不建议采用这个前端展示工具.
4, 日志相关的展望
对于日志的分析和利用, 是运维工作需要经常接触的, 有时候可以考虑用日志做一些功能, 比如监控错误日志产生, 根据日志预测等等, 那么可能会对工作起到一定的帮助效果, 减少日常重复的运维工作.
来源: https://juejin.im/post/5c35b8a26fb9a049cb18efc2