Graphite teknikdag

Post on 15-Jan-2015

673 views 2 download

description

 

Transcript of Graphite teknikdag

Graphite

Johan Gunnarsson @ Inits teknikdagjohan.gunnarsson@init.se / se.linkedin.com/in/jgunnarsson / @j_gunnarsson

Vad är graphite?

● Användargenererade grafer● Behöver ingen förkonfigurering av nya källor● Grafer i (nästan) realtid● Skalbart● URL API● Dumt namn

Nödvändigheter

● Ursprungligen utvecklat av Chris Davis på Orbitz.com, första versionen 2006

● Skrivet i Python, webappen i django med EXTjs för javascript GUI

● Licens: Apache 2.0

Översikt

Carbon

● Agent på serversidan● Kö för lagring i Whisper● lyssnar på tcp/2003

Få in data till Carbon

Format:"metric_path value timestamp \n"

foo.bar.baz 7 1359633139

$ echo "foo.bar.baz 7 $(date +%s)" | nc graphite 2003

Få in data till carbon - exempel#!/bin/bashidgmoln=$(curl --silent www.idg.se | grep --count --ignore-case moln)echo "webcount.idg.moln "$idgmoln" "$(date +%s) | nc graphite 2003

Whisper

● Fix-storlek datastorage● Liknar RRD (fast bättre)● Tillåter uppdateringar i "oordning"● Kräver inte fördeklarerade datastores

Whisper - databasdefinition$ cat storage-schemas.conf# Schema definitions for Whisper files. Entries are scanned in order,# and first match wins. This file is scanned for changes every 60 seconds.## [name]# pattern = regex# retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...

[everything_1min_13months]priority = 100pattern = .*retentions = 1m:395d

Graphite-web

● Django● PyCairo för rendering av grafer● Inte riktigt en dashboard● Använd mest för att prototypa grafer● Enkelt CLI● URL API

Graphite-web - UI

Graphite-web - CLI

Graphite URL API

● Graphites webapp exponerar ett URL-API på http://graphite/render

● Parametrar anges som /render/?param=value&param2=value2

● Output i form av png, json, csv, raw, svg●

Graphite - URL API exempelhttp://graphite/render/?width=586&height=308&target=webcount.idg.moln

Graphite URL API - mer exempel

# average load across web machines over last 12 hourshttp://graphite/render?target=averageSeries(server.web*.load)&from=-12hours

# number of registered users over past day as raw json datahttp://graphite/render?target=app.numUsers&format=json

# rate of new signups per minutehttp://graphite/render?target=summarize(deriviative(app.numUsers),"1min")&title=New_Users_Per_Minute

Plugins och verktyg för Graphite

CollectD

● Samlar in system metrics● God tillgång på externa plugins för

mätvärden● Flera olika plugins för output till graphite

StatsD - github.com/etsy/statsd/

● Aggregator som körs på noden● UDP in (fire and forget), TCP ut● Flushar ut aggregerat data till graphite● Bindings till dom flesta språk

StatsD - exempel

import statsd

timer = statsd.Timer('MyApplication')

timer.start()# spännande kodtimer.stop('SomeTimer')

JMXTrans - github.com/jmxtrans/jmxtrans

● Verktyg för monitorering av JVM

Logstashhttp://logstash.net/

● Verktyg för att hantera loggar och events● Används normalt som ersättare till splunk

tillsammans med ES och kibana● Innehåller grok för att filtrera ut och

organisera data ur loggar● Output för graphite

...och många fler

● Graphios- verktyg som skickar nagiosmetrics

● Logster- Hantering av loggfiler, ungeför som logstash

● Ganglia- Distribuerat system för metrics, ursprungligen för HPC. Har graphite-output.

● Diamond- Samlar in system-metrics, skrivet i python.

Användningsfall CD 1/2(lånat från: http://codeascraft.etsy.com/2010/12/08/track-every-release/)

Grafa antal errors över tid. Men vad hände?

Användningsfall CD 2/2(lånat från: http://codeascraft.etsy.com/2010/12/08/track-every-release/)

Lägg in events.deploy.website 1 $(date +%s)i ditt deployverktyg och använd drawAsInfinite

Dashboards

Eftersom graphites inbyggda dashboard inte är en ordentlig dashboard finns ett antal externa projekt...

Dashboards - Team dashboardgithub.com/fdietz/team_dashboard

Dashboards - Tasseogithub.com/obfuscurity/tasseo

Dashboards - Graphenehttps://github.com/jondot/graphene

Dashboards - dashinghttp://shopify.github.com/dashing/

Prova själv!

Vagrant up!

Färdig maskin med graphite, jmxtrans, collectd och logster:

https://github.com/KrisBuytaert/vagrant-graphite

Mer information

● http://graphite.wikidot.com/● https://launchpad.net/graphite● http://graphite.readthedocs.org/en/0.9.10/● http://codeascraft.etsy.com/