Nagios

如何確定 Nagios 服務中執行的是什麼命令?

  • August 17, 2015

我正在嘗試調試 Nagios 服務失敗的原因;AFAIK,它突然開始失敗,沒有任何我們知道的改變。我試圖找到一種從服務到“命令執行,失敗的命令”的原則方法,以便對其進行調試。

該服務被命名為“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,就像名字所暗示的那樣。我的服務因未知而失敗,並且消息“無法創建套接字連接”。日誌,

[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 遠端執行?

這是被動服務,對吧?如果您沒有更改配置,那麼您的 NAGIOS 根本不會為這個特定服務執行任何命令**-**它正在記錄通過(例如)NSCA 從外部輸入的數據。

事實上,我懷疑它仍然是:外部系統正在輸入主機名、服務、狀態碼 ( 3) 和錯誤消息 ( can't create socket connection)。

對於此類服務,通常使用返回 eg 的 stub active 命令CRITICAL,因為它與新鮮度檢查一起工作,CRITICAL如果在一段時間內(此處為 900 秒)沒有從外部發送者接收到數據,則導致服務執行。這可以防止 PASSIVE 服務在發送者安靜時靜默失敗,這是一種很好的做法。

引用自:https://serverfault.com/questions/714790