目录
日志的作用:
日志管理策略
日志存放位置
系统日志保存位置:
主要日志文件介绍:
由相应的应用程序独立进行管理
分析工具
常用命令
格式:
日志的分类:
rsyslog服务
系统记录设备类型 SyslogFacility
日志级别 Loglevel
配置文件 /etc/rsyslog.conf 的语法
消息发送位置(即这个日志级别记录后放在哪里)
日志轮转
/etc/logrotate.conf配置文件主要参数和功能
日志的作用:
用于记录系统、程序运行中发生的各种事件通过阅读日志,有助于诊断和解决系统故障
日志管理策略
及时作好备份和归档控制日志访问权限 --> 日志内可能会包含各类敏感信息,如账户、口令等集中管理日志
使用日志服务器便于日志的统一收集、整理和分析杜绝日志信息的意外丢失、恶意篡改或删除
日志存放位置
系统日志保存位置:
/var/log --> variable可变化的
主要日志文件介绍:
内核及公共消息日志:/var/log/messages 计划任务日志:/var/log/cron系统引导日志:/var/log/dmesg (系统在启动的过程中加载了哪些内核模块的信息,对一些硬件的识别加载的驱动等)yum的日志:yum.log;dnf.logftp的日志:xferlogboot.log:启动系统的过程之中出现的问题和正常的情况/var/log/secure:与用户验证相关的安全性事件,如ssh/var/log/lastlog:记录最近登录过系统的用户信息/var/log/wtmp:用户登录、注销及系统开、关机事件/var/run/utmp:当前登录的每个用户的详细信息
由相应的应用程序独立进行管理
Web服务:/var/log/httpd/
access.log、error.log代理服务:/var/log/squid/
access.log、cache.log、squid.out、store.lognginx服务:/var/log/nginx
分析工具
文本查看、grep过滤检索awk、sedELK 日志分析系统 --> 做日志服务器 备份Kafka
常用命令
用户登录分析命令:who、w、user、last、lastlog、ac主动记日志工具 logger:从命令行直接向系统日志文件写入一行信息
| [root@localhost rsyslog.d]# ping www.baidu.com -c 4|logger -it "this is a test" -p authpriv.info [root@localhost rsyslog.d]# tail -f /var/log/secure Jan 16 14:40:15 localhost sshd[71138]: pam_unix(sshd:session): session closed for user root Jan 16 17:33:30 localhost journal: this is a test[111746]: PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data. Jan 16 17:33:30 localhost journal: this is a test[111746]: 64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=128 time=31.3 ms Jan 16 17:33:31 localhost journal: this is a test[111746]: 64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=128 time=31.7 ms Jan 16 17:33:32 localhost journal: this is a test[111746]: 64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=3 ttl=128 time=30.0 ms Jan 16 17:33:33 localhost journal: this is a test[111746]: 64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=4 ttl=128 time=30.7 ms Jan 16 17:33:33 localhost journal: this is a test[111746]: Jan 16 17:33:33 localhost journal: this is a test[111746]: --- www.a.shifen.com ping statistics --- Jan 16 17:33:33 localhost journal: this is a test[111746]: 4 packets transmitted, 4 received, 0% packet loss, time 3008ms |
格式:
时间+地点+任务+事件
事件发生的日期事件发生此事件的主机名启动此事件的服务名称或指令与函式名称该讯息的实际数据内容
日志的分类:
内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似ssh会将日志外包给这个rsyslog[root@localhost rsyslog.d]# vim /etc/ssh/sshd_config用户日志
记录系统用户登录及退出系统的相关信息程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
rsyslog服务
Linux系统里默认的专门记录日志的服务专门记录系统所产生的各项讯息, 包括 /var/log/messages 内的几个重要的登录档。主要程序:/sbin/rsyslogd配置文件:/etc/rsyslog.conf
下面介绍一下
系统记录设备类型 SyslogFacility
| 服务类别 | 说明 |
| | 邮件日志 |
| cron | 计划任务日志 |
| authpriv | 用户认证时产生的日志,如login命令、su命令 |
| local0-local7 | 由自定义程序时使用 |
| news | 网络新闻传输协议(nntp)产生的消息 |
| user | 用户进程 |
| kern | 系统内核消息 |
| daemon | 某些守护进程 |
日志级别 Loglevel
| 0 | EMEGR(紧急) emergencies | 会导致主机系统不可用的情况 |
| 1 | alert(警告) | 必须马上采取措施解决的问题 |
| 2 | CRIT(严重) critical | 比较严重的情况 |
| 3 | ERR(错误) error | 运行出现错误 |
| 4 | WARNING(提醒) | 可能会影响系统功能的事件 |
| 5 | NOTICE(注意) | 不会影响系统但是值得注意 |
| 6 | INFO(信息) | 一般信息 |
| 7 | DEBUG(调试) | 程序或系统调试信息 |
| 8 | none | 没有优先级,不记录任何日志消息 |
配置文件 /etc/rsyslog.conf 的语法
配置文件内容格式一般为:
设备类型[.=!]日志级别 日志级别记录的文件名或装置或主机
. :记录大于等于后面的日志级别;如mail.info 代表只要是 mail 的信息,而且该信息等级严重于info(包括info),就会记录下来.= :代表等于,即只记录等于后面的级别日志.!=:代表不等于,即只记录不等于后面的级别日志
ps:
上图第一行大概意思是:由于 mail, authpriv, cron 等类别产生的讯息较多, 且已经写入底下的数个文件中,因此在 /var/log/messages 里面就不记录这些项目。除此之外的其他讯息都写入 /var/log/messages 中,所以我们说 /var/log/messages 文件十分重要在上图关于 mail 的记录中,在记录的文件 /var/log/maillog 前面还有个减号『 - 』是干嘛用的?由于邮件所产生的讯息比较多,因此我们希望邮件产生的讯息先储存在速度较快的内存中(buffer) ,等到数据量够大了才一次性的将所有数据都填入磁盘内,这样将有助于登录文件的存取性能。 只不过由于讯息是暂存在内存内,因此若不正常关机导致登录信息未回填到登录档中,可能会造成部分数据的遗失。
消息发送位置(即这个日志级别记录后放在哪里)
通常都是记录在文件,但也可以在装置等如下地方中。
本地文件:通常就是文件的绝对路径打印机:例如 /dev/lp0 这个打印机装置用户名称:显示给用户远程主机:如@202.100.100.1*:所有在线的人,类似于wall这个命令
日志轮转
作用:方便有效地管理日志,防止日志文件过大命令:logrotate --> 专门帮助其他程序轮转日志的工具
配合一个配置文件,再加上计划任务,每天执行一次来达到循环的效果日志的轮转对日志的维护有着很重要的意义,可以作为一种备份策略,又可以方便管理员查阅日志
日志轮转主配置文件:/etc/logrotate.conf子配置文件:/etc/logrotate.d/*/etc/logrotate.d//etc/logrotate.d/
/etc/logrotate.conf配置文件主要参数和功能
| 参数 | 功能 |
| compress | 通过gzip 压缩转储以后的日志 |
| nocompress | 不需要压缩时,用这个参数 |
| copytruncate | 用于还在打开中的日志文件,把当前日志备份并截断 |
| nocopytruncate | 备份日志文件但是不截断 |
| create mode owner group | 转储文件,使用指定的文件模式创建新的日志文件 |
| nocreate | 不建立新的日志文件 |
| delaycompress | 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩 |
| nodelaycompress | 覆盖 delaycompress 选项,转储同时压缩。 |
| errors address | 转储时的错误信息发送到指定的 Email 地址 |
| missingok | 如果日志丢失,不报错继续记录下一个日志 |
| ifempty | 即使是空文件也转储,这个是 logrotate 的缺省选项。 |
| notifempty | 如果是空文件的话,不转储 |
| mail address | 把转储的日志文件发送到指定的E-mail 地址 |
| nomail | 转储时不发送日志文件 |
| olddir directory | 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 |
| noolddir | 转储后的日志文件和当前日志文件放在同一个目录下 |
| prerotate/endscript | 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行 |
| postrotate/endscript | 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行 |
| daily | 指定转储周期为每天 |
| weekly | 指定转储周期为每周 |
| monthly | 指定转储周期为每月 |
| rotate count | 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留 5 个备份 |
| dateext | 使用当期日期作为命名格式 |
| dateformat .%s | 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数 |
| size(或minsize) log-size | 当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem). |
当日志文件 >= log-size 的时候就转储,如果设置了size, daily, weekly,monthly 等指令无效,所以size的优先级比较高
| [root@localhost rsyslog.d]# cd /etc/logrotate.d/ [root@localhost logrotate.d]# ls bootlog chrony firewalld syslog vsftpd wpa_supplicant yum [root@localhost logrotate.d]# cat chrony /var/log/chrony/*.log { --> 指定轮转的日志文件 missingok --> 当日志文件不存在时,继续进行,不报错误 nocreate --> 如果日志文件未创建,不轮转(not create) sharedscripts --> 配合 prerotate 和 postrotate 使用 postrotate /usr/bin/chronyc cyclelogs > /dev/null 2>&1 || true endscript }
|
下面给出nginx的日志轮转配置,自行理解一下
# 可以结合我上表所给的 参数和功能 理解此文件具体每行的含义
[root@kafka01 logrotate.d]# cat nginx
/var/log/nginx/*log {
create 0664 nginx root
daily
rotate 10
missingok
notifempty
compress
sharedscripts
postrotate --> 轮转后做什么 --> 重启nginx
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
找到计划任务配置文件,这里可以看出 logrotate 会通过计划任务每天执行
[root@kafka01 cron.d]# cd /etc/cron.daily/
[root@kafka01 cron.daily]# ls
logrotate
[root@kafka01 cron.daily]# cat logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "alert exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE



