我正在尝试调试 Nagios 服务失败的原因;据我所知,它突然开始失败,而我们并不知道有任何变化。我试图找到一种原则性的方法,从服务转到“运行这个命令,那个命令失败”,以便调试它。
该服务名为“NTP”;在我的/etc/nagios3/conf.d
,我有,
define service {
use service-passive-critical
hostgroup_name web-internal
service_description NTP
}
不check_command
。那么看看serivce-passive-critical
,
define service {
name service-passive-critical
use service-passive
notification_interval 1 ; always re-send alerts, PagerDuty will dedup
contact_groups contact-group-24x7
freshness_threshold 900 ; treat service as stale if no updates for 15 min
check_command return-critical ; alert CRITICAL if service is stale
}
答check_command
!但据我所知,它应该总是返回 CRITICAL,就像名称所暗示的那样。我的服务失败,显示 UNKNOWN,并显示消息“无法创建套接字连接”。日志,
[1439835980] PASSIVE SERVICE CHECK: my-thing.example.com;NTP;3;can't create socket connection
为了完整起见,service-passive
:
# passive services
define service {
use foo-service
name service-passive
active_checks_enabled 0
passive_checks_enabled 1
parallelize_check 1
obsess_over_service 0
check_freshness 1
freshness_threshold 900 ; treat service as stale if no updates for 15 min
check_command return-unknown ; alert UNKNOWN if service is stale
}
…
# for all our services we attach a graph link
define service {
name foo-service
use generic-service
action_url /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$
register 0
}
现在,我更常识性的猜测是,这最终会运行check_ntp
;这做输出我看到的“无法创建套接字连接”错误取决于我传递给它的参数(这就是为什么知道 Nagios 在这里做什么会这么好...);我仍然不知道为什么它突然开始失败。
另外,有没有办法判断这是在 Nagios 主机本身本地运行,还是通过 NRPE 远程运行?
答案1
这是一个被动的服务,对吧?如果你没有更改配置,那么你的 NAGIOS 从未运行过任何命令根本对于这项特定的服务 - 它正在通过(例如)NSCA记录从外部输入的数据。
事实上,我怀疑它仍然如此:外部系统正在输入主机名、服务、状态代码(3
)和错误消息(can't create socket connection
)。
使用返回 eg 的存根活动命令CRITICAL
对于此类服务很常见,因为它与新鲜度检查一起工作,CRITICAL
如果在一定时间内(此处为 900 秒)未从外部发送方收到任何数据,则会导致服务停止。这可以防止 PASSIVE 服务在发送方安静时默默失败,这是一种很好的做法。