IX (PTT) Fórum 10
Monitoramento em Tempo real com Graphite e Grafana
Renato Ornelas <
[email protected]>
Agenda
• Breve histórico sobre monitoramento
• Historia/Arquitetura Graphite
• Componentes Graphite
• Grafana
• Demomonstração
• Links
História Monitoramento
via Gráficos
• MRTG - 23/Jun/1995
• RRD - 16/Jul/1999
• Cacti - 02/Set/2001
Ferramentas Atuais (cacti)
Ferramentas Atuais (cacti)
Ferramentas Atuais (cacti)
Prós Contras
Solução completa Poller
Facilidade de Operação Agregação
Templates (hosts, gráficos) Dashboard
Plugins Resolução
Cacti x Graphite
História Graphite
• Iniciou como uma aplicação/API para renderizar gráficos baseados
em dados armazenados em arquivos RRD (graphite-web)
• Devido a um bug do RRD, criou um formato próprio para
armazenar os dados (whisper)
• Para escalar, foi necessário criar uma camada de cache e uma
interface de rede para permitir que fosse fácil enviar e armazenar
métricas (carbon)
• Open source desde 2008
• Versão 1.0 lançada semana passada (30/11)
Arquitetura Graphite
Arquitetura Graphite
• O Graphite é composto por 3 componentes
• carbon - Serviço de alta performance que recebe dados das
series temporais
• whisper - uma biblioteca simples para armazenamento
persistente das series temporais
• graphite-web - Interface de usuário e API para renderizar
gráficos e dashboards
Arquitetura Graphite
• As métricas são enviadas através do serviço carbon, que salva
os dados em uma base de dados whisper (para armazenamento
de longo prazo).
• Os usuários interagem com o graphite-web ou com a API, que,
por sua vez, consulta o carbon e as bases whisper para obter os
dados necessários para construir os gráficos solicitados.
• A plataforma web graphite oferece uma variedade de estilos e
formatos, incluindo imagens, CSV, XML e JSON, facilitando a
inclusão de gráficos customizados em outras páginas ou
dashboards.
Arquitetura Graphite
O que o Graphite faz?
• Armazena dados de séries temporais (métricas)
• Renderiza gráficos com esses dados sob demanda
O que o Graphite NÃO faz?
• Coleta estes dados para você
Vantagens Graphite
• Formato de métrica simples
• API para gráficos
• Prototipagem rápida
• Biblioteca de funções estatísticas
• Funções em Cadeia
Métricas
Métricas
• Conjunto de valores coletados através do tempo
• Nome único, composto por caracteres alfanuméricos
separados por ".", criando uma árvore hierárquica.
• Unidimensional (1 métrica por arquivo whisper)
Métricas (exemplos)
• carbon.agents.graphite0.creates
• infra.openx.SPO-VD.rack0-pdu-a.snmp.temperature
• sflow.bgp.source.CDN-NETFLIX.destination-as.263444
• collectd.openx.SPO1.core1.if_octets.WAN_ATM_V4-SPO1_CORE1.tx
• collectd.openx.SPO2.core1.if_octets.WAN_ATM_V4-SPO2_CORE1.tx
Armazenamento
• Métrica:
• collectd.openx.SPO-L3.x480-core1.snmp.if_octets-
pt25.WAN_ATM_V4-SPO1_CORE1.tx
• Arquivo whisper:
• /var/lib/graphite/whisper/collectd/openx/SPO-L3/x480-
core1/snmp/if_octets-pt25/WAN_ATM_V4-SPO1_CORE1/
tx.wsp
Métricas (retenção)
/etc/carbon/storage-schemas.conf:
[default_1min_for_1day]
pattern = .*
retentions = 60s:1d
Retenção (exemplos)
[snmp_collectd_octets]
pattern = ^collectd\.openx\..*.snmp\.if_octets-*
retentions = 10s:9h,30s:3d,1m:21d,5m:90d,15m:1y,1h:5y
[snmp_collectd_packets_openx]
pattern = ^collectd\.openx\..*.snmp\.if_packets-*
retentions = 10s:3h,30s:1d,1m:5d,5m:90d,30m:1y,1h:5y
Tamanho arquivo whisper
$ whisper-create tx.wsp 10s:9h 30s:3d 1m:21d 5m:90d 15m:1y 1h:5y
Created: tx.wsp (1762648 bytes)
$ whisper-create tx.wsp 10:6h 1m:15d 10m:1y
Created: tx.wsp (915892 bytes)
Coletores
• nc
• collectd
• Sflow-RT
• FastNetMon
• Desenvolvimento interno (é bem fácil)
nc
echo "hello.world $RANDOM `date +%s`" | nc localhost 2003
Collectd
O collectd coleta métricas de várias origens, por exemplo,
sistema operacional (memoria, cpu, load avg, tráfego das
interfaces de rede), aplicações, SNMP, logs e armazena ou
disponibiliza para outras ferramentas, como por exemplo
graphite
Collectd (exportar)
<Plugin write_graphite>
<Node "graphite">
Host "graphite.isp.com.br"
Port "2003"
Protocol "tcp"
Prefix "collectd."
StoreRates true
EscapeCharacter "."
</Node>
</Plugin>
Collectd (SNMP)
<Host "openx.pop.router0">
<Plugin snmp>
Address "1.2.3.4"
<Data "std_traffic">
Version 2
Type "if_octets"
Community "read"
Table true
Interval 10
Instance "IF-MIB::ifDescr"
Collect "std_traffic"
Values "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets"
</Host>
</Data>
</Plugin>
API
Consulta Interfaces
snmp.if_octets.eth0.tx eth0
snmp.if_octets.eth1.tx eth1
snmp.if_octets.ppp0.tx ppp0
snmp.if_octets.*.tx eth0,eth1,ppp0
snmp.if_octets.eth*.tx eth0,eth1
snmp.if_octets.{ppp0,eth0}.tx ppp0,eth0
Algumas Funções
Scale averageAbove
SumSeries averageOutsidePercentile
MovingAverage currentAbove
AsPercent highestCurrent
TimeShift holtWintersConfidenceBands
Alias nPercentile
AliasByNode sortByName
Render JSON
• https://graphite.isp.com.br/render?
format=json&from=-5min&until=&maxDataPoints=800&targ
et=alias(sumSeries(scale(collectd.snmp.if_octets-
pt*.WAN_IP-*.rx,8)),"WAN-IP-TOTAL")
• [{"target": "WAN-IP", "datapoints": [[3570213406.426056,
1476152100], [3512996469.2378483, 1476152110],
[3501481335.3938, 1476152120], …}]
Render PNG
• https://graphite.isp.com.br/render?
format=png&from=-5min&until=&maxDataPoints=800&targ
et=alias(sumSeries(scale(collectd.snmp.if_octets-
pt*.WAN_IP-*.rx,8)),"WAN-IP-TOTAL")
Dicas
• Use SSD sempre que possível, afinal você pode ter
MILHÕES de métricas/segundo
• Mantenha as métricas alinhadas ou terá problemas para
agregar depois:
★ snmp.if_octets.eth0.tx
★ snmp.srv1.if_octets.eth0.tx
Grafana
• Grafana é um editor de gráficos e um dashboard cheio de
recursos para Graphite, Elasticsearch, InfluxDB entre
outros
• Lançado em 2014
• Desenvolvimento bastante ativo
• Versão 4.0 lançada semana passada (30/11)
Grafana (recursos)
• Templates
• Playlist
• Busca
• Compartilhamento
• Importar/Exportar
• Faixas de horário
• Alarmes/notificações
Dashboard Grafana
Painel
Alerta
Edição de Métricas
Templates
Importar/Exportar
Faixas de horário
Compartilhamento
(DEMO)
Recursos
• https://groups.google.com/forum/#!forum/graphitebr
• Livro: Monitoring with Graphite (Jason Dixon)
http://shop.oreilly.com/product/0636920035794.do
• Blog do Jason: http://obfuscurity.com
• Graphite:
http://graphiteapp.org
• Grafana:
http://grafana.org
• Twitter: @grafana, @torkelo, @obfuscurity
Obrigado!
[email protected]
http://www.openx.com.br