1.目标
远程管理各服务日志,自动轮转。
2.日志集中管理服务rsyslog
rsyslog默认linux自动安装
# service rsyslog restart
3.将日志转交rsyslog管理
以ssh服务为例。
# 修改rsyslog配置文件
# vi /etc/rsystem.conf
# 检索全文,查看local关键词(local0到local7是我们需要注意的部分)
# 在local不重复的情况下输入下面这句
# local0.* /var/log/sshd.log
# 以local0不重复为例,*号意思是收录进日志的事件级别。
# service rsyslog restart
修改ssh的配置文件。
# vi /etc/ssh/sshd_config
# 修改配置项SyslogFacility
# SyslogFacility local0
# 选择前文使用的local区域
# 从local0到local7是rsyslog为用户预留的自定义日志区域。每一个local,对应一个log文件。
# 重启服务
# service sshd restart
随意启用一个ssh相关服务,比如登录。
我已经可以在/var/log/下看见sshd.log了。
rsyslog接管成功。
4.日志推向远程机器
在日志服务器上,打开配置文件。
# vi /etc/rsyslog.conf
# 打开四个注释点位
# # Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# # Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
# 增加一行
# local0.* /remotelog/sshd.log
# 重启服务
# service rsyslog restart
# 检查514端口
# netstat -nltp
回到生成sshd日志的服务器上。
# 配置/etc/rsyslog.conf
# 修改上面写的local区域,后面的路径写@@IP:端口号
# local0.* @@10.1.1.15:514
# @@是使用tcp协议连接远程,@是udp协议。514是rsyslog服务开放端口号。
# 重启服务
# service rsyslog restart
目前思路如下
1.主机部分ssh的日志放入local0区域
2.rsyslog配置将local0区域的路径指向远程IP 10.1.1.15,端口号514,协议tcp,
3.10.1.1.15对应的local0路径指向路径/remotelog/sshd.log
# tail -f /remotelog/sshd.log
# 如果没有报错,尝试登录ssh。
# 有数据写入,则成功。
5.logrotate工具
在日志服务器上安装logrotate工具。
# yum install logrotate
# vi /etc/logrotate.conf
# 新增一段
# /remotelog/sshd.log {
# 参数自助选择
# }
# 保存
# 直接执行
# logrotate -f /etc/logrotate.conf
# 若无报错则登录ssh测试
daily 指定转储周期为每天
monthly 指定转储周期为每月
weekly <-- 每周轮转一次(monthly)
rotate 4 <-- 同一个文件最多轮转4次,4次之后就删除该文件
create 0664 root utmp <-- 轮转之后创建新文件,权限是0664,属于root用户和utmp组
dateext <-- 用日期来做轮转之后的文件的后缀名
compress <-- 用gzip对轮转后的日志进行压缩
minsize 30K <-- 文件大于30K,而且周期到了,才会轮转
size 30k <-- 文件必须大于30K才会轮转,而且文件只要大于30K就会轮转
不管周期是否已到
missingok <-- 如果日志文件不存在,不报错
notifempty <-- 如果日志文件是空的,不轮转
delaycompress <-- 下一次轮转的时候才压缩
sharedscripts <-- 不管有多少文件待轮转,prerotate和postrotate 代码只执行一次
prerotate <-- 如果符合轮转的条件
则在轮转之前执行prerotate和endscript 之间的shell代码
postrotate <-- 轮转完后执行postrotate 和 endscript 之间的shell代码
6.可管理的服务
目前我已尝试过的可转交服务的程序有。
ssh
ftp
crond
如何设置日志给rsyslog需另外查询。