Votre hôte définit l'attribut personnalisé "http_vhosts" comme dictionnaire mais il n'est jamais utilisé (il n'y a pas d'application pour la règle définie itérant sur ce dictionnaire et générant des objets de service).
Au lieu de cela, la règle d'application du service (sans boucle for) applique simplement le service "httpS". Par accident, l'attribut personnalisé de l'hôte "http_ssl" est défini - il doit indiquer true comme booléen au lieu d'un nombre comme chaîne (c'est toujours vrai).
Vous voulez probablement vérifier plusieurs URI, pas seulement /.
Ma proposition (2 solutions) :
1) Corrigez votre règle d'application de service et supprimez les attributs personnalisés http_* de votre définition d'objet hôte. Ajoutez-les plutôt à la règle d'application du service :
apply Service "httpS" {
import "generic-service"
check_command = "http"
vars.http_uri = "/"
vars.http_ssl = true
assign where host.name == "mailserver-01"
}
Vous pouvez trouver tous les attributs personnalisés utilisés comme paramètres de commande pour le http CheckCommand dans la documentation :http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/plugin-check-commands#plugin-check-command-http
2) Utilisez plutôt un service d'application de règle et bouclez sur le dictionnaire http_vhosts défini sur l'hôte.
vars.http_vhosts["https /"] = {
http_ssl = true
http_uri = "/"
}
Notez le nom ici :"https /" sera le nom du service généré. http_ssl et http_uri sont exactement les mêmes noms que les attributs personnalisés requis par http CheckCommand.
La magie opère à l'intérieur de la règle de demande :la clé du dictionnaire sera le nom du service. La valeur du dictionnaire est un dictionnaire imbriqué et contient http_uri et http_ssl comme clés. Dans l'exemple qui s'appelle "config". Ce dictionnaire de configuration a exactement la même structure que l'attribut "vars", c'est pourquoi nous pouvons simplement l'ajouter dans le service d'application pour la définition.
apply Service for (servicename => config in host.vars.http_vhosts) {
import "generic-service"
check_command = "http"
vars += config
}
Vérifiez la configuration à l'aide du démon icinga2 -C puis examinez les objets de service générés pour voir quels attributs personnalisés sont générés (liste d'objets icinga2).
Une bonne chose - tous les hôtes qui ont l'attribut personnalisé http_vhosts défini généreront ces objets de service, il n'y a pas besoin d'une expression extea "assigner où" (peut-être plutôt ajouter ignorer où pour les exceptions). Avec la bonne stratégie, vous écrirez une seule application pour les règles et n'ajouterez de nouveaux hôtes avec le dictionnaire d'attributs personnalisés correspondant qu'à l'avenir :-)
http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/monitoring-basics#using-apply-for
Bien que la solution 2) nécessite des connaissances avancées sur le langage de configuration icinga 2 et ses mots-clés, types de valeurs et tours de magie. Pourtant, nous pensons que ces méthodes et meilleures pratiques aident à réduire la maintenance à long terme avec l'adoption et la modification de fichiers.
Vous pouvez également aller plus loin et utiliser des conditions if-else pour différents seuils en fonction du nom d'hôte. Ou utilisez des fonctions pour définir des seuils dynamiques basés sur des périodes de temps par exemple.
J'ai cherché sur Google et j'ai trouvé la commande http dans
/usr/share/icinga2/include/command-plugins.conf
Dans cet exemple, j'ai essayé de surveiller https://mail.google.comBelow est /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"
}
Voici à quoi cela ressemble sur le tableau de bord icingaweb2
Exemple2
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"
}