Vous êtes sur la page 1sur 44

IX (PTT) Fórum 10

Monitoramento em Tempo real com Graphite e Grafana


Renato Ornelas <renato@openx.com.br>
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!

renato@openx.com.br
http://www.openx.com.br