日志的分类
内核以及系统日志
内核及系统日志由系统服务 rsyslog 统一管理,主配置文件为/etc/rsyslog.conf,主程序/sbin/rsyslogd
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下。系统日志基于rsyslog服务,需要开启rsyslog
systemctl status rsyslog.server 查看rsyslog服务开启状态
用户日志
记录系统用户登录以及退出系统的相关信息
用户日志分析工具
users who w last lastb last 查询成功登陆系统的用户记录 lastb 查询登陆系统失败的用户记录
程序日志
应用程序的独立日志
程序日志分析工具
文本查看,grep过滤内容,webmin管理套件内查看
awk,sed等文本过滤工具
webalizer,awstats等专业日志分析工具(图形化)
日志管理策略
- 及时备份归档
- 延长保存期限
- 控制访问权限
- 日志可能包含敏感信息
- 集中管理日志
- 统一发送给日志服务器(小规模使用rsyslog,python,shell 20台服务器一台日志,大规模使用ELK 100台服务器3,5台日志)
- 杜绝丢失日志,恶意篡改和删除
常见日志文件
内核及公共消息日志
/var/log/messages:记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
计划任务日志
/var/log/cron:记录crond计划任务产生的事件信息。
系统引导日志
/var/log/dmesg:记录Linux系统在引导过程中的各种事件信息。
邮件系统日志
/var/log/maillog:记录进入或发出系统的电子邮件活动。
用户登录日志
/var/log/secure:记录用户认证相关的安全事
/var/log/lastlog:记录每个用户最近的成功登录事件。二进制格式
/var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。二进制格式
/var/run/btmp:记录失败的、错误的登录尝试及验证事件。二进制格式
公共日志/var/log/messages 文件的记录格式
时间标签:消息发出的日期和时间。
主机名:生成消息的计算机的名称。
子系统名称:发出消息的应用程序的名称。
消息:消息的具体内容。
日志根据rsyslog配置文件的设置记录相关信息。
rsyslog配置文件
vim /etc/rsyslog.conf #查看rsyslog.conf配置文件
规则配置格式:【设备.级别】;【设备.级别】;【设备.级别】...... 写入的日志文件
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info #表示info等级及以上的所有等级的信息都写到对应的日志文件里
mail.none #表示某事件的信息不写到日志文件里(这里比如是邮件)设备字段说明
auth 用户认证时产生的日志
authpriv ssh、ftp等登录信息的验证信息
daemon 一些守护进程产生的日志
ftp FTP产生的日志
lpr 打印相关活动
mark rsyslog服务内部的信息,时间标识
news 网络新闻传输协议(nntp)产生的消息。
syslog 系统日志
uucp Unix-to-Unix Copy 两个unix之间的相关通信
console 针对系统控制台的消息。
cron 系统执行定时任务产生的日志。
kern 系统内核日志
local0~local7 自定义程序使用
mail 邮件日志
user 用户进程Linux系统内核日志消息的优先级别
(数字等级越小,优先级越高,消息越重要)
0 EMERG(紧急):会导致主机系统不可用的情况。如系统崩溃
1 ALERT(警告):必须马上采取措施解决的问题。如数据库被破坏
2 CRIT(严重):比较严重的情况。如硬盘错误,可能会阻碍程序的部分功能
3 ERR(错误):运行出现错误。不是非常紧急,尽快修复的
4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。不是错误,如磁盘用了85%等
5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。无需处理
6 INFO(信息):一般信息。正常的系统信息
7 DEBUG(调试):程序或系统调试信息等。包含详细开发的信息,调试程序时使用
none:没有优先级,不记录任何日志消息。一般设置0-3级记录,或是0-5级记录,考虑到日志文件大小不会记录全部的等级
举例
mail.info /var/log/maillog :比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中
mail.=info /var/log/maillog :明确指定日志级别为info,保存至/var/log/maillog
mail.!info /var/log/maillog :除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog
*.info /var/log/maillog :所有facility的info级别,保存至/var/log/maillog
mail.* /var/log/maillog :mail的所有日志级别信息,都保存至/var/log/maillog
mail.notice;news.info /var/log/maillog :mail的notice以上记得日志级别和news的info以上的级别保存至/var/log/maillog
mail,news.crit -/var/log/maillog :mail和news的crit以上的日志级别保存/var/log/maillog中;“-”代表异步模式(异步模式两个可以不分先后同时处理。如果是同步模式则必须要按照顺序)补充 local7
第三方安装的程序若需要使用rsyslog服务进行记录,而不是使用自己的记录文件,
可将应用程序配置文件内的log目录位置修改为local*,表示使用local*设备承载,再去/etc/rsyslog.conf配置文件最后一行对应修改。
例如
---------- rsyslog 收集 apache 日志 ----------
vim /etc/httpd/conf/httpd.conf
#ErrorLog logs/error_log
方法一:ErrorLog syslog #修改配置表示对 error_log 启用 syslog LogLevel notice #notice 及以上的 log 全部记录,默认的 facility 是 local7
方法二:
应用程序配置文件
ErrorLog "|/usr/bin/logger -p local5.notice" #ErrorLog 使用管道符号调用/usr/bin/logger程序,写入系统日志, #承载设备为local5,notice级别以上的信息写入 #error_log 全部通过管道写入 syslog,并且 log 的 facility 配置为 local5 #LogLevel warn
#CustomLog logs/access_log combined CustomLog "|/usr/bin/logger -p local4.info" combined #access_log全部通过管道写入syslog,并且log的facility配置为local4 #logger -p 指定输入消息的优先级,优先级可以是数字或者指定为 "facility.level" 的格式
rsyslog配置文件
# Save local4 to a file local4.* /opt/apache_access_log # Save local5 to a file local5.* /opt/apache_error_log
配置日志服务器通过网络收集日志
rsyslog是一个C/S架构,可以通过套接字来进行监听记录工作,可以基于TCP和UDP工作,默认的监听端口是514,只需要在MODULES打开即可。
发送服务器:客户端 192.168.80.20
收集服务器:服务端 192.168.80.30关闭服务端和客户端防火墙、selinux
setenforce 0 systemctl stop firewalld systemctl disable firewalld
修改客户端配置文件,并启动服务
vim /etc/rsyslog.conf
#### MODULES #### #将下面四行前的注释取消掉 $ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514 #### RULES #### #添加下列内容 $template myFormat, "%timestamp% %hostname% %syslogseverity-text% %syslogtag% %msg%\n" $ActionFileDefaultTemplate myFormat *.info;mail.none;authpriv.none;cron.none @@192.168.80.30:514
#%timestamp% :时间戳
#%fromhost-ip% :接收的信息来自于哪个节点的 IP
#%hostname% :主机名
#%syslogseverity-text% :日志等级
#%syslogtag% :服务进程
#%msg% :日志内容
#接收方 IP 前面一个 @ 表示 TCP 传输,两个 @ 表示 UDP 传输systemctl restart rsyslog
修改服务端配置文件,并启动服务
vim /etc/rsyslog.conf
将下面四行前的注释取消掉
#### MODULES #### $ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514
添加以下内容
#### RULES #### $AllowedSender tcp, 192.168.80.0/24 #允许 192.168.80.0 网段内的主机以tcp协议来传输 $template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" #定义模板,接受日志文件路径,区分了不同主机的日志 :fromhost-ip, !isequal, "127.0.0.1" ?Remote #过滤掉 server 本机的日志
systemctl restart rsyslog
在服务端创建/data/log目录,以接受大量日志信息,配置文件中的路径应当与该路径一致
mkdir -p /data/log
验证 客户端的终端命令行输入或者重启一个服务
logger "hello world"
在服务端查看日志文件
tree /data/log/
journalctl 日志管理工具
日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息。
Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。
日志的配置文件是/etc/systemd/journald.conf查看所有日志(默认情况下,只保存本次启动的日志)
journalctl journalctl -r #-r表示倒序,从尾部看(推荐)
查看内核日志(不显示应用日志)
journalctl -k
查看系统本次启动的日志
journalctl -b [-0]
查看上一次启动的日志(需更改设置,如上次系统崩溃,需要查看日志时,就要看上一次的启动日志)
journalctl -b -1
显示尾部指定行数的日志
查看的是/var/log/messages的日志,但是格式上有所调整,如主机名格式不一样而已
-f 为实时跟踪查看 类似tail -f /var/log/messages
journalctl -n 20 [-f]
查看某个服务的日志
journalctl -u nginx.service [-f]
查看指定进程的日志
ps aux | grep httpd journalctl _PID=1
查看指定用户的日志
journalctl _UID=0 --since today
查看报错日志
journalctl -xe # -x 是目录(catalog)的意思,在报错的信息下会,附加解决问题的网址 #-e pager-end 从末尾开始看 例如修改/etc/sysconfig/network-scripts配置文件 添加错误的配置,例如监听端口设置为不存在的ip systemctl restart network重启 journalctl -xe即可看到错误信息