`
xitong
  • 浏览: 6176092 次
文章分类
社区版块
存档分类
最新评论

rsyslog配置动态日志文件

 
阅读更多
近期项目中碰到一个syslog定向日志的问题,使用的是rsyslog(而不是syslog和syslog-ng),需求是根据程序生成syslog日志的syslogtag来将日志定向到$syslogtag.log的文件中,并且使之可以泽时回滚,也就是说文件达到一定大小的时候自动回滚。我对syslog并不是很熟悉,足足看了一下午的手册,实例才有了一个初步印象,然后在第二天上午着手完成自己的工作,第二天下午终于搞定了,然而被领导给否了...不过没有关系,虽然被否了,我还是要将其记录下来,回头用于自己的东西,起码这足足一整天的努力不能付之东流...
我有一个程序VPN,然而会在系统中生成N个实例,N的个数不确定,每个实例我希望将其日志记录在cli_X.log(其中X为自然数)的文件中,然后定义一个规则使之可以在文件大小超过一定量时回滚,我将其rsyslog配置文件放入/etc/rsyslog.d/srv_vpn.conf中,内容为:
# 定义日志消息格式
$template VPNDispatch, "%timegenerated% %msg%\n"

# 定义动态的VPN客户端日志文件
# 下面一行有点诡异,定义了一组动态文件,其中F代表使用分隔符,而91则代表[
# 的Ascii码,也就是说使用[作为分隔符取第一个,就是说如果syslogtag是
# cli_123[2212]:的话,我只取cli_123
$template VPNCliLog, "/log/srv-%syslogtag:F,91:1%.log"

# 过滤VPN客户端的日志到VPN客户端日志文件
# 下面一行使用新的扩展模式过滤日志,注意“-?XXX”
if ($syslogtag startswith 'cli_') then -?VPNCliLog; VPNDispatch

# 检查VPN客户端日志是否需要回滚并择时回滚
# 对于每写一行日志,都要检查是否需要回滚,检查程序是/bin/check-logrotate.sh
# 注意“^XXX”。另外VPNCliLog是一个template,作为参数传给了检查脚本
if ($syslogtag startswith 'KOALRHVPNC') then ^/bin/check-logrotate.sh;VPNCliLog

而我的检查程序/bin/check-logrotate.sh的内容为:
#!/bin/bash

LOGROTATE_CONF=/cfg/srv_logrotate
LOGROTATE_BIN=/usr/sbin/logrotate

file=$1
max_size=$(cat $LOGROTATE_CONF |grep size|grep -o [0-9].*)
size=$(/bin/ls $file -l|awk -F ' ' '{print $5}');
unit=1024;

# 得到单位,M或者k
MK=$(echo $max_size|grep -o [^0-9])
ret=$?
max_size=$(echo $max_size|grep -o [0-9]*)

# 换算到byte
if [ $ret -eq 0 ] && [ $MK == 'G' ]; then
        let "max_size = $max_size * $unit * $unit * $unit";
elif [ $ret -eq 0 ] && [ $MK == 'M' ]; then
        let "max_size = $max_size * $unit * $unit";
elif [ $ret -eq 0 ] && [ $MK == 'k' ]; then
        let "max_size = $max_size * $unit";
fi

# 判断是否需要回滚
if [ $size -gt $max_size ]; then
        $LOGROTATE_BIN $LOGROTATE_CONF
fi

我的日志回滚配置文件为/cfg/srv_logrotate,其内容为:
size 4M
rotate 5
/log/*.log
{
        missingok
        nomail
        rotate 5
        compress
        delaycompress
        copytruncate
        create 644 root root
}

最后我有一个测试程序test.c,内容为:
#include <syslog.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
        openlog("cli_12", LOG_PID, LOG_DAEMON);
        syslog(LOG_DEBUG, "######## test 12 ########");
        closelog();
        openlog("cli_1223", LOG_PID, LOG_DAEMON);
        syslog(LOG_DEBUG, "######## test 1223 ########");
        closelog();
        openlog("cli_1", LOG_PID, LOG_DAEMON);
        syslog(LOG_DEBUG, "######## test 1 ########");
        closelog();
    //我在64位机器上测试之,突然在网上发现有人竟然用sizeof(int)来判断
    //操作系统的位数,顿时就火了,于是写了了下面的代码,和syslog无关!
        printf("P is %d\n", sizeof(char *));
        printf("I is %d\n", sizeof(int));
    return 0;
}


到此为止,over!其实我试过使用多线程绑定多CPU启动将近2000个进程频繁写日志的情况,并不像老大所猜测的那样会导致大量的性能损耗,用top和sar测试没有发现任何问题,毕竟rsyslogd是一个独立的进程,如果觉得实在太忙了,它自己会处理好的,而脚本,根本不算什么,即使你使用:
$outchanel XXX YYY ZZZ
就会好吗?它难道不是也是要每次都判断是否到达了文件的max_size么?所不同的只是少了一个fork的开销而已,对于现在的系统,这根本不算什么。Unix号召每个进程只做一件事,为何要将所有的工作都交给一个程序呢?为何调用脚本就不好呢?这实际上是一个观念问题。如果我不是使用调用脚本的方式,而是写了一个rsyslog plugin或者用了大家都在用的$outchanel-虽然很笨拙的方式,我估计不会是这样的结果。也罢,这并没什么,不是吗?Unix每次只做好一件事,我深深记忆,我希望将多个脚本粘合起来来完成一件复杂的工作,而不是为了维护方便而使用单一的方式,再者,为何说bash脚本对总的代码没有什么共享呢?python好,PHP好,perl也不赖,就bash不好,是自己不喜欢吧,大家都是脚本,一些语法对于不会者都是天书,绝对不能觉得自己熟悉哪方面就要求摒弃其它的。在做事时,需要有一个标准,这是肯定的,大家不能你用python,他用perl,PHP,我用bash,C,需要统一起来,这是真的,但是不能由此而否定其它。我们不能以理论上怎么怎么就下结论,而应该亲自去整一把
分享到:
评论

相关推荐

    【rsyslog系列】rsyslog远程接收日志服务器配置文件之TLS单向认证

    搭建rsyslog远程接收日志服务器时,要想要服务器生效,必须按照实际使用场景配置rsyslog的配置文件,该配置文件资源应用于rsyslog v8版本的TLS协议单向认证场景。由于rsyslog v8版本对于v5版本有一些格式上的更新,...

    【rsyslog系列】rsyslog远程接收日志服务器配置文件之TLS双向认证

    搭建rsyslog远程接收日志服务器时,要想要服务器生效,必须按照实际使用场景配置rsyslog的配置文件,该配置文件资源应用于rsyslog v8版本的TLS协议双向认证场景。由于rsyslog v8版本对于v5版本有一些格式上的更新,...

    【rsyslog系列】rsyslog远程接收日志服务器配置文件之UDP/TCP协议

    搭建rsyslog远程接收日志服务器时,要想要服务器生效,必须按照实际使用场景配置rsyslog的配置文件,该配置文件资源应用于rsyslog v8版本的UDP/TCP协议传输场景。由于rsyslog v8版本对于v5版本有一些格式上的更新,...

    Linux7.6 +rsyslog8.24+LogAnalyzer4.1.11 日志收集系统成功安装配置笔记

    Linux下安装配置rsyslog,前端展示系统为LogAnalyzer,搭建日志收集系统安装配置。windows日志通过evtsys外发到SYSLOG服务器配置。 LogAnalyzer工具提供了一个易于使用,功能强大的前端,用于搜索,查看和分析网络...

    docker-log-config:Rsyslog,Logrotate和Docker配置文件,配置为获取容器日志,使用Rsyslog处理,保留在磁盘中并使用Logrotate管理保持旋转

    码头工人日志配置 Rsyslog,Logrotate和Docker配置文件,配置为获取Containers日志,使用Rsyslog处理,保留在磁盘中并使用Logrotate管理保留/旋转。

    日志易V2.0入门手册

    日志易产品支持的数据接入方式主要包括以下三种...2. rsyslog agent:使用rsyslog5.8.0或更高版本,确保您拥有sudo权限,可通过配置rsyslog agent转发本地日志文件到日志易。 3. web方式:使用http post上传日志文件。

    RSYSLOG:自述文件

    在Ubuntu14.04.1中配置RSyslog服务器目录 将日志从 win 发送到 Ubuntu ====================== 一、简介系统日志服务器代表网络上的一个日志监控点,包括 Linux 或 Windows 服务器在内的所有类型的设备都可以向其...

    ansible-rsyslog:配置 rsyslog 客户端和服务器

    roles/common/defaults/main.yml syslog_server: log1 如果您想要不同的日志服务器,最好在 vars/*.yml 文件之一中进行配置。 这在这里设置为一个包罗万象的东西,以防在其他地方错过。 roles/common/vars/...

    Rsyslog Windows agent configuration client简单使用

    简单的使用说明(Word版),亲测有效。只是一个客户端的使用说明,服务端还需要自己的去下载配置,客户端也需要下载rsyslog的配套客户端。可以从Windows本地上传日志文件通过客户端上传到服务端。

    rsyslog交叉编译打包

    可修改顶层的makefile,根据传入的编译器,一键生成所需的执行文件、库、配置文件 亲测可用~~~~

    操作系统安全:linux系统日志介绍.ppt

    默认配置下,日志文件通常都保存在“/var/log”目录下。 系统日志介绍 常见的日志类型 常见的日志优先级 系统日志是由一个名为syslog的服务管理的,如以下日志文件都是由syslog日志服务驱动的: /var/log/boot.log:...

    操作系统安全:var log cron分析.docx

    /var/log/cron分析 ...默认配置下,日志文件通常都保存在“/var/log”目录下。 日志文件类型及优先级 /var/log/cron分析 /var/log/cron 该日志文件记录crontab守护进程crond所派生的子进程的动作,前

    Kiwi-Syslog日志服务器搭建.doc

    CentOS配置rsyslog客户端远程记录日志: 1. 安装Rsyslog守护进程: # rpm -qa " grep rsyslog # rsyslogd –v 若rsyslog守护进程没有出现在系统中,使用以下命令来安装: # yum install rsyslog 2. 配置Rsyslog守护...

    Linux配置日志服务器的图文教程

    本文主要介绍的是关于Linux配置日志服务器的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 日志服务器配置文件:/etc/rsyslog.conf 服务器端: 服务器IP如下: 编辑日志服务器的配置...

    logging:Ansible角色,用于配置日志记录

    linux系统角色/日志 ... 例如,您可能想从仅存储在本地文件中的日志输入,而输入则从存储在本地日志文件中的文件读取并转发到其他日志系统。 为了满足这些要求,日志记录角色引入了3个主要变量log

    keeplived+haproxy.zip

    2、日志rsyslog配置文件/etc/rsyslog.conf 3、xinetd服务脚本/etc/xinetd.d/mycatstatus 4、xinetd托管服务的启动脚本/usr/local/bin/mycatstatus 5、Keepalived配置文件/etc/keepalived/keepalived.conf 6、crontab...

    操作系统安全:var log syslog分析.docx

    /var/log/syslog分析 Linux日志简介 Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。...默认Centos,Fedora不生成该日志文件,但可以配置/

    操作系统安全:var run utmp.docx

    /var/run/utmp分析 ...默认配置下,日志文件通常都保存在“/var/log”目录下。 日志文件类型及优先级 /var/run/utmp分析 /var/run/utmp 该日志文件记录有关当前登录的每个用户的信息。因此这个文件会随着用户登录

    操作系统安全:var log xferlog.docx

    var/log/xferlog分析 Linux日志简介 ...默认配置下,日志文件通常都保存在“/var/log”目录下。 日志文件类型及优先级 /var/log/xferlog分析 /var/log/xferlog ?? 该日志文件记录FTP会话,可以显示出用户向FTP

    操作系统安全:var log maillog分析.docx

    /var/log/maillog分析 ...默认配置下,日志文件通常都保存在“/var/log”目录下。 日志文件类型及优先级 /var/log/maillog分析 /var/log/maillog 该日志文件记录了每一个发送到系统或从系统发出的电子邮

Global site tag (gtag.js) - Google Analytics