lspe meetup talk on graphite
TRANSCRIPT
Realtime Enterprise Graphing and Visualization with Graphite
Dave Mangot
tech.mangot.comwww.tagged.com
Graphite Overview
Not monitoring, graphing!
Complex graph creation Web / Dashboard, CLI and API interfaces
http://graphite.wikidot.com/
http://graphite.readthedocs.org/
https://launchpad.net/graphite
Not Nagios, other monitoring, fooled ya
Oooh...
Ahhh...
What Graphite Provides
EASY to get data into visualization tool from any source
Zooming on arbitrary time periods
Ability to create ad-hoc graphs from ANY metric
Metric Storage
LDAP, Memcached integration
Graphite Pros
Horizontally scalable
Rapid graph prototyping (CLI)
Graph disparate data points
Numerous formulas available (derive, transform, average, sum, etc... )
Share graphs with other users
Supports existing RRD databases
Empower any user to create their own graphs, no advance configuration required
Graphite Cons
Not a dashboard
No hover details
No collector
Unfortunate name
Graphite Components
Demo Time!
Push vs. Pull/Poll
Who has heard of or knows what a key value pair is?
How about epoch time or unix time?
Then you can use graphite.
Getting data into Graphite
Java:
Socket socket = new Socket( "graphite01" , 2003 ); PrintStream printStream = new PrintStream(socket.getOutputStream()); printStream.println("tagged.sitemon.active_users" + country + " " + count + " " + (int) (System.currentTimeMillis() / 1000));
Perl:
sub graphite_submit { my $path = shift; my $values = shift; # hash ref of values by name my $time = shift; $time = time() unless defined($time); my ($host, $port) = qw(localhost 2003); my $sock = IO::Socket::INET->new( PeerAddr => $host, PeerPort => $port, Proto => 'tcp', ); die "Could not connect to $host:$port : $!\n" unless defined($sock); foreach my $key (keys %$values) { print $sock "$path.$key $values->{$key} $time\n"; } }
Shell! $echo tagged.sample.data.point1 31337 `date +%s` | nc -w 3 graphite01 2003
Coming Attractions
Ceres replaces Whisper
Dashboard give targeted view of the data
Interactive Graphs (flot?)
API improvements
Multiple Y axes
Ceres does not use space for time periods which contain no datapoints, uses 33% less disk space,able to store the datapoints for a single metric across multiple servers.
Dashboard trunk:Save graphsdrag'n'drop reordering & merging graphs, all the composer featuresare there (graph options, functions, etc) plus a few more (breakout agraph with wildcards into separate graphs,
Cool things folks are doing with Graphite
ESNet:Written by John Dugan
Takes data from EsxSNMP and NetAlmanac
Integrates with Internal Java tool for event correlation
JMXtrans: (http://code.google.com/p/jmxtrans/)Written by Jon Stevens
writers for Graphite (recommended), cacti/rrdtool and stdout
Cool things folks are doing with Graphite
Esty Statsd:https://github.com/etsy/statsd
Inspired by Flickr project
A network daemon for aggregating statistics, rolling them up, then sending them to graphite.
Implemented in Node.js
Can do counting, timing, sampling
Flushes to Graphite on interval
Cool things folks are doing with Graphite
Rocksteady:http://code.google.com/p/rocksteady/
Graphite can consume AMQP
Integrates with Esper (http://esper.codehaus.org/)
Special Thanks
Chris Davis
Jason Dixon
Corey Hickey
Yaakov NemoyGary Larsen