Nagios3: Operadores condicionais para verificações de serviço?

6

Estou tentando configurar o Nagios para monitorar minhas várias máquinas usando grupos de hosts para definir 'funções de máquinas', contra as quais eu executo serviços para verificar as máquinas por função. No entanto, eu gostaria de usar operadores condicionais que me permitiriam executar a verificação de serviço em relação a uma interseção de dois grupos de hosts, em vez de suas uniões ... ou seja, usando os operadores & amp ;, || ou (). / p>

Por exemplo, imagine que tenho os seguintes servidores:

  • www-eu : servidor Linux WWW (Apache), na UE
  • www-us : servidor Windows WWW (IIS), nos EUA (costa oeste)
  • ftp-eu : servidor FTP do Linux, na UE
  • ftp-us : servidor FTP do Windows, nos EUA

Eu gostaria de criar os seguintes grupos de hosts:

  • Servidores dos EUA : www-us, ftp-us
  • Servidores da UE : www-eu, ftp-eu
  • Servidores da WWW : www-us, www-eu
  • Servidores FTP : ftp-us, ftp-eu

Agora diga que estou interessado em verificar o tempo de resposta HTTP dos meus servidores da web. Então vamos dizer que este serviço Nagios específico está sendo executado nos EUA (Costa Oeste), e que eu tenho um comando chamado check_http_response_time . Este comando irá verificar a capacidade de resposta do servidor HTTP, que eu posso fornecer um argumento que define o tempo máximo de resposta antes de aumentar a crítica.

Meu comando pode se parecer com: check_http_response_time $HOSTNAME$ 50

Agora, tradicionalmente, posso executar minhas verificações especificando uma lista de host ou grupos de hosts.

define service{
    use             local-service
    hostgroup_name              WWW-Servers   # Servers = www-us, www-eu
    servicegroups           WWW Checks
    service_description     Check HTTP Response Time
    check_command           check_http_response_time!50
}

No entanto, com a definição de serviço acima, considerando que meu serviço Nagios está no oeste dos EUA, eu poderia razoavelmente esperar que meu servidor da UE retornasse como crítico. Realmente, quero limiares diferentes para cada região (50 para o oeste dos EUA, 200 para a UE).

Para conseguir isso, eu teria que permutar meu serviço para cada host e definir um limite personalizado para cada um ou alternativamente permutar meus grupos de serviço por função & região (ou seja, WWW-Servers-EU), e executar limiares específicos contra esses. Embora o último seja melhor, ambos são muito mais confusos do que eu gostaria ...

O que eu adoraria e o que esta postagem está pedindo é uma maneira de usar grupos de host para realizar uma interseção usando lógica condicional, em vez de uma simples união. Pode parecer:

define service{
    use             local-service
    hostgroup_name              WWW-Servers && US-Servers
    servicegroups           WWW Checks
    service_description     Check HTTP Response Time
    check_command           check_http_response_time!50
}

Em seguida, ele executaria a verificação somente nos servidores que estão nos grupos de host Servidores e dos Servidores WWW: no meu exemplo, apenas www-us. Os benefícios de tal recurso seriam significativos para os serviços do Nagios configurados para grande escala.

Este recurso está disponível? Se não for, estará disponível no futuro? Existe uma maneira alternativa de realizar isso, dada a versão mais recente do Nagios?

Quaisquer sugestões / sugestões são mais apreciadas!

  • Dave
por Dave 08.10.2012 / 20:19

3 respostas

6

It then would run the check only against servers that are in both WWW-Servers and US-Servers, in my example, just www-us.

Is this feature available? If it isn't, will it be available in the future?

Ethan Galstad disse que ele não não tem planos de adicionar apoio de intersecção.

Is there an alternative way to accomplish this given the most recent Nagios version?

Você pode excluir alguns hosts da definição precedendo o host ou o hostgroup com um% símbolo!. Então, tente algo assim:

define service{
    use                     local-service
    hostgroup_name          *,!EU-Servers,!FTP-Servers
    servicegroups           WWW Checks
    service_description     Check HTTP Response Time
    check_command           check_http_response_time!50
}
    
por 09.10.2012 / 06:24
1

Meu método depende do que estou tentando alcançar. Normalmente, acredito em mais grupos de host é uma coisa boa, mas também acredito em automatizar a Configuração do Nagios com scripts sempre que possível.

Para lidar com o seu caso de uso, no entanto, eu escreveria um manipulador que pega uma lista de membros do grupo de hosts usando a macro $ HOSTGROUPNAMES $ e analisando a cadeia de comando apropriadamente.

$ HOSTGROUPNAMES $ é descrito no Documentação do Nagios . Ele fornece uma lista separada por vírgulas dos grupos de hosts dos quais o host é membro. Analisar a linha de comando deve ser simples usando a maioria das linguagens de script.

A configuração do comando pode parecer

check_http_by_hostgroup -g $HOSTGROUPNAMES$ -H $HOSTNAME -I $HOSTADDRESS$ -U $ARG1$ -W $ARG2$ -C $ARG3$

e a configuração do serviço pode se parecer com:

define service{
    use            local-service
    hostgroup_name WWW-Servers ; hosts are also members of us, eu, or ap
    servicegroups  WWW Checks
    service_description  Check HTTP Response Time
    check_command  check_http_by_hostgroup|http://foo.bar/|us=30,eu=160|us=90,eu=240,ap=390
}

Em seguida, defina a associação do grupo de hosts nas configurações do host, e não na configuração do grupo de hosts.

    
por 08.10.2012 / 21:06
0

Você pode querer olhar para a capacidade de dependência de serviço / host no Nagios.

    
por 08.10.2012 / 20:56