Imagem: fonteOlá Habr! Meu nome é Ilya Ableev, trabalho no departamento de monitoramento do Badoo.
Você pode esperar por um longo tempo sobre qual sistema de monitoramento é mais frio. A principal ferramenta para responder a problemas no Badoo é o Zabbix, e
compartilhamos repetidamente
a experiência de personalizá-lo.
Pronto para uso, você pode aprender sobre novos problemas por meio da interface da web ou por email / SMS. Isso funciona bem e, até certo ponto, estávamos à vontade com esses métodos.
Hoje, nosso sistema possui várias instâncias de servidor, milhares de hosts, centenas de milhares de verificações e aproximadamente o mesmo número de gatilhos aos quais você precisa responder o mais rápido possível. Após uma série de incidentes, quando gastamos apenas dez minutos para detectar um problema (o que é completamente inaceitável), percebemos que precisávamos de outras maneiras de relatar problemas. Então talvez nossa reação fosse mais rápida.
A solução ideal, em nossa opinião, seria exibir notificações importantes sobre todas as janelas (navegadores, chats, consoles). Neste artigo, falaremos sobre como terminamos o Zabbix, ensinando como enviá-los diretamente para a área de trabalho.
Para quem esta solução é adequada:
- administradores de serviço, que não apenas olham o monitor 24 horas por dia, mas também lidam com outras tarefas;
- todos os outros administradores que não gostam de visualizar as folhas PROBLEM e OK no correio ou SMS, mas que desejam descobrir problemas críticos em tempo hábil.
Você terá que gastar tempo na instalação, mas acho que se você usar o Zabbix e já tiver usado scripts personalizados, não será difícil para você.
Atenção! Receber notificações dessa maneira é viciante, seu uso a longo prazo dá a impressão de que é parte integrante do Zabbix.
Vou contar em etapas o que e como fizemos. A implementação técnica é bastante simples:
- O Zabbix envia um alerta para algum evento.
- O script de envio no servidor envia dados para o cliente na área de trabalho via UDP.
- O script do destinatário recebe a notificação e aciona a aparência de uma mensagem pop-up por meio de um aplicativo adicional.
O terceiro item pode diferir dependendo do sistema operacional que você está usando e do aplicativo que você mais gosta.
Etapa 1: Configurar o Zabbix
A documentação oficial detalha
como criar seus alertas .
O código do projeto está disponível no GitHub:
https://github.com/ableev/ZbxDsktp .
- Coloque o zbxpush.py no AlertScriptsPath com antecedência no servidor Zabbix.
- Mais adiante na interface da web: Administração → Tipos de mídia → Criar .

3. Registraremos antecipadamente o IP / FQDN para o qual enviaremos alertas.
Este item pode ser atualizadoPor exemplo, fizemos o seguinte: existe um servidor de monitoramento principal, com um login SSH, o script lembra o IP do chamador e começa a enviar alertas para ele. Portanto, para ativar o recebimento de dados em casa, você não precisa alterar a ação todas as vezes.
Na interface da web:
Administração →
Usuários →
% username% →
Mídia .

4. Crie uma ação nos gatilhos.
Na interface da web:
Configuração →
Ações .

Formato de envio
{TRIGGER.NSEVERITY}@@@{HOST.NAME}@@@{TRIGGER.NAME}
O primeiro é o formato numérico do acionador (4 ou 5 afeta o ícone exibido: Alto ou Desastre), o segundo é o cabeçalho da notificação e o terceiro é o corpo da mensagem.
@@@ - para facilitar a divisão em colunas, porque os nomes dos gatilhos podem dizer qualquer coisa (pelo menos conosco :)), mas certamente não essa combinação.


Etapa 2: o servidor envia dados para o cliente
A lógica é simples: recebemos um evento, encaminhamos para o cliente.
zbxpush.py
Aqui você pode alterar UDP para TCP. Escolhemos o UDP por um motivo simples: o Zabbix envia todas as notificações em sequência, o que significa que, se o seu computador não estiver disponível, no caso de usar o TCP, as notificações serão enviadas com um longo atraso.
Mas o UDP não é confiávelO leitor, que faz piada sobre o UDP, notará que, no caso de enviar alertas pelo UDP, há uma chance de perdê-los em algum lugar entre o servidor e a área de trabalho. E ele estará certo. Mas o objetivo não é entregar uma mensagem garantida, mas chamar a atenção de forma simples e rápida para o painel com problemas: "Ei, algo aconteceu lá, vá ver".
Lembre-se de tornar o script executável!
Etapa 3: receber o evento e exibir notificações
zbxlistenerd.py
- um script que girará em segundo plano e acionará notificações
settings.cfg
- arquivo com configurações do cliente
icons/5.png
,
icons/4.png
- ícones para diferentes críticas de gatilhos
Além disso, nossos caminhos divergem. A parte "cliente" envolve um pouco de criatividade, pois todos criam um ambiente para si mesmos.
O que é necessário:
- Ícones correspondentes à criticidade dos gatilhos;
- notificações pop-up sonoras;
- executando uma ação clicando em uma notificação (login SSH, abrindo um link, iniciando um ticket sobre um problema etc.).
Nossa empresa usa principalmente Linux e Mac OS como um sistema operacional de desktop, então vamos dar alguns exemplos para eles. Se você implementar o mesmo para o Windows, faça o comentário! Estamos felizes em complementar o post.
Linux

Deixe-me dar um exemplo que você usou: notificar-enviar no Xfce (na captura de tela acima). Por que notificar-enviar e não o mesmo Python usando libnotify? Sim, porque está em todas as distribuições populares de desktop (Ubuntu, Fedora, SUSE) e funciona com todos (pelo menos populares) DEs (Gnome, KDE, Xfce).
Dica: se você experimentar períodos de indisponibilidade em massa de algo (por exemplo, um comutador caiu e você é inundado por uma montanha de gatilhos sobre a indisponibilidade do servidor), configure imediatamente a tecla de atalho para concluir o processo de notificação-envio.
Mac OS
Como inicialmente a solução foi implementada com base em um aplicativo gratuito e, em seguida, experimentamos o pago, haverá dois exemplos.
notificador de terminal

Após uma breve pesquisa, foi escolhido
um notificador de terminal gratuito.
Prós:
- Você pode definir ícones diferentes para diferentes aspectos críticos;
- Você pode criar links para gráficos no Zabbix e abri-los clicando em uma notificação;
- Você pode implementar a abertura dos links SSH: eles viram uma notificação -> clicaram -> imediatamente foram para o host.
Contras: nenhum (especialmente depois que o suporte ao ícone foi adicionado).
Growl
Para ativar, defina growl_enabled = True em settings.cfg.Numa época em que o notificador de terminal não sabia como usar ícones personalizados, Growl lidou muito bem com isso. Portanto, nossa curiosidade prevaleceu sobre a nossa curiosidade - e testamos esse aplicativo bastante popular (que, devo dizer, não pode apenas mudar de ícone - é todo um centro de notificações).
Prós:
- você já pode ter o aplicativo instalado;
- Você pode escolher ícones diferentes para diferentes criticidade;
- Assim como no notificador de terminal, você pode configurar ações clicando em notificações.
Menos: pago.
Se você não tem Growl, ainda recomendo usar o notificador de terminal.
Conclusão
Então, com a ajuda de dispositivos simples ...O que obtivemos como resultado:
- entrega rápida de notificações aos administradores;
- redução do tempo de reação a eventos (do momento em que “descobriram” a “repararam” ou “repassaram”);
- a capacidade de executar ações semi-automáticas simples:
Além disso, tudo depende da sua criatividade.
Era uma vez, quando eu trabalhava em uma empresa prestadora, quando o canal da Internet caía de todos os alto-falantes e fones de ouvido no local de trabalho, o som de uma sirene era ouvido. Isso levou o atendente (eu) a ficar estupor, não deu um relatório adequado do problema por telefone, mas ele (I) tentou resolver o problema o mais rápido possível.
Pessoalmente, eu já conheço casos de estragar o script com o som de um porco de um antivírus popular e de um tradutor popular. :)
Se você tiver tempo livre, desejo e tecnologia moderna, poderá fazê-lo
Reações rápidas a incidentes!