0

我有一个用 c 编写的插件,它将解析一个 .log 文件并确定页面命中数:

_xLogFileName = "./loging.log";
/* File operation starts here */
 _xFile = fopen ( _xLogFileName, "r" );
if ( _xFile != NULL )
{   
    //read a line upto the end of the file
    while ( fgets ( _xFileLine , sizeof  _xFileLine,  _xFile  ) != NULL ) 
    {
    // @_xTiemInStr --> cur date in YYYY-MM-DD format to identify todays log
        if(strstr(_xFileLine, _xTiemInStr) != NULL) {
            if(strstr(_xFileLine, _xLoginHitString) != NULL) {
                _xLoginPageCounter = _xLoginPageCounter + 1;
            }
        }
    }
    printf("Usage:Total Login Page Hit :%d\n",_xLoginPageCounter );
    fclose ( _xFile );
    return 0;
}
else
{
    printf("error\n");
    perror ( _xLogFileName ); 
    return 3;
}
return 0;

现在我将 a.out 文件放在 /usr/lib/nagios/plugin 文件夹中,并将“loging.log”文件放在同一个文件夹中 - 完成 chmod 777。我可以从命令行运行插件,但是当我将它与 nagios 集成时,它会给出未知状态并从其他部分打印“错误”——任何人都可以帮忙


第二部分

另外我添加了以下代码来确定nagios从哪里运行?

char cwd[1024]; 
_xLogFileName1 = "loging.log"; 
if (getcwd(cwd, sizeof(cwd)) != NULL)
   _xLogFileName = strcat( cwd,_xLogFileName1); 
   printf("FileName : %s\n", _xLogFileName);

它正在打印/loging.log 状态信息?

所以我必须实际放置文件的地方,我的 nagios 从 /etc/nagios3 运行,我也将 logging.log 文件放在那里,但它仍然无法正常工作。

更新:现在它正在工作,因为我通过 c 程序打印 pwd 并发现它正在从我的根 (/) dir 运行,所以我将 logging.log 文件放在那里,现在它工作正常。

4

1 回答 1

0

您应该传递文件的完整路径并将其存储在“_xLogFileName1”中,而不仅仅是文件名。强烈建议您不要将文件复制到根目录。

了解网络日志,您要查找的日期字符串很可能位于行首。所以我建议使用“strnstr”而不是“strstr”。这将大大提高您的搜索速度。

于 2013-03-22T21:47:46.413 回答