31
Graphite Johan Gunnarsson @ Inits teknikdag [email protected] / se.linkedin.com/in/jgunnarsson / @j_gunnarsson

Graphite teknikdag

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Graphite teknikdag

Graphite

Johan Gunnarsson @ Inits [email protected] / se.linkedin.com/in/jgunnarsson / @j_gunnarsson

Page 2: Graphite teknikdag

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

Page 3: Graphite teknikdag

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

Page 4: Graphite teknikdag

Översikt

Page 5: Graphite teknikdag

Carbon

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

Page 6: Graphite teknikdag

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

Page 7: Graphite teknikdag

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

Page 8: Graphite teknikdag

Whisper

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

Page 9: Graphite teknikdag

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

Page 10: Graphite teknikdag

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

Page 11: Graphite teknikdag

Graphite-web - UI

Page 12: Graphite teknikdag

Graphite-web - CLI

Page 13: Graphite teknikdag

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●

Page 14: Graphite teknikdag

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

Page 15: Graphite teknikdag

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

Page 16: Graphite teknikdag

Plugins och verktyg för Graphite

Page 17: Graphite teknikdag

CollectD

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

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

Page 18: Graphite teknikdag

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

Page 19: Graphite teknikdag

StatsD - exempel

import statsd

timer = statsd.Timer('MyApplication')

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

Page 20: Graphite teknikdag

JMXTrans - github.com/jmxtrans/jmxtrans

● Verktyg för monitorering av JVM

Page 21: Graphite teknikdag

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

Page 22: Graphite teknikdag

...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.

Page 23: Graphite teknikdag

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?

Page 24: Graphite teknikdag

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

Page 25: Graphite teknikdag

Dashboards

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

Page 26: Graphite teknikdag

Dashboards - Team dashboardgithub.com/fdietz/team_dashboard

Page 27: Graphite teknikdag

Dashboards - Tasseogithub.com/obfuscurity/tasseo

Page 28: Graphite teknikdag

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

Page 29: Graphite teknikdag

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

Page 30: Graphite teknikdag

Prova själv!

Vagrant up!

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

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

Page 31: Graphite teknikdag

Mer information

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