Jak monitorować zdalne „https” za pomocą Icinga wersja 2?

9

Mam icinga 2.3.11 na Ubuntu 14.04.3 w VirtualBox. Próbuję monitorować port „https” 443, na przykład „ https://mail.google.com ” tutaj. Poniżej znajduje się mój fragment kodu z domyślnego pliku 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" ]
    }
}

Poniżej znajduje się fragment domyślnego pliku services.conf

apply Service "httpS" {
    import "generic-service"
    check_command = "http"
    assign where host.name == "mailserver-01"
}

Chociaż pulpit nawigacyjny icingaweb2 pokazuje OK / zielony, nie jestem pewien, czy jest to poprawny sposób

satch_boogie
źródło

Odpowiedzi:

10

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.

dnsmichi
źródło
2

Poszukałem google i znalazłem polecenie http w

/usr/share/icinga2/include/command-plugins.conf

W tym przykładzie próbowałem monitorować https://mail.google.com Poniżej znajduje się /etc/icinga2/conf.d/hosts.conf

object Host "www.google.com" {
address = "74.125.136.84"
check_command = "http"
vars.http_vhost = "mail.google.com"
vars.http_ssl = "1"
}

Oto jak to wygląda na desce rozdzielczej icingaweb2 wprowadź opis zdjęcia tutaj

Przykład 2

object Host "secure.example.com" {
    address = "14.28.83.22"
    check_command = "http"
    vars.http_vhosts["secure.example.com"] = {
    http_uri = "/merchant/login.aspx"    
    }
        vars.notification["mail"] = {
        groups = [ "icingaadmins" ]
        }
    vars.http_ssl="1"
}
satch_boogie
źródło