rsyslogd、syslog远程传输、日志存储、转存
2017-06-10 16:48
239 查看
一、产生本地日志
1、/etc/resolv.conf 配置文件local0~local7是用户自定义的日志
这里我们使用local1,添加以下
local1.* /www/admin/admin/log/web_log
配置完需要重启 rsyslogd程序
/etc/init.d/rsyslog restart
2、程序中用以下记入日志
openlog("audit_as_cgi", LOG_PID, LOG_LOCAL1);
syslog(LOG_DEBUG,"%s",write_buf);
closelog();
audit_as_cgi :是日志前缀
LOG_PID:每条日志都包含进程号
LOG_LOCAL1:是我们自定义的日志类型
LOG_DEBUG:日志等级
3、产生的本地日志,如下所示
二、远程发送日志
rsyslog提供三个远程日志传输方式:
UDP: 数据包传输可信度不高
TCP: 数据包传输可信度比较高
RELP: 数据包传输可信度最高,避免数据丢失,比较新的协议,目前应用较少
关于RELP的更进一步了解可以参考 Using
TLS with RELP RELP
Input Module RELP
Output Module (omrelp)
TCP配置和UDP类似,如下
Server端配置
/etc/rsyslog.conf
# Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 $AllowedSender TCP, 192.168.80.0/24 # 根据客户端的IP单独存放主机日志在不同目录 $template Remote,"/var/log/syslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" # 排除本地主机IP日志记录,只记录远程主机日志 :fromhost-ip, !isequal, "127.0.0.1" ?Remote & ~ |
Client端配置
/etc/rsyslog.conf ,这里我们把用户自定义的local1类型日志发送给2.108设备
local1.* @@192.168.2.108:514 |
客户端和服务端重启相关服务即可在服务器(192.168.2.108)端看的如下结果:
重启rsyslogd之后如果没有收到日志,查看防火墙是否开启了514端口,没有开启就在服务器端打开514端口
iptables -I INPUT -p tcp --dport 514 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 514 -j ACCEPT
三、日志自动转存-logrotate程序
logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。另外,旧日志也可以通过电子邮件发送,不过该选项超出了本教程的讨论范围。
1、在/etc/logrotate.d/ 路径下建立自己的日志配置文件,如下所示:
第一行:要管理的日志文件
daily: 按天转存
dateext: 按日志备份文件
rotate: 共备份5份,之后会依次替换掉最旧的文件
size=1M:当日志文件达到1M时,才备份
最后3句:必须重启rsyslogd程序,否则日志转存之后,不会写入最新的文件
另外,如果你的远程服务器没有建立好连接,也会影响本地日志的生产速度
四、logrotate触发过程
centos从6开始,daily
hourly monthly weekly等这些文件夹里面的任务已经不用crond处理,而是交给了anacron处理
1、/etc/cron.hourly/0anacron
会每小时定时运行,由 /etc/cron.d/0hourly 每小时调用一次
/etc/cron.hourly/0anacron
内容如下
if
test -r /var/spool/anacron/cron.daily; then
day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
exit 0;
fi
# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
/usr/bin/on_ac_power >/dev/null 2>&1
if test $? -eq 1; then
exit 0
fi
fi
/usr/sbin/anacron -s
它会检测系统当前时间和/var/spool/anacron/cron.daily(谁写入的还没搞清楚)文件里的日期是否一致,一致就退出,否则运行anacron
2、anacron
程序启动,它的配置文件为/etc/anacrontab ,内容如下:
#
/etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=54 (延时54分、默认延时最小为6分)
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22 这个设置就是你看到日志切割的时间范围,一般是凌晨3点+RANDOM_DELAY+5 大约是凌晨3:59切割文件
下面任务列表:第一列是轮询天数、第2列是延时时间(单位分钟)、第3、4列是任务描述和命令,在此调用daily、weekly、monthly任务
#period in days delay in minutes job-identifier command
15cron.dailynice
run-parts /etc/cron.daily
725cron.weeklynice
run-parts /etc/cron.weekly
@monthly 45cron.monthlynice run-parts /etc/cron.monthly
3、由上面的anacron
调用cron.daily任务后,logrotate程序得以执行
cat
/etc/cron.daily/logrotate ,内容如下:
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate.status
/etc/logrotate.conf (这里的路径要注意,有的是 /var/lib/logrotate/logrotate.status)
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
logrotate程序调用配置文件/etc/logrotate.conf
及/etc/logrotate.d/路径下的配置,生成按天、周、月为周期的文件。
遗留问题:
logrotate生成的备份日志,日期不太对,没有明确的分隔点。例如16号生成的日志,备份到了17号文件里,而17文件里包含部分18号的内容。
我感觉这类问题,应该通过START_HOURS_RANGE这个参数来设置以尽量缩小时间误差。
相关文章推荐
- syslog远程日志存储/514端口【转】
- syslog远程日志存储
- syslog远程日志存储/514端口
- syslog远程日志的配置
- Nginx日志配置远程Syslog采集
- CURL 远程网络服务器日志传输失败的错误代码列表
- 基于Centos 6.5+MariaDB+loganalyzer+syslog搭建远程系统日志收集和分析环境
- 如何使用 syslog-ng 从远程 Linux 机器上收集日志
- [原创]把syslog接收的远程日志从/var/log/messages中分开
- unix下的远程syslog日志服务
- 如何使用 syslog-ng 从远程 Linux 机器上收集日志
- 如何使用 syslog-ng 从远程 Linux 机器上收集日志 | Linux 中国
- 【Android应用开发】 Android 崩溃日志 本地存储 与 远程保存
- syslog本地和远程日志分离
- 通过syslog接收远程日志
- Android之崩溃日志本地存储与远程保存
- IBM AIX系统日志配置远程Syslog采集
- Tomcat日志配置远程Syslog采集
- 用syslog实现apache远程日志服务器
- syslog的远程日志功能试用