Seu host define o atributo personalizado "http_vhosts" como dicionário, mas ele nunca é usado (não há nenhuma aplicação para a regra definida para iterar esse dicionário e para gerar objetos de serviço de compartilhamento).
Em vez disso, a regra de aplicação do serviço (sem um loop for) apenas aplica o serviço "httpS". Por acidente, o atributo personalizado do host "http_ssl" é definido - ele deve ler verdadeiro como booleano em vez de um número como string (sempre verdadeiro).
Você provavelmente deseja verificar vários URIs, não apenas /.
Minha proposta (2 soluções):
1) Corrija a regra de aplicação do serviço e remova os atributos customizados http_ * da definição do objeto host. Em vez disso, adicione-os à regra de aplicação do serviço:
apply Service "httpS" {
import "generic-service"
check_command = "http"
vars.http_uri = "/"
vars.http_ssl = true
assign where host.name == "mailserver-01"
}
Você pode encontrar todos os atributos personalizados usados como parâmetros de comando para o link CheckCommand na documentação: link
2) Use um serviço que se aplique à regra e faça um loop pelo dicionário http_vhosts definido no host.
vars.http_vhosts["https /"] = {
http_ssl = true
http_uri = "/"
}
Observe a nomeação aqui: "https /" será o nome do serviço gerado. http_ssl e http_uri são exatamente os mesmos nomes que os atributos customizados requeridos pelo http CheckCommand.
A mágica acontece dentro da regra de aplicar: A chave do dicionário será o nome do serviço. O valor do dicionário é um dicionário aninhado e contém http_uri e http_ssl como chaves. No exemplo, isso é chamado de "config". Esse dicionário de configuração tem exatamente a mesma estrutura que o atributo "vars", e é por isso que podemos apenas adicioná-lo dentro do serviço para a definição.
apply Service for (servicename => config in host.vars.http_vhosts) {
import "generic-service"
check_command = "http"
vars += config
}
Verifique a configuração usando icinga2 daemon -C e, em seguida, examine os objetos de serviço gerados para ver quais atributos customizados são gerados (lista de objetos icinga2).
Uma coisa boa - todos os hosts que possuem o atributo customizado http_vhosts definido irão gerar esses objetos de serviço, não há necessidade de uma expressão "assign where" extea (talvez prefira ignorar where para exceções). Com a estratégia certa, você escreverá para aplicar regras apenas uma vez e apenas adicionará novos hosts com o dicionário de atributos personalizados correspondentes no futuro: -)
Apesar da solução 2) requer conhecimento avançado sobre a linguagem de configuração icinga 2 e suas palavras-chave, tipos de valor e truques de mágica. No entanto, achamos que esses métodos e práticas recomendadas ajudam a reduzir a manutenção de longo prazo com a adoção e a alteração de arquivos.
Você também pode ir além e usar condições if-else para threshokds diferentes com base no nome do host. Ou use funções para definir limites dinâmicos com base em períodos de tempo, por exemplo.