Linux系统配置及服务管理_第14章 日志管理

简介

任务一:

rsyslog 系统日志管理

关心问题:哪类程序---》产生的什么日志----》放到什么地方

任务二:

logrotate日志轮转

将大量的日志,分割管理,删除旧日志。

任务一详解:

一、处理日志的进程

第一类:

rsyslogd: 系统专职日志程序。将绝大部分日志记录,

和系统操作有关,安全,认证sshd,su,计划任务at,cron...

第二类:

httpd/nginx/mysql: 各类应用程序,可以以自己的方式记录日志

观察 rsyslogd程序

[root@yangs ~]# ps aux |grep rsyslogd

root 717 0.0 0.0 219752 3880 ? Ssl 09:05 0:00 /usr/sbin/rsyslogd -n

二、常见的日志文件(系统、进程、应用程序)

# tail /var/log/messages //系统主日志文件

# tail -20 /var/log/messages

# tail -f /var/log/messages //动态查看日志文件的尾部

# tailf /var/log/secure //认证、安全

# tail /var/log/maillog //跟邮件postfix相关

# tail /var/log/cron //crond、at进程产生的日志

# tail /var/log/dmesg //和系统启动相关

# tail /var/log/audit/audit.log //系统审计日志

# tail /var/log/yum.log //yum

# 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 )

案例

请大家使用xshell,ssh命令登陆教师机。

案例: SSH登录失败的用户

[root@localhost ~]# grep 'Fail' /var/log/secure 

三、rsyslogd配置

1.相关程序

yum install rsyslog   logrotate

(默认已安装)

2.启动程序

systemctl  start    rsyslog.service

3.相关文件

# rpm -qc rsyslog //观察日志程序的配置文件

/etc/rsyslog.conf //rsyslogd的主配置文件(关键)

告诉rsyslogd进程 哪个设备,什么样的信息,以及存到哪里。

# vim /etc/rsyslog.conf

RULES

RULES:即规则,是一套生成日志,以及存储日志的策略。

      由设备+级别+存放位置组成。

      由FACILITY+LEVEL+FILE组成。

authpriv.* /var/log/secure(SSH信息)

mail.* -/var/log/maillog(发邮件)

cron.* /var/log/cron(创建任务)

authpriv.* * <*代表所有终端>

authpriv.* @192.168.10.230 <UDP>

authpriv.* @@192.168.10.230 <TCP>

这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大

*.info;mail.none;authpriv.none;cron.none                /var/log/messages   

系统日志排除了邮件,认证,计划日志。

@@表示通过tcp协议发送    @表示通过udp进行转发

omprog - 发送日志给程序处理

FACILITY&LEVEL

facility设备

# man 3 syslog

facility:是系统对某种类型事件的定义。如AUTHPRIV是安全事件,CRON是计划任务事件。

设备如下:


LOG_AUTH

LOG_AUTHPRIV 安全认证

LOG_CRON clock daemon (cron and at)

LOG_DAEMON 后台进程

LOG_FTP ftp daemon

LOG_KERN kernel messages

LOG_LOCAL0 through LOG_LOCAL7 用户自定义设备

LOG_LPR printer subsystem

LOG_MAIL 邮件系统mail subsystem

LOG_NEWS news subsystem

LOG_SYSLOG syslogd自身产生的日志 

LOG_USER (default)

关于程序和设备的联系问题,程序自身会决定将日志交给哪类设备。如SSH程序会选择安全类设备。这一点由开发者定义。

vim  /etc/ssh/sshd_config 

SyslogFacility AUTHPRIV

level级别

LOG_EMERG 紧急,致命,服务无法继续运行,如配置文件丢失

LOG_ALERT 报警,需要立即处理,如磁盘空使用95%

LOG_CRIT 致命行为

LOG_ERR 错误行为

LOG_WARNING 警告信息

LOG_NOTICE 普通,重要的标准信息

LOG_INFO 标准信息

LOG_DEBUG 调试信息,排错所需,一般不建议使用

从下到上,级别从低到高,记录的信息越来越少

图示

目的:通过绘图形式来理解日志工作机制。

图示

/etc/sysconfig/rsyslog //rsyslogd相关文件,定义级别(了解一下)

/etc/logrotate.d/syslog //和日志办轮转(切割)相关(任务二)

四、日志收集服务器

目的

日志可以存放在本地

日志可以存放在远程服务器

集中的日志管理,可以简化日志的分析工作。

实战案例

集中日志服务器。

步骤

服务器1(192.168.2.128)发送日志

# vim /etc/ssh/sshd_config

#SyslogFacility AUTHPRIV

SyslogFacility LOCAL5

此处修改SSH只是测试

vim /etc/rsyslog.conf 

local5.* @192.168.2.131

此处填写另一台设备的IP地址。

另一台设备是集中日志服务器。

# systemctl restart sshd

# systemctl restart rsyslog

#systemctl stop firewalld

服务器2(192.168.2.131)接受日志

# vim /etc/rsyslog.conf 

$ModLoad imudp

$UDPServerRun 514

local5.*       /var/log/server152.log

# systemctl restart rsyslog

#systemctl stop firewalld

尝试ssh登录服务器1.

并观察本地日志

ll /var/log/server152.log

任务二详解:

logrotate日志轮转

简介

日志 , 记录了程序运行时各种信息。

通过日志可以分析用户行为,记录运行轨迹,查找程序问题。


可惜磁盘的空间是有限的,就像飞机里的黑匣子,记录的信息再重要也只能记录最后一段时间发生的事。


为了节省空间和整理方便,日志文件经常需要按!时间或!大小等维度分成多份,删除时间久远的日志文件。这就是通常说的日志滚动(log rotation)。


logrotate本身不是系统守护进程,它是通过计划任务crond每天执行 

工作原理

1 被crond调动

[root@yangs ~]# cat /etc/cron.daily/logrotate 

#!/bin/sh 

/usr/sbin/logrotate /etc/logrotate.conf //日志轮转,按/etc/logrotate.conf 

2 按照配置进行轮转

配置文件种类

logrotate 配置文件:

主文件:/etc/logrotate.conf (决定每个日志文件如何轮转)

子文件夹:/etc/logrotate.d/*

观察主文件和子文件

[root@tianyun ~]# 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 //是否压缩

include /etc/logrotate.d //包含该目录下的子配置文件

/var/log/wtmp { //对某日志文件设置轮转的方法

monthly //一月轮转一次

minsize 1M //最小达到1M才轮转,monthly and  minsize

create 0664 root utmp //轮转后创建新文件,并设置权限

rotate 1 //保留一份

}

/var/log/btmp {

missingok //丢失不提示

monthly //每月轮转一次

create 0600 root utmp //轮转后创建新文件,并设置权限

rotate 1 //保留一份

}

例1:yum日志轮转

例1:轮转文件/var/log/yum.log

配置轮转规则

# vim /etc/logrotate.d/yum 

/var/log/yum.log {

missingok //丢失不执行

# notifempty //空文件不论转

# size 30k //达到30k轮转, daily or  size

# yearly //或者一年一轮转

daily //缩小周期到1天

rotate 3 //轮转保留3次

create 0777 root root

}

测试1

# /usr/sbin/logrotate /etc/logrotate.conf //手动轮转

# ls /var/log/yum*

/var/log/yum.log //文件只有一个。因为日期没变




修改时间,手动触发轮转


# /usr/sbin/logrotate  -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf

# date 04011000    //把时间向未来推移


# grep 'yum' /var/lib/logrotate/logrotate.status //记录所有日志文件最近轮转的时间

"/var/log/yum.log" 2017-3-31-10:0:23 //如果没有轮转过,第一次只有记录

例2:messages日志轮转(追加属性)

目的:

1.设置系统日志轮转

2.为系统日志文件增加属性。用于保护日志文件。

准备工作:

删除原有的 /etc/logrotate.d/syslog,关于messages的行。

避免不同的规则互相影响。

示例

[root@localhost ~]# cat /etc/logrotate.d/syslog 

/var/log/cron

/var/log/maillog

???????删除掉messages的行

/var/log/secure

/var/log/spooler

{

    missingok

    sharedscripts

    postrotate

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

    endscript

}


第一步:设置轮转

vim /etc/logrotate.d/messages

/var/log/messages {

#notifempty

daily

create 0600 root root

missingok

rotate 5

}

测试:

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status  /etc/logrotate.conf 

ll /var/log/message*

发现轮转成功。

第二步设置追加属性。

chattr +a /var/log/messages

测试:

修改时间,再次手动轮转,发现轮转失败。请思考,为什么。

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status  /etc/logrotate.conf 

第三步设置轮转脚本

vim /etc/logrotate.d/messages

/var/log/messages {

prerotate

chattr -a /var/log/messages

endscript


#notifempty

daily

create 0600 root root

missingok

rotate 5


postrotate

chattr +a /var/log/messages

endscript

}

修改时间,重启rsyslog程序。进行轮转测试

第四部总结

chattr的a属性只能以追加的方式打开,用vi打开是不行的。可以这样写入:ls >> file

避免日志被误删除

例3:理解轮转后需重启的概念

1.通过如下轮转配置示例,理解轮转后执行脚本的语法结构。

2.轮转配置示例

例3:/etc/logrotate.d/syslog

/var/log/cron

/var/log/maillog

/var/log/secure

/var/log/spooler

{

missingok

sharedscripts

postrotate

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

endscript

}


注释

重启 `rsyslog ,`如果重启失败,输入到垃圾桶  ||  永远为真

1) SIGHUP 重新加载配置

如果左侧命令执行失败了||那么就执行右侧命令。

&& || 示例说明

1.测试一个存在的IP,返回yes

[root@localhost ~]# ping -c 1 10.18.42.74 &> /dev/null  && echo yes || echo no

yes


2.测试一个不存在的IP,返回NO

[root@localhost ~]# ping -c 1 10.18.42.79 &> /dev/null  && echo yes || echo no

no


强制轮转的命令:logrotate -f /etc/logrotate.conf

说明

说明:

轮转后 原日志文件 被改名,新日志 文件是创建的。

应用程序根据inode找到日志文件进行书写,如果不重启,找寻的依旧是老的日志文件。