Host definiuje niestandardowy atrybut „http_vhosts” jako słownik, ale nigdy nie jest używany (nie ma zastosowania do iteracji zdefiniowanej przez regułę w tym słowniku i obiektach usługi geberating).
Zamiast tego reguła zastosowania usługi (bez pętli for) po prostu stosuje usługę „httpS”. Przez przypadek ustawiony jest niestandardowy atrybut hosta „http_ssl” - powinien on przyjmować wartość true jako logiczną zamiast liczby jako ciągu (to zawsze prawda).
Prawdopodobnie chcesz sprawdzić wiele identyfikatorów URI, nie tylko /.
Moja propozycja (2 rozwiązania):
1) Napraw regułę stosowania usługi i usuń niestandardowe atrybuty http_ * z definicji obiektu hosta. Zamiast tego dodaj je do reguły zastosowania usługi:
apply Service "httpS" {
import "generic-service"
check_command = "http"
vars.http_uri = "/"
vars.http_ssl = true
assign where host.name == "mailserver-01"
}
Wszystkie niestandardowe atrybuty używane jako parametry polecenia dla http CheckCommand znajdują się w dokumentacji: http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/plugin-check-commands#plugin-check- polecenie-http
2) Zamiast tego użyj usługi ubiegania się o regułę i przejdź przez słownik http_vhosts zdefiniowany na hoście.
vars.http_vhosts["https /"] = {
http_ssl = true
http_uri = "/"
}
Zwróć uwagę na nazwę tutaj: „https /” będzie wygenerowaną nazwą usługi. http_ssl i http_uri są dokładnie tymi samymi nazwami, co wymagane atrybuty niestandardowe przez http CheckCommand.
Magia dzieje się wewnątrz reguły dotyczącej reguły: Kluczem słownika będzie nazwa usługi. Wartość słownika jest zagnieżdżonym słownikiem i zawiera klucze http_uri i http_ssl. W przykładzie o nazwie „config”. Ten słownik konfiguracji ma dokładnie taką samą strukturę jak atrybut „vars”, dlatego możemy go po prostu dodać do usługi ubiegania się o definicję.
apply Service for (servicename => config in host.vars.http_vhosts) {
import "generic-service"
check_command = "http"
vars += config
}
Sprawdź konfigurację za pomocą demona icinga2 -C, a następnie sprawdź wygenerowane obiekty usługowe, aby zobaczyć, które atrybuty niestandardowe są generowane (lista obiektów icinga2).
Jedna dobra rzecz - wszystkie hosty, które mają zdefiniowany niestandardowy atrybut http_vhosts, wygenerują te obiekty usług, nie ma potrzeby wyrażenia extea „przypisuj gdzie” (może raczej dodać ignoruj gdzie wyjątki). Przy odpowiedniej strategii napiszesz tylko raz zasady, a w przyszłości dodasz tylko nowych hostów z dopasowanym słownikiem atrybutów niestandardowych :-)
http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/monitoring-basics#using-apply-for
Chociaż rozwiązanie 2) wymaga zaawansowanej wiedzy na temat języka konfiguracyjnego icinga 2 oraz jego słów kluczowych, typów wartości i magicznych sztuczek. Uważamy jednak, że takie metody i najlepsze praktyki pomagają ograniczyć długoterminową konserwację dzięki adaptacji i zmianie plików.
Możesz także pójść dalej i zastosować warunki if-else dla różnych threshokds w oparciu o nazwę hosta. Lub użyj funkcji, aby na przykład zdefiniować progi dynamiczne na podstawie przedziałów czasowych.