rsyslog系统日志管理
课程目标
- 了解日志的级别及作用
- 掌握rsyslog服务的本地日志和远程日志的管理
-
一、常见的系统日志
日志格式: 文本日志/二进制日志/数据库日志
默认的相关日志文件:
/var/log/boot.log 系统引导日志,记录开机启动信息
/var/log/dmesg 核心的启动日志
/var/log/messages 系统的日志文件
/var/log/maillog 邮件服务的日志
/var/log/xferlog ftp服务的日志
/var/log/secure 网络连接及系统登录的安全信息
/var/log/cron 定时任务的日志
/var/log/wtmp 记录所有的登入和登出 last -f 查看
/var/log/btmp 记录失败的登入尝试
二、日志管理程序
rsyslog可以将日志写入数据库,并可以利用模块和插件控制输入输出
rsyslog程序管理本地和远程日志
man syslog
- 日志信息分为以下级别,从上到下级别依次降低
none none 不算是一个级别,他表示不记录服务的所有信息
0 emerg 系统不可用
1 alert 特别留意的报警信息
2 crit 非常严重的状况
3 err 错误信息
4 warning 警告信息
5 notice 稍微需要注意的信息
6 info 正常信息
7 debug 调试信息,开发人员使用
四、日志配置
1. 日志定义相关符号
```powershell . 用来分隔服务和级别的
- 如何服务,或者任何级别 = 有=表示等于某一级别,否则表示大于或者等于某一级别 ! 排除操作,前面有相同服务的表达式,这个操作才有意义。表示从前面表达式所包含的内容中排除某些内容 意思就是,和前面那个取交集 ; 用于分隔不同的服务.级别组合 , 用于分隔不同的服务
-
2. 了解配置文件
man rsyslog.conf
文档上表示,可以使用指定的载体,来承载你指定某个服务的日志
五、本地日志管理
需求1:将本地邮件服务的日志记录到 /var/log/test_mail.log 里
思路:软件安装
- 修改配置文件
- 启动服务测试验证
环境:
log-server:10.1.1.2 mail服务程序
步骤:
- 备份并修改配置文件
echo "mail.info /var/log/test_mail.log" >> /etc/rsyslog.conf
- /var/log/test_mail.log 这个文件会自动创建
- 启动服务
service rsyslog restart
- root用户,
echo hahahaha | mail -s "test mail log" stu1
发送邮件给stu1tail -f /var/log/test_mail.log
就能看到日志cat /var/spool/mail/stu1
查看这个用户收到的邮件- 发个log消息测试,logger用于往系统中写入日志,他提供一个shell命令接口到syslog系统模块
logger -t "Loggertest" -p mail.info "Testing log info"
需求2: 把ssh的日志单独 指定记录到/var/log/ssh 里
思路:
- 更改ssh服务的默认目录记录载体(在ssh服务端完成,修改ssh服务的配置文件)
- 通过rsyslog程序管理来自指定设备载体的日志,记录到指定的文件(修改/etc/rsyslog.conf)
- 测试验证
步骤:
- 修改ssh服务的默认的日志载体
echo "SyslogFacility LOCAL6" >> /etc/ssh/sshd_config
service sshd restart
- 将来自LOCAL6 设备载体的日志记录到指定位置(rsyslog), 空闲的设备载体(在man文档里看)
echo "local6.* /var/log/ssh" >> /etc/rsyslog.conf
service rsyslog restart
- 在log-server端测试发现,
tail -f /var/log/messages
在系统日志也会记录有ssh的日志,这是因为 rsyslog 配置文件中,指定了 “ /var/log/messages“ 说明所有程序的日志都会传到messages 中去- 在 /var/log/messgaes 那一行添加
local6.none
, 就实现messages 日志中不记录ssh的日志
- 在 /var/log/messgaes 那一行添加
六、远程日志管理
目的:把多台服务器的日志远程记录到其中一台日志服务器集中化管理,方便对其统一分析和管理
环境:
log-server:10.1.1.2
应用服务器:10.1.1.3
ssh服务 —> 其他人远程访问该应用服务器 —> 产生ssh服务日志 —> 远程记录到log-server上
client:10.1.1.4
ssh 10.1.1.3产生的日志 —> 记录到10.1.1.2
需求:把web上的ssh的服务日志,远程记录到log-server上
思路:
- 在web应用服务器上操作:
- 将web服务器上的ssh服务的日志 单独记录
- 指定ssh服务的设备载体
- 重启sshd
- 指定ssh服务的设备载体
- 将来自于ssh服务的日志设备载体上的日志远程发送到log-server
- 在log-server上操作:
- 修改配置文件,打开日志传输的接收端口
- 加载模块 tcp|udp
- 打开接收端口 默认514端口
- 加载模块 tcp|udp
- 启动服务后,日志默认会保存到/var/log/messages
步骤:
- 在log-server(10.1.1.2)完成:
- 加载相应的模块打开端口
```powershell vim /etc/rsyslog/confProvides UDP syslog reception //加载UDP协议的模块,端口514
$ModLoad imudp $UDPServerRun 514
Provides TCP syslog reception //加载TCP协议的模块,端口514
$ModLoad imtcp $InputTCPServerRun 514
2. `service rsyslog restart`<br />
2. `netstat -nltup | grep 514` 查看端口是否打开<br />
- 在应用服务器完成:<br />
4. 指定ssh服务器的日志文件的设备载体
1. `echo "SyslogFacility LOCAL0" >> /etc/ssh/sshd_config` <br />
1. `service sshd restart` <br />
5. 修改rsyslog,指定ssh服务的日志发送到远端去
1. `echo "local0.* @10.1.1.2:514" >> /etc/rsyslog.conf`
1. @ 代表UDP协议,@@ 代表TCP协议传输<br />
2. `service rsyslog restart` <br />
- 测试验证<br />
---
远程日志单独保存
- `vim /etc/rsyslog.conf` <br />
```powershell
Stemplate DynFile "/var/log/system-%HOSTNAME%.log"
local0.* ?DynFile //来自local0的所有日志将调用DynFile这个模板
service rsyslog restart
-
七、日志轮转
日志轮询(轮转):日志轮转,切割,备份,归档
rpm -q logrotate
rpm -ql logrotate
- 了解配置文件,
cat /etc/logrotate.conf
- 需求1:ssh服务的日志单独保存到了/var/log/ssh 里,如何进行轮转?
- 要求:
- 每天进行轮转,保留5天的日志文件
- 日志文件大于5M,进行轮转
- 每天进行轮转,保留5天的日志文件
- 思路:
- 修改logrotate的主配置文件,增加/var/log/ssh 文件的轮转
- 或是在 /etc/logrotate.d/ 目录创建一个文件
- 修改logrotate的主配置文件,增加/var/log/ssh 文件的轮转
步骤:方法1:vim /etc/logrotate.conf
/var/log/ssh {
missingok
daily
rotate 5
size 5M
create
}
- 删除一下日志文件,
find /var/log/ -type f -delete
- 强制轮转一下,看结果
service rsyslog restart
logrotate -f /etc/logrotate.conf
- 先写日志再刷新PID,刷新之前写的日志是写在老的日志文件里。
- 方法2:创建子配置文件
vim /etc/logrotate.d/ssh
文件内容,和上面一样- 不希望以时间作为后缀,花括号内加
nodateext
- 不希望以时间作为后缀,花括号内加