如何使用Nagios监视日志文件

时间:2010-03-03 16:54:42

标签: logfiles nagios

我们正在使用Nagios监控我们的网络取得巨大成功。但是,我们有一个关键应用程序错误的系统日志,当我设置check_log时,它看起来不像监视设备一样。

问题是:

  • 仅显示最后一个条目
  • 似乎没有办法承认关键错误和 将显示器恢复到良好状态

nagios是错误的工具,还是我们没有设置服务监控权?

以下是我的参赛作品

# log file
define command{
        command_name    check_log
        command_line    $USER1$/check_log -F /var/log/applications/appcrit.log -O /tmp/appcrit.log -q ?
}


# Define the log monitering service
define service{
        name                            logfile-check           ;
        use                             generic-service         ;
        check_period                    24x7                    ;
        max_check_attempts              1                       ;
        normal_check_interval           5                       ;
        retry_check_interval            1                       ;
        contact_groups                  admins                  ;
        notification_options            w,u,c,r                 ;
        notification_period             24x7                    ;
        register                        0                       ;
        }

define service{
        use                             logfile-check
        host_name                       localhost
        service_description             CritLogFile
        check_command                   check_log
}

6 个答案:

答案 0 :(得分:28)

对于使用Nagios监视日志,通常日志检查程序将仅在每次调用时为新发现的错误消息返回警告(因此它必须保留某些状态才能知道在后续运行时忽略它们)。因此我通常设置:

max_check_attempts              1
is_volatile                     1

这会导致Nagios立即发出警报,但只发出一次,然后恢复正常。

我最喜欢的日志检查程序是logwarn,但我有偏见,因为我没有找到任何我喜欢的现有文件后自己编写。 logwarn包中包含Nagios插件。

答案 1 :(得分:4)

有一个Nagios插件可用于检查日志文件:它被称为check_logfiles,它用于扫描文件的行以获得正则表达式。

以下链接显示如何为Nagios和Opsview安装和配置check_logfileshttps://www.opsview.com/resources/nagios-alternative/blog/syslog-monitoring-nagios-opsview

答案 2 :(得分:3)

配置中没有任何内容因为配置错误而跳出来。

按照设计,check_log只会显示OK消息或触发警报的最后一个日志条目。如果您需要查看多个条目,则需要修改插件。

然而,我发现你没有得到恢复有点奇怪的事实。 check_log的工作方式(通过将当前日志与先前版本进行比较),您应该在下次服务检查时获得恢复。当然,除了自上次检查以来在日志中添加了其他匹配条目。

强制执行另一项服务检查(或多次)会导致其恢复吗?

另外,我并不打算这样做,但要确保它确实出现故障。 您的日志是否在两次检查之间获得了额外的匹配条目,导致它无法恢复?你的支票符合“?”这将匹配日志中的任何新内容。是否有其他东西(非错误)被添加到日志中并无意中导致匹配?

如果以上都不是问题,我建议将Nagios从等式中缩小。尝试手动运行check_log(从命令行,但作为与nagios相同的用户),并使用不同的旧日志。它应该是这样的 -

  1. 使用新的“oldlog”运行检查 - 获取初始化消息
  2. 运行检查 - 检查确定
  3. 更改为日志
  4. 运行检查 - 检查失败
  5. 运行检查 - 检查确定
  6. 如果这不起作用,那么您就会专注于日志,旧日志以及check_log如何进行检查。

    如果它有效,那么它更多地指向你的nagios配置问题。

答案 3 :(得分:3)

由于有很多方法可以实现目标,因此Consol还提供了一个很好的插件: https://labs.consol.de/lang/en/nagios/check_logfiles/

  • 支持正则表达式
  • 支持日志轮换

要使用它,您需要一个cfg文件,这是oracle数据库的一个示例

@searches = ({
  tag => 'oraalerts',
options => 'sticky=28800',
  logfile => '/u01/app/oracle/diag/rdbms/davmdkp/DAVMDKP1/trace/alert_DAVMDKP1.log',
  criticalpatterns => [
      'ORA\-0*204[^\d]',        # error in reading control file
      'ORA\-0*206[^\d]',        # error in writing control file
      'ORA\-0*210[^\d]',        # cannot open control file
      'ORA\-0*257[^\d]',        # archiver is stuck
      'ORA\-0*333[^\d]',        # redo log read error
      'ORA\-0*345[^\d]',        # redo log write error
      'ORA\-0*4[4-7][0-9][^\d]',# ORA-0440 - ORA-0485 background process failure
      'ORA\-0*48[0-5][^\d]',
      'ORA\-0*6[0-3][0-9][^\d]',# ORA-6000 - ORA-0639 internal errors
      'ORA\-0*1114[^\d]',        # datafile I/O write error
      'ORA\-0*1115[^\d]',        # datafile I/O read error
      'ORA\-0*1116[^\d]',        # cannot open datafile
      'ORA\-0*1118[^\d]',        # cannot add a data file
      'ORA\-0*1122[^\d]',       # database file 16 failed verification check
      'ORA\-0*1171[^\d]',       # datafile 16 going offline due to error advancing checkpoint
      'ORA\-0*1201[^\d]',       # file 16 header failed to write correctly
      'ORA\-0*1208[^\d]',       # data file is an old version - not accessing current version
      'ORA\-0*1578[^\d]',        # data block corruption
      'ORA\-0*1135[^\d]',        # file accessed for query is offline
      'ORA\-0*1547[^\d]',        # tablespace is full
      'ORA\-0*1555[^\d]',        # snapshot too old
      'ORA\-0*1562[^\d]',        # failed to extend rollback segment
      'ORA\-0*162[89][^\d]',     # ORA-1628 - ORA-1632 maximum extents exceeded
      'ORA\-0*163[0-2][^\d]',
      'ORA\-0*165[0-6][^\d]',    # ORA-1650 - ORA-1656 tablespace is full
      'ORA\-16014[^\d]',      # log cannot be archived, no available destinations
      'ORA\-16038[^\d]',      # log cannot be archived
      'ORA\-19502[^\d]',      # write error on datafile
      'ORA\-27063[^\d]',         # number of bytes read/written is incorrect
      'ORA\-0*4031[^\d]',        # out of shared memory.
      'No space left on device',
      'Archival Error',
  ],
  warningpatterns => [
      'ORA\-0*3113[^\d]',        # end of file on communication channel
      'ORA\-0*6501[^\d]',         # PL/SQL internal error
      'ORA\-0*1140[^\d]',         # follows WARNING: datafile #20 was not in online backup mode
      'Archival stopped, error occurred. Will continue retrying',
  ]
});

答案 4 :(得分:1)

我相信现在有一个真正的Nagios插件可以有效监控日志。

http://support.nagios.com/forum/viewtopic.php?f=6&t=8851&p=42088&hilit=unixautomation#p42088

该页面上Nagios插件的主页为Nagios Log Monitor

Your [ commands.cfg file ] will contain:

define command {
                            command_name         NagiosLogMonitor
                            command_line            $USER1$/NagiosLogMonitor $HOSTNAME$ $ARG1$ $ARG2$ $ARG3$ $ARG4$ '$ARG5$' '$ARG6$' $ARG7$ $ARG8$ $ARG9$ $ARG10$
}


OR


define command {
                            command_name         NagiosLogMonitor
                            command_line            $USER1$/NagiosLogMonitor $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$ $ARG4$ '$ARG5$' '$ARG6$' $ARG7$ $ARG8$ $ARG9$ $ARG10$
}




Your [ services.cfg file ] will look similar to:

define service {
                      check_command                         NagiosLogMonitor!logrobot!autofig!/var/log/proteus.log!15!500.html!500 Internal Server Error!1!2!-foundn
                      max_check_attempts                  1
                      service_description                     500_ERRORS_LOGCHECK
                      host_name                                  sky.blat-01.net,sky.blat-02.net,sky.blat-03.net
                      use                                              fifteen-minute-interval
 }

答案 5 :(得分:0)

Nagios现在有一个与Nagios Core,XI等紧密集成的解决方案。

Nagios Log Server可以对基础架构中任何系统上任何日志文件的任何查询发出警报。