Implantação de nova ferramenta de monitoração - Sensu - para coleta de checks, métricas (para geração de gráficos), envio de alertas em diversos canais.
1. Monitoramento de Infraestrutura e Serviços – Sensu
05/08/2015
Roberto Scudeller
roberto.scudeller@oi.net.br
beto.rvs@gmail.com
2. Monitoramento de Infraestrutura e Serviços – Sensu
Objetivos:
● Atualizar a ferramenta;
● Geração de gráficos;
● Compartilhar a função de monitoramento com todas as equipes;
● Abertura automática de incidentes;
● Integração com Gerenciamento de configurações;
● Envio em multiplos canais de comunicação se algo não “vai bem”.
3. Monitoramento de Infraestrutura e Serviços – Sensu
● Sem cluster ativo-ativo (não é fácil ativo
passivo);
● Restart após adicionar um host;
● Difícil de manejar e configurar;
● Nagios Master executa os checks;
● Primeira versão em 14/03/1999;
4. Monitoramento de Infraestrutura e Serviços – Sensu
● Cluster ativo-ativo;
● Clientes se registram automaticamente;
● Escrito em ruby;
● Clientes executam os testes;
● Configurações em arquivos json;
● Compativel com scripts do nagios;
Recursos:
● O cliente reune os checks;
● Servidor toma a ação;
● REST API para consulta (ou uma
interface);
● Todo cliente possui um keepalived;
5. Monitoramento de Infraestrutura e Serviços – Sensu
Check
Result
V
Event
Handler
Checks:
● Envia a saída para STDOUT ou STDERR;
● Usa o “exit status” para indicar severidade;
● 0: OK
● 1: WARNING
● 2: CRITICAL
● >3: UNKNOWN ou customizado.
● Mais: metric, data.
Handler:
● Toma uma ação por evento recebido;
● Diversos tipos: script, socket, etc;
6. Monitoramento de Infraestrutura e Serviços – Sensu
Origens dos checks:
Execute uma coletanea de checks nos clientes:
“Subscriptions”: [“linux”,”httpd”,”bd”]
Check Standalone: Somente executado e
agendado no cliente.
Socket Local (localhost:3030): O cliente tem uma
porta tcp/udp para input de checks. Exemplo:
{“name”: ”foo”, “output”:”bar”,”status”:1}
Todo check é inspecionado!!!
Teve saída diferente de zero?
Primeira saída de status zero da série?
Esta marcado como métrica (metric)?
Event!!!!
8. Monitoramento de Infraestrutura e Serviços – Sensu
Class profile::sensu::client {
include '::sensu'
}
Use um gerenciador de configurações para facilitar!
Exemplo no puppet:
9. Monitoramento de Infraestrutura e Serviços – Sensu
Class profile::basicmonitors {
sensu::plugin { 'check-puppet-last-run.rb':
install_path => '/etc/sensu/plugins'
}
sensu::check { 'check-puppet-last-run':
command => '/etc/sensu/plugins/check-puppet-last-run.rb
--summary-file /var/lib/puppet/state/last_run_summary.yaml --warn-
age 3600 --crit-age 7200',
handlers =>
['debug','graphite_event','slack_event','logstash_event'],
subscribers => 'basic',
standalone => false,
occurrences => 3,
}
}
11. Monitoramento de Infraestrutura e Serviços – Sensu
Class profile::confluencemonitor {
sensu::plugin { 'check-procs.rb':
install_path => '/etc/sensu/plugins'
}
sensu::check { 'check_confluence':
command => '/etc/sensu/plugins/check-procs.rb -p
confluence',
standalone => true,
}
}
Exemplo de check standalone
12. Monitoramento de Infraestrutura e Serviços – Sensu
Class profile::basic {
sensu::check { 'cpu-pcnt-usage-metrics':
type => 'metric',
command => '/etc/sensu/plugins/cpu-pcnt-usage-metrics.rb',
handlers => 'graphite',
subscribers => 'basic',
standalone => false,
}
}
Exemplo de monitoração com métrica
13. Monitoramento de Infraestrutura e Serviços – Sensu
Class profile::basic {
sensu::check { 'metrics-snmp-if_10.0.100.201':
type => 'metric',
command => '/etc/sensu/plugins/metrics-snmp-if.rb -h 10.0.100.201 -C newdc-col07 -s
network_10.0.100.201',
handlers => 'graphite',
standalone => true,
custom => { source => 'router_02' }
}
}
Just in time clientes
14. Monitoramento de Infraestrutura e Serviços – Sensu
“Dead man's switch”
“é um interruptor que automaticamente para o que o operador
humano fazia caso se torne incapacitado”
BACKUP:
echo '{"name": "backup_mysql", "ttl": 25200, "output": "failed to backup mysql", "status": 1}'
| nc localhost 3030
Aplicação envia um json para localhost 3030 por minuto:
{"name": "app_MuitoImportante", "ttl": 90, "output": "Everything is OK", "status": 0}'
19. Monitoramento de Infraestrutura e Serviços – Sensu
Próximos passos:
● Integração com o ITSM da empresa;
● Implantação de estrutura em produção;
● Criação de profiles de monitoração padrão;
● Testar um software para checks externos da aplicação;
● Customizar a interface uchiwa;
● Customizar dashboards no grafana;
● Gerenciamento de logs centralizado com ELK;
● Testar check-data, aggregates, check-aggregates;
● E muito mais...
20. Monitoramento de Infraestrutura e Serviços – Sensu
Referências:
https://sensuapp.org/docs/0.20/
http://slides.sensuapp.org/#1
http://www.slideshare.net/jallspaw/ops-metametrics-the-currency-you-pay-for-change
http://pt.slideshare.net/miquelruizm/monitoring-with-sensu
https://en.wikipedia.org/wiki/Dead_man%27s_switch
http://www.rampmeupscotty.com/blog/2013/01/20/why-use-sensu/
https://robbydyer.wordpress.com/2014/08/25/highly-available-sensu/
https://github.com/sensu-plugins
Casos para estudo:
https://github.com/fzaninotto/uptime
http://anatolijd.blogspot.co.uk/2014/07/scripting-grafana-dashboards.html
http://anatolijd.blogspot.com.br/2015/02/just-enough-angular-for-uchiwa.html
http://www.roblayton.com/2014/12/a-grafana-dashboard-for-graphite-and.html
Notas do Editor
Inicio: quem eu sou?
Objetivos da apresentação
O que geralmente encontramos nas operações de TI. Nagios é uma boa ferramenta, porém para ambientes mais novos, com deploy continuo, ele tem suas limitações. Por esse motivo, escolhemos mudar para uma nova...
Sensu foi criado pensando em ambientes em Cloud, com uma arquitura baseada em microservices. Leia mais no https://sensuapp.org/docs/latest/overview
Todo check do cliente do sensu, gera um resultado, que é enviado como um evento e este vai para um handler (que é o quem deve receber o evento)Ele é compatível com os scripts de check do nagios.
Estas são as opções de check: via subscription, similar ao servicegroups do nagios; via standalone, que é um check que só existe no cliente; E via socket local, que é uma opção local para postagem via json que irá alarmar no sensu server.
Estas são algumas das opções de handlers para onde os eventos serão enviados.
Um exemplo de configuração de cliente sensu usando o puppet como gerenciador de configurações. E uma amostra de como este cliente aparece no uchiwa, uma interface de visualização para os eventos do sensu.
Muito fácil. Este é um exemplo de check para testar se o puppet está executando corretamente nos servidores.Nota: o caminho do last_run_summary.yaml muda nas versões mais novas do puppet.E um evento no slack!!!
Este evento na interface uchiwa, no graphite/events, e no kibana.
Um exemplo de check standalone, que só ocorre no cliente, e como um servidor sensu interpreta o check e seu evento.
Um exemplo de chack “type: metric” postado no graphite.Vale notar que o grafico está relacionando eventos do graphite também.
Usando a tag “source: xxxxx” para indicar que estes checks são de um cliente não convencional, como no exemplo um roteador.
Exemplos de uso do socket local e um json para gerar um evento.
Utilize interfaces para facilitar sua vida. O grafana permite criação de dashboards lendo diretamente do graphite. Use-o bastante.
Aqui temos um exemplo de dados coletados e postados no graphite. Apesar de ser uma excelente ferramenta, a interface do graphite deixa a desejar, portanto use o grafana.
Procure utilizar o ELK (Elasticsearch, Logstash e Kibana) para visualizar os seus logs de forma centralizada, e em conjunto com seus eventos gerados pelas suas monitorações via sensu.
Esta é a interface do graphite para eventos. São uteis para gerar graficos correlacionados a eventos. Veja o slide 12.