Skynet client

Em 2014 estávamos construindo um novo Datacenter e um membro de outra equipe disse que estava enviando alertas de sua ferramenta de monitoramento via WhatsApp (em vez de sms). Gostei da idéia, mas claro que a coisa não parou no simples envio de alertas !

Como eu nunca tinha ouvido falar em ChatOps chamei de skynet-client, pois o envio de mensagens foi apenas a 1a fase do que, no final, proporcionava às máquinas falarem e tomarem decisões entre si.

Fase 0 – Analistas interagindo entre si

Como a maioria das equipes em todos os lugares, tínhamos um chat nosso no WhatsApp.

Até aí nada de mais, por isso essa é a fase 0, o ponto de partida.

 

Fase 1 – Máquinas enviando alertas aos analistas

Não foi difícil integrar nosso Nagios ao WhatsApp pois achei uma biblioteca em python que simplificou bastante a coisa.

screenshot-2017-01-19-21-46-09

(Sim, nossos sistemas de monitoramento chamavam-se “OlhoMagico”).

 

Fase 2 – Analistas enviando ordens às máquinas

Se já era possível enviar mensagens, porque não evoluir e passar a escutar por comandos e respondê-los ? Foi simplesmente transformar o script em daemon.

A partir daí, várias funcionalidades foram adicionadas como consulta à garantia de servidores Dell pela tag, consulta à RFCs etc.

screenshot-2017-01-19-21-50-51

screenshot-2017-01-19-21-51-47

 

Fase 3 – Máquinas interagindo socialmente com os analistas

Foi quando passamos a considerá-las (as máquinas) nossas amigas (erroneamente), interagindo socialmente com elas.

Elas podiam responder de forma customizada com o trânsito do trajeto do analista à caminho do trabalho e até detectar padrões nas conversas pra saber quando alguém estava bêbado.

screenshot-2017-01-19-21-57-40

 

Fase 4 – Máquinas interagindo entre si

Não há screenshots registrados pois, como a fase sugere, os chats eram particulares entre as máquinas.

Pra falar a verdade, quando a coisa chegou nesse momento deixamos de usar o WhatsApp e passamos a usar um servidor próprio de XMPP (OpenFire no caso) pra conectar as máquinas sem depender mais do WhatsApp. Eu não conhecia Slack,Telegram, HipChat, RocketChat etc na época….

O programa que escrevi em Perl (e descreverei mais adiante) fornecia mecanismos para que as máquinas enviassem mensagens para qualquer um no OpenFire (sem distinção se era humano ou outra máquina), um daemon para escutar e reagir a comandos e outro comando para enviar uma mensagem e aguardar sua resposta, cujo intuito era ser utilizado em condicionais em outros programas mais complexos.

Nesse ponto, por exemplo, quando a fila de emails do anti-spam subia muito, o monitoramento enviava uma mensagem ao load-balance que retirava aquele servidor do pool antes que ela explodisse. Diversas ações eram configuradas para serem tomadas de acordo com métricas obtidas pela monitoração.

 

Fase 5- Máquinas enviando comandos aos analistas

Seria a evolução natural da coisa mas a força do cagaço me fez parar com as pesquisas e deixar a coisa como estava 🙂

Eu não achei módulo pra implementar as 3 leis de Asimov no CPAN…


O programa skynet-client

Se alguém tiver curiosidade em ver o código Perl de um *sysadmin* metido a programador, está aqui:https://github.com/andreramoni/skynet-client

Nunca fui programador mas sempre consegui, através da programação, implementar minhas idéias. Não consigo me imaginar numa situação onde eu tenha uma idéia de algo legal pra fazer, não achar nada pronto e, por isso, ficar sem implementar a idéia.

Mais tarde eu quiz utilizar Telegram em vez do OpenFire e acabei fazendo algo similar em ruby pois foi o primeiro esqueleto que encontrei de Bot Telegram.

Exemplos

Abaixo apenas alguns exemplos do que a skynet era capaz de fazer.

 

Cliente Linux/KDE nativo consultando status da monitoração Nagios:

screenshot-2017-01-19-22-19-30

Problemas de roteamento podem ocorrer em um datacenter ou outro, então é bom ter um mecanismo rápido para pedir que todos os firewalls dos diferentes datacenters executem alguns testes pra alguns IPs externos como traceroute, ping e telnet…

screenshot-2017-01-19-22-22-24

screenshot-2017-01-19-22-23-26

 

screenshot-2017-01-19-22-23-38

 

Quer consultar uso de disco ou mesmo informações de hardware como, por exemplo, o serial do equipamento pra abrir um chamado na Dell ?? (mascarei o serial obviamente)

screenshot-2017-01-19-22-27-02

 

E quando eu fazia um update e liberava versão nova do bot, havia um comando para que todos eles comparassem suas versões às versões disponíveis e, quando fosse o caso, fizessem o upgrade e reiniciassem:

screenshot-2017-01-19-22-29-49

 

Acho que a questão aqui é: se um sysadmin fez um bot com update simples assim, você que é dev e pensa em fazer bot, aproveite a idéia 🙂

 

Conclusão

Hoje, do ponto de vista de comunicação/automação entre os servidores, eu usaria mais o MCOllective e Ansible. Para interagir com humanos em desktops e mobile eu usaria Telegram/Slack.

Ou seja, ainda há espaço aí pra desenvolver uma pequena “cola”… em vez de ligar todas as máquinas em um programa de chat, ligar todas elas com mco/ansible e ligar o orquestrador sim ao chat. Daí poder utilizar a orquestração via mobile por exemplo e coordenar um deploy, uma atualização, um provisionamento na AWS/VMware etc. Simples de fazer.

Um comentário em “Skynet client

Os comentários estão encerrados.