> 文章列表 > Linux日志分析

Linux日志分析

Linux日志分析

日志的分类

内核以及系统日志

        内核及系统日志由系统服务 rsyslog 统一管理,主配置文件为/etc/rsyslog.conf,主程序/sbin/rsyslogd
        Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下。

        系统日志基于rsyslog服务,需要开启rsyslog

systemctl status rsyslog.server
查看rsyslog服务开启状态

用户日志

        记录系统用户登录以及退出系统的相关信息

         用户日志分析工具          

users
who
w 
last
lastblast 查询成功登陆系统的用户记录
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即可看到错误信息