ossec-logcollector bug

现象: 一个文件监控一段时间(10分钟左右)后, 会忽略掉而不监控.
2014/01/10 18:50:11 ossec-logcollector(1950): INFO: Analyzing file: '/var/ossec/logs/alerts/alerts.log'.
2014/01/10 18:50:11 ossec-logcollector: INFO: Started (pid: 9668).
2014/01/10 19:07:31 ossec-logcollector(1904): INFO: File not available, ignoring it: '/var/ossec/logs/alerts/alerts.log'.

测试文件: /var/ossec/logs/alerts/alerts.log
相关进程: /var/ossec/ossec-agent/bin/ossec-logcollector
监控配置文件: /var/ossec/ossec-agent/etc/ossec.conf
查看进程日志: cat /var/ossec/ossec-agent/logs/ossec.log |grep logcoll

发现 logcollector.c 中这一段代码很奇怪:

logff[i].read(i, &r, 0);


/* Checking for error */
if(!ferror(logff[i].fp))
{
    /* Clearing EOF */
    clearerr(logff[i].fp);

    /* Parsing error */
    if(r != 0)
    {
        logff[i].ign++;
    }
}
其中的 r != 0 即代表 "Parsing error" 很可疑. 
Q1: 是否所有的 ossec 中配置的 localfile 都遇到这种情况?

如下, 只有在 /var/ossec/ossec-agent/etc/ossec.conf 中配置了 format 为 ossecalert 才会出现这种情况.
  <localfile>
    <log_format>ossecalert</log_format>
    <location>/var/ossec/logs/alerts/alerts.log</location>
  </localfile>

查看对应的 read_ossecalert.c , 并查看 read_syslog.c 对比
void *read_ossecalert(int pos, int *rc, int drop_it)
void *read_syslog(int pos, int *rc, int drop_it)
程序是以 read_xxx 函数返回后 rc 的值是否为 0 判断是否有 "Parsing error" .
在 read_osseralert() 中, 没有对 rc 进行操作.
在 read_syslog.c() 中, 有这样一句代码
*rc = 0;

因此,很有可能是因为 read_ossecalert() 没有对 rc 进行初始化, 直接用传进来的值判断是否 "Parsing error". 
而传进来的 rc 是不可预料的. 因为在"logff[i].read(i, &r, 0);"前面有
#ifndef WIN32
/* We check for the end of file. If is returns EOF,
* we don't attempt to read it.
*/
if((r = fgetc(logff[i].fp)) == EOF)
{
    clearerr(logff[i].fp);
    continue;
}


/* If it is not EOF, we need to return the read character */
ungetc(r, logff[i].fp);
#endif

需要在 read_ossecalert() 中添加 "*rc=0;" 这一行代码.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值