我们正在使用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
}
答案 0 :(得分:28)
对于使用Nagios监视日志,通常日志检查程序将仅在每次调用时为新发现的错误消息返回警告(因此它必须保留某些状态才能知道在后续运行时忽略它们)。因此我通常设置:
max_check_attempts 1
is_volatile 1
这会导致Nagios立即发出警报,但只发出一次,然后恢复正常。
我最喜欢的日志检查程序是logwarn,但我有偏见,因为我没有找到任何我喜欢的现有文件后自己编写。 logwarn包中包含Nagios插件。
答案 1 :(得分:4)
有一个Nagios插件可用于检查日志文件:它被称为check_logfiles,它用于扫描文件的行以获得正则表达式。
以下链接显示如何为Nagios和Opsview安装和配置check_logfiles
:
https://www.opsview.com/resources/nagios-alternative/blog/syslog-monitoring-nagios-opsview
答案 2 :(得分:3)
配置中没有任何内容因为配置错误而跳出来。
按照设计,check_log只会显示OK消息或触发警报的最后一个日志条目。如果您需要查看多个条目,则需要修改插件。
然而,我发现你没有得到恢复有点奇怪的事实。 check_log的工作方式(通过将当前日志与先前版本进行比较),您应该在下次服务检查时获得恢复。当然,除了自上次检查以来在日志中添加了其他匹配条目。
强制执行另一项服务检查(或多次)会导致其恢复吗?
另外,我并不打算这样做,但要确保它确实出现故障。 您的日志是否在两次检查之间获得了额外的匹配条目,导致它无法恢复?你的支票符合“?”这将匹配日志中的任何新内容。是否有其他东西(非错误)被添加到日志中并无意中导致匹配?
如果以上都不是问题,我建议将Nagios从等式中缩小。尝试手动运行check_log(从命令行,但作为与nagios相同的用户),并使用不同的旧日志。它应该是这样的 -
如果这不起作用,那么您就会专注于日志,旧日志以及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可以对基础架构中任何系统上任何日志文件的任何查询发出警报。