Definir serviços e contatos ortogonais para um host / hostgroup?

1

Estou tentando transformar nosso espaguete de Icinga em algo mais gerenciável e menos repetitivo. Até agora, recursos como modelos, herança de objetos, herança múltipla, grupos de hosts, grupos de serviço, etc têm atendido às minhas necessidades, mas estou preso a um aspecto.

TL; DR: Como eu digo ao Icinga que, se esse host é um membro de um determinado grupo de hosts, eu quero adicionar um novo grupo de contatos a todos os hosts membros e serviços , mesmo serviços definidos grupo de host diferente do qual o host também é membro?

Eu tenho dois conjuntos ortogonais de grupos de host - um para o tipo de host, que está associado a serviços e dependências de serviço associados ao tipo de host, por exemplo, "Servidores PostgreSQL". Outro conjunto de grupos identifica as áreas de responsabilidade dos nós e quem precisa se preocupar com cada nó.

Eu preciso aplicar especificações de contato aos serviços de acordo com os grupos de host que identificam áreas de responsabilidade - e querem fazê-lo sem ter que substituir cada serviço para cada (tipo de host, área de responsabilidade ) par de grupos de acolhimento.

Então, digamos que eu defina um grupo de host "postgresql_servers" e serviço associado "postgresql_connection":

define hostgroup {
        hostgroup_name          postgres_servers
        alias                   All PostgreSQL servers
}

define service {
        use                     some_service_template
        hostgroup_name          postgres_servers
        contact_groups          support_engineers_notifications
        service_description     POSTGRES_CONNECTION
        check_command           check_dummy!2!"Passive check failed"
}

e depois tenho um hostgroup "servers_for_bob" e um contato "bob", que ainda não estão associados:

define hostgroup {
        hostgroup_name          servers_for_bob,
        alias                   These are for Bob
}

define contact {
    contact_name                  bob
    alias                         bob: Bob B.
    use                           some_contact_template
}

define contactgroup {
    contactgroup_name             team_bob
    members                       bob
}

Agora, é fácil tornar um host um membro de ambos os grupos de host:

define host {
        use             some_host_template
        host_name       buildingthings.example.com
        hostgroups      servers_for_bob, postgres_servers
        alias           The first thing bob built
}

... e no processo, ele obterá todos os serviços definidos em relação a postgres_servers , como POSTGRES_CONNECTION . Mas as notificações de serviço só irão para support_engineers_notifications , conforme definido no serviço de base POSTGRES_CONNECTION .

Agora quero notificar team_bob quando o host tiver problemas ou qualquer um de seus serviços tiver um problema . Sem redeclarar todos esses serviços.

Para o próprio host, posso usar regras de mesclagem na herança de objetos em contact_groups , por exemplo,

define host {
        use             some_host_template
        host_name       buildingthings.example.com
        hostgroups      servers_for_bob, postgres_servers
        alias           The first thing bob built
        contact_groups  +team_bob
}

e para mais hosts, pode usar herança de vários modelos de host para reduzir a repetição.

No entanto, o AFAIK que não causará os serviços que foram implicitamente definidos, tornando o host membro de postgres_servers , enviará notificações para team_bob também.

Aqui está a topologia:

+--------------------------------------+       +-----------+                                    
|                                      |       | Contact:  |                                    
|    Hostgroup:                        |       | Team Bob  |                                    
|    postgresql_servers               <--????--+           |                                    
|                                      | ^^^^  |           |                                    
|                                      | how?  +-----------+                                    
|                                      |                                                        
|   +----------------------------------------+                                                  
|   |                                  |     |                                                  
|   |                                  |     |                                                  
|   |   +-------------------------+    |     |                                                  
|   |   |-------------------------|    |     |                                                  
|   |   ||                       ||    |     |                                                  
|   |   || Host buildingthings   ||    |     |                                                  
|   |   || hostgroups:           ||    |     |                                                  
|   |   ||   postgres_servers,   ||    |     |                                                  
|   |   ||   servers_for_bob     ||    |     |                                                 
|   |   ||                       ||    |     |                                                  
|   |   ||                       ||    |     |                                                  
|   |   ||                       ||    |     |                                                  
|   |   ||                       ||    |     |                                                  
|   |   ||                       ||    |     |                                                  
|   |   |-------------------------|    |     |                                                  
|   |   +-------------------------+    |     |                                                  
|   |                                  |     |                                                  
+--------------------------------------+     |      +----------------------+                    
    |                                        |      |                      |                    
    |                                        |      | Service:             |                    
    |                                       <-------+ POSTGRES_CONNECTION  |                    
    |                                        |      |                      |                    
    |      Hostgroup                         |      |                      |                    
    |      servers_for_bob                   |      +----------------------+                    
    |                                    ^   |                                                  
    +----------------------------------------+      +---------+------------+                    
                                         |          | More services...     |                    
                                         +----------+                      |                    
                                                    +----------------------+                    

(obrigado link )

Como eu digo ao Icinga que se esse host for um membro do hostgroup servers_for_bob eu quero adicionar o contato bob a todos os hosts e serviços membros, mesmo aqueles definidos implicitamente via herança do grupo de host?

vi menções vagas sobre o uso de encaminhamentos de host e serviço para contornar isso , mas não foi capaz de descobrir como.

Parece que isso seria um requisito comum, mas não tenho certeza de onde ir a partir daqui. Ajuda?

    
por Craig Ringer 10.07.2014 / 06:53

2 respostas

1

Você pode fazer isso com o escalonamento. Usamos para enviar SMS para nossa equipe do NOC.

define serviceescalation {
    service_description *
    host_name first_host, second_host
    first_notification 4
    last_notification 10
    notification_interval 20
    contacts NOC
}
    
por 10.07.2014 / 12:24
1

Embora pareça que isso é um pedaço de bolo, aparentemente não é :). Você provavelmente tem apenas duas soluções:

1) Certifique-se de que cada modelo de definição de servidor não termine com servidores em mais grupos de servidores, resultando na possibilidade de colocar os contatos nos modelos de servidor.

2) Use alguma ferramenta de automação para gerar sua configuração e deixá-la tão fofa quanto possível (será simples na ferramenta). Temos usado o Puppet para lidar com a configuração do nagios e, embora gere uma grande quantidade de configuração, tudo bem, porque o código que a gerou é baseado em alguns modelos bastante simplistas.

    
por 10.07.2014 / 08:33

Tags