如何使用 Icinga 版本 2 監控遠端“https”?
我在 VirtualBox 內的 ubuntu 14.04.3 上有 icinga 2.3.11。我試圖在此處監視“https”埠 443,例如“ https://mail.google.com ”。以下是我的預設 host.conf 文件片段
object Host "mailserver-01" { import "generic-host" address = "74.125.136.17" /* ip for mail.google.com */ vars.os = "Linux" vars.http_vhosts["http"] = { http_uri = "/" } vars.http_ssl = "1" vars.http_warn_time = "5" vars.http_critical_time = "10" vars.notification["mail"] = { groups = [ "icingaadmins" ] } }
下面是來自預設 services.conf 文件的片段
apply Service "httpS" { import "generic-service" check_command = "http" assign where host.name == "mailserver-01" }
雖然 icingaweb2 儀表板顯示 OK/green,但我不確定它是否正確
您的主機將自定義屬性“http_vhosts”定義為字典,但從未使用過(沒有適用於定義迭代該字典和生成服務對象的規則)。
相反,服務應用規則(沒有 for 循環)只應用服務“httpS”。無意中設置了主機自定義屬性“http_ssl” - 它應該將true讀取為布爾值而不是數字作為字元串(這始終是正確的)。
您可能想要檢查多個 URI,而不僅僅是 /。
我的建議(2 個解決方案):
- 修復您的服務應用規則並從您的主機對象定義中刪除 http_* 自定義屬性。而是將它們添加到服務應用規則中:
apply Service "httpS" { import "generic-service" check_command = "http" vars.http_uri = "/" vars.http_ssl = true assign where host.name == "mailserver-01" }
您可以在文件中找到用作http CheckCommand 命令參數的所有自定義屬性:http ://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/plugin-check-commands#plugin-check-命令-http
2)改用服務申請規則並遍歷主機上定義的 http_vhosts 字典。
vars.http_vhosts["https /"] = { http_ssl = true http_uri = "/" }
注意這裡的命名:“https /”將是生成的服務名稱。http_ssl 和 http_uri 與 http CheckCommand 所需的自定義屬性的名稱完全相同。
魔法發生在 apply for 規則中:字典鍵將是服務名稱。字典值是一個嵌套字典,包含 http_uri 和 http_ssl 作為鍵。在名為“config”的範例中。該配置字典具有與“vars”屬性完全相同的結構,這就是為什麼我們可以將其添加到服務申請定義中。
apply Service for (servicename => config in host.vars.http_vhosts) { import "generic-service" check_command = "http" vars += config }
使用icinga2 daemon -C驗證配置,然後查看生成的服務對像以查看生成了哪些自定義屬性(icinga2 對象列表)。
一件好事 - 定義了 http_vhosts 自定義屬性的所有主機都將生成這些服務對象,不需要 extea“分配位置”表達式(也許寧可添加忽略位置以用於異常)。使用正確的策略,您只需編寫一次應用規則,並且以後只添加具有匹配自定義屬性字典的新主機 :-)
http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/monitoring-basics#using-apply-for
雖然解決方案 2) 需要有關 icinga 2 配置語言及其關鍵字、值類型和魔術技巧的高級知識。然而,我們認為這些方法和最佳實踐有助於減少採用和更改文件的長期維護。
您還可以更進一步,根據主機名對不同的 threshokd 使用 if-else 條件。例如,或者使用函式來定義基於時間段的動態門檻值。