Upload
runa
View
488
Download
2
Embed Size (px)
Citation preview
rasmusnosotros
Que hace Graphite
● Guarda métricas en el tiempo● Permite
○ filtrarlas○ procesarlas○ graficarlas
De donde sale Graphite
● Sideproject de Chris Davis en Orbitz● Opensourceado en 2008● Python + Twisted● Github
Quienes lo usan
Orbitz, Etsy, Google, Vimeo, Properati y Sumavisos ;)
Porque me interesa, a mí
● Mi trabajo => problemas raros● Fácil de implementar● Experimentos rápidos● Da herramientas para tomar decisiones● poco esfuerzo => buenos resultados
Porque me interesa darles esta charla
● *tiene sentido*● fácilmente accionable● poco esfuerzo => muchos resultados
Que hace Graphite (de nuevo)
● Guarda métricas en el tiempo○ contadores○ timers○ gauges
■ s. calibre, espesor; manómetro, barómetro, indicador, medidor; calibrador, gage, graduador, gramil; pluviómetro; distancia entre dos ejes, entrerriel, entrevía
● Permite extraerlas, filtrarlas, procesarlas y graficarlas
Una métrica en el tiempo
web.exceptions 2013/10/1 7:50:10 0
web.exceptions 2013/10/1 7:50:20 0
web.exceptions 2013/10/1 7:50:30 15
web.requests 2013/10/1 7:50:10 50
web.requests 2013/10/1 7:50:20 53
web.requests 2013/10/1 7:50:30 42
Tipos de métricas
● Contadores○ Cuantos X hubo en tal periodo de tiempo?
■ requests■ suscripciones■ logins
● Timers○ Cuanto tardó Z?
■ una búsqueda en resolverse■ un caché en responder
● Gauges○ Cuanto mide Y?
■ pedidos encolados● Eventos
Como se usa - meter datos
post "/contact" do
# hacer algo
G.increment("properati.contact.form_completed")
end
O, alternativamente,
echo "local.random.diceroll 4 `date +%s`" | nc 127.0.0.1 2003
Como se usa - sacar datos
● Dashboard○ Graficos (feuchos pero utiles)
● URL API○ Gráficos○ JSON○ CSV
2 métricas para una período
2 métricas mergeadas
Performance de la DB
Tiempo gastado cada 10/sec
Funciones
● summarize● sum● avg● product● ratio
● integral● derivate● holtWintersForecast
● asPercent● stacked● “tipo munin”
Performance de la DB
Tiempo gastado cada 10/sec
Tiempo gastado sumarizado cada 10/min
Performance por componente
Un request = MySQL + Sphinx + Redis + Ruby
Distribucion por datacenter
Por Status de HTTP
Salud + Deploys
Parcial, diario e histórico
Cantidad de resultados por búsqueda
Mails enviados vs Horario apertura
Dashboards!
URL APIGET http://tools.sumavisos.xstrat.us/render?width=400&from=-1weeks&until=-&height=250&target=alias(summarize(sumSeries(stats_counts.properati.parsers.*.*.deleter.property.sources.*.deleted)%2C'1d')%2C%22borrados%22)&title=borrados&hideLegend=true&areaMode=stacked&lineMode=staircase
image/png
URL API - JSONGET http://tools.sumavisos.xstrat.us/render?width=400&from=-1weeks&until=-&height=250&target=alias(summarize(sumSeries(stats_counts.properati.parsers.*.*.deleter.property.sources.*.deleted)%2C'1d')%2C%22borrados%22)&title=borrados&hideLegend=true&areaMode=stacked&lineMode=staircase
&format=json
text/javascript
[{"target": "borrados", "datapoints": [[327.0, 1380067200], [803.0, 1380153600], [528.0, 1380240000], [1244.0, 1380326400], [460.0, 1380412800], [224.0, 1380499200], [21.0, 1380585600], [194.0, 1380672000]]}]
Dashboards Alternativos
<<<
Alertas
HoltWintersForecast
El stack es complicado
● Graphite○ carbon○ whisper○ webapp
● Statsd○ Escucha UDP○ Agrupa cada 10s ○ Le pasa a Graphite
Pero hay unos howtos cut&paste&godhelpme