您的位置:首页 > 其它

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

当然,如果你是用的之前老版本的syslogd程序,则发送端不需要配置文件,直接syslogd -R 服务器地址即可,只不过syslogd好像是UDP协议的514端口,照样可以用rsyslogd接收。

客户端和服务端重启相关服务即可在服务器(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这个参数来设置以尽量缩小时间误差。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: