日志管理
分类:
rsyslog系统日志管理 :关心问题:哪类程序—》产生的什么日志----》放到什么地方
logrotate日志轮转:将大量的日志,分割管理,删除旧日志。
rsyslog系统日志管理
处理日志的进程
第一类
rsyslogd: 系统专职日志程序。(操作系统自带)
处理绝大部分日志记录,
系统操作有关的信息,如登录信息,程序启动关闭信息,错误信息
第二类
httpd/nginx/mysql: 各类应用程序,可以以自己的方式记录日志. 讲解对应程序时会逐步介绍
观察rsyslog程序
若日志不记录,可输入/usr/sbin/rsyslogd -n使其重新启动
[root@localhost ~]# ps aux | grep rsyslog
root 962 0.0 0.2 216420 4472 ? Ssl 19:42 0:00 /usr/sbin/rsyslogd -n
二、常见的日志文件(系统、进程、应用程序)
(由rsyslog产生并指定规则)
tail -10 /var/log/messages --> 系统主日志文件
tail -f /var/log/messages --> 动态查看日志文件的尾部
例:用systemctl restart firewalld可验证日志内部的变化
tailf /var/log/secure --> 认证、安全
tail /var/log/yum.log --> yum
tail /var/log/maillog --> 跟邮件postfix相关(systemctl restart postfix)
tail /var/log/cron --> crond、at进程产生的日志
tail /var/log/dmesg --> 和系统启动相关
实例:
终端一:
[root@localhost ~]# tailf /var/log/messages
终端二
[root@localhost ~]# systemctl restart httpd
则终端一内会有动态变化,
了解:
tail /var/log/audit/audit.log -> 系统审计日志
tail /var/log/mysqld.log -> MySQL
tail /var/log/xferlog -> 和访问FTP服务器相关
tail /var/log/wtmp -> 当前登录的用户(命令:w)
tail /var/log/btmp -> 最近登录的用户(命令last)
tail /var/log/lastlog -> 所有用户的登录情况(命令lastlog )
网络日志管理
安装
[root@localhost ~]#yum install -y httpd
[root@localhost ~]#systemctl start httpd
[root@localhost ~]#systemctl stop firewalld
调整网络
[root@localhost ~]#systemctl restart network
[root@localhost ~]#ip a
访问IP
打开浏览器,输入服务器的IP进行浏览
观察日志:
[root@localhost ~]#tailf /var/log/httpd/access_log
rsyslog配置
相关程序
默认已安装(若出问题,可重装systemctl restart rsyslog.service)
[root@localhost ~]# yum install rsyslog logrotate
启动程序
[root@localhost ~]# systemctl start rsyslog
相关文件
观察日志程序的配置文件
-q : 查询软件包的安装情况
-c:配置文件
[root@localhost ~]# rpm -qc rsyslog
/etc/logrotate.d/syslog -->rsyslogd的主配置文件(关键)
/etc/rsyslog.conf -->rsyslogd相关文件,定义级别(了解一下)
/etc/sysconfig/rsyslog -->和日志轮转(切割)相关
主配置文件
告诉rsyslogd进程什么日志,应该存到哪里。
RULES
RULES:即规则,是一套程序生成日志,以及存储日志的策略。
RULES即规则,有三部分组成(由设备+级别+存放位置(PATH))
由FACILITY+LEVEL+FILE组成。
[root@localhost ~]# vim /etc/rsyslog.conf
mail:设备 * :任何级别(所有事情都记录) (.是分隔符)
authpriv.* /var/log/secure(SSH信息)
mail.* -/var/log/maillog(发邮件)
这里有一个-符号, 表示是使用异步的方式记录(等一会再记录,有时间差), 因为日志一般会比较大 (同步,产生的信息立马存放)
cron.* /var/log/cron(创建任务)
*.info;mail.none;authpriv.none;cron.none /var/log/messages
系统日志排除了邮件,认证,计划日志。
facility设备
是系统对某种类型APP事件的定义。如AUTHPRIV是安全事件,CRON是计划任务事件。用来收集同类程序日志。
类型:
LOG_SYSLOG --> syslogd自身产生的日志
LOG_AUTHPRIV --> 安全认证
LOG_CRON --> 调度程序(cron and at)
LOG_MAIL --> 邮件系统mail subsystem
LOG_USER (default) --> 用户相关
LOG_DAEMON --> 后台进程
LOG_FTP --> 文件服务器ftp daemon
LOG_KERN --> 内核设备kernel messages
LOG_LPR --> 打印机设备 : printer subsystem
LOG_LOCAL0 through LOG_LOCAL7 --> 用户自定义设备
level级别(由高到低)
LOG_EMERG -->紧急,致命,服务无法继续运行,如配置文件丢失
LOG_ALERT -->报警,需要立即处理,如磁盘空使用95%
LOG_CRIT -->致命行为
LOG_ERR -->错误行为
LOG_WARNING -->警告信息
LOG_NOTICE -->普通,重要的标准信息
LOG_INFO --> 标准信息
LOG_DEBUG --> 调试信息,排错所需,一般不建议使用
从下到上,级别从低到高,记录的信息越来越少(级别越低记录的琐事越多)
所有设备的info放入,分号,mail不放入,分号,认证不放入…
规则示意图:
目的:通过绘图形式来理解日志工作机制。
黑色框:服务器
程序类型示例
关于程序和设备的联系问题,程序自身会决定将日志交给哪类设备。 如SSH程序会选择安全类设备。这一点由开发者定义。
修改ssh程序的设备类型
存储位置修改为LOCAL5
[root@localhost ~]# vim /etc/ssh/sshd_config
修改rsyslog程序的规则
[root@localhost ~]# vim /etc/rsyslog.conf
local5.* /var/log/server 找到对应位置写下 自定义server
重启rsyslog程序和ssh程序
[root@localhost ~]# systemctl restart rsyslog.service sshd
使用其他终端登录服务器,观察新日志文件。
[root@localhost ~]# tailf /var/log/messages
logrotate日志轮转
简介
日志 :记录了程序运行时各种信息。
通过日志可以分析用户行为,记录运行轨迹,查找程序问题。
日志轮转就像飞机里的黑匣子,记录的信息再重要也只能记录最后一段时间发生的事。
为了节省空间和整理方便,日志文件经常需要按!时间或!大小等维度分成多份,删除时间久远的日志文件。
工作原理:按照配置进行轮转
配置文件种类
主配置文件:/etc/logrotate.conf --> (决定每个日志文件如何轮转)
子配置文件夹:/etc/logrotate.d/* -->自定义配置,便于管理
观察主文件和子文件
[root@qianfeng ~]# ls /etc/logrotate.conf /etc/logrotate.d/
/etc/logrotate.conf
/etc/logrotate.d/:
acpid cups iscsiuiolog ppp rpm subscription-manager up2date wpa_supplicant
conman httpd mgetty psacct setroubleshoot syslog vsftpd.log yum
主配置文件介绍
[root@localhost ~]# vim /etc/logrotate.conf
=========全局设置==========
weekly //轮转的周期,一周轮转
rotate 4 //保留4份
create //轮转后创建新文件
dateext //使用日期作为后缀
#compress //是否压缩 压缩会占CPU资源,所以此处未开
include /etc/logrotate.d //包含该目录下的子配置文件
/var/log/wtmp { //对某日志文件设置轮转的方法
monthly //一月轮转一次(日志内容少)
minsize 1M //最小达到1M才轮转,monthly and minsize(同时达到两个条件)(maxsize 1M:达到1M就轮转 即使时间还未到 ) create 0664 root utmp //轮转后创建新文件,并设置权限
rotate 1 //保留一份(轮转到第二份的时候把第一份删除,只留一份)
} --->边界 {}的内容是针对此日志设置的
/var/log/btmp {
missingok //丢失不提示
monthly //每月轮转一次
create 0600 root utmp //轮转后创建新文件,并设置权限(只有主人可读写)
rotate 1 //保留一份
}
红框中的messages 带有日期是旧文件,20201124至1129的日志内容,不带日期是最新日志,轮转时,会将旧文件改名(加上时间)—>由此创建出新文件
yum日志轮转实例
轮转的目标文件/var/log/yum.log
配置轮转规则
[root@localhost log]# vim /etc/logrotate.d/yum
/var/log/yum.log {
missingok //丢失不执行
notifempty //空文件不论转
maxsize 30k //达到30k轮转, daily or size
yearly //或者一年一轮转
daily //缩小周期到1天
rotate 3 //轮转保留3次(旧文件保留三个)
create 0777 root root
}
测试:
错误示范:
手动轮转:
[root@localhost log]# /usr/sbin/logrotate /etc/logrotate.conf
[root@localhost log]# ll yum*
-rw-------. 1 root root 963 12月 3 20:26 yum.log -->文件只有一个,因为日期没有改变
[root@localhost log]# ll yum*
-rwxrwxrwx 1 root root 0 12月 4 00:01 yum.log
-rw-------. 1 root root 963 12月 3 20:26 yum.log-20201204
当天即使轮转很多次,也只会有一个当天的文件(因为日期没变–>有一个时间印章)
正确示范:
修改时间,手动触发轮转
date 月日时分(8位)
把时间向未来推移
[root@localhost logrotate.d]# hwclock
2020年12月03日 星期四 11时20分51秒 -0.380237 秒
[root@localhost log]# date 12040000
2020年 12月 04日 星期五 00:00:00 CST
[root@localhost log]# date
2020年 12月 04日 星期五 00:00:01 CST
[root@localhost log]# /usr/sbin/logrotate /etc/logrotate.conf
修改时间后,同步时间,使时间回归正常
[root@localhost logrotate.d]# ntpdate ntp.aliyun.com
日志文件已经出现多个
[root@localhost log]# ll yum*
-rwxrwxrwx 1 root root 0 12月 5 00:03 yum.log
-rw-------. 1 root root 963 12月 3 20:26 yum.log-20201204
-rwxrwxrwx 1 root root 0 12月 4 00:01 yum.log-20201205
关于时间
[root@localhost log]#grep 'yum' /var/lib/logrotate/logrotate.status //记录所有日志文件最近轮转的时间
[root@localhost log]#"/var/log/yum.log" 2019-3-31-10:0:23 //如果没有轮转过,第一次只有记录
测试httpd
进入子配置文件:
[root@localhost logrotate.d]# vim /etc/logrotate.d/httpd
将内容修改如下
/var/log/httpd/*log {
missingok
daily
# notifempty 空文件不轮转
#sharedscripts 共享脚本
#delaycompress
#postrotate 脚本开始
# /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true --->会自动重启httpd
#endscript 脚本结束
}
使用终端一打开,实时观察动态情况
[root@localhost ~]# watch -n1 'ls -l /var/log/httpd/*'
此时,在网站登录本机IP并刷新时,产生的数据均存在箭头所指处
此处是httpd进程索引号
原因:
系统关联的是httpd的inode,不轮转,就不更新文件,则inode不变,信息写入旧文件
重新启动httpd 会产生新的日志文件(新的索引号)则信息会写入最新的文件(但需要每天手动重启)
[root@localhost logrotate.d]# systemctl restart httpd
修改回去后
[root@localhost ~]# vim /etc/logrotate.d/httpd
[root@localhost ~]# systemctl restart httpd
即可恢复正常,最新的信息会写入最新的文件(文件会自动重启)