statsd workshop monitorama 2013

34
StatsD workshop @ Monitorama 2013 Daniel Schauenberg Software Engineer, Etsy Infrastructure @mrtazz Friday, March 29, 13

Upload: daniel-schauenberg

Post on 07-May-2015

954 views

Category:

Technology


1 download

DESCRIPTION

StatsD workshop from Monitorama 2013

TRANSCRIPT

Page 1: StatsD Workshop Monitorama 2013

StatsD workshop @ Monitorama 2013

Daniel SchauenbergSoftware Engineer, Etsy Infrastructure

@mrtazz

Friday, March 29, 13

Page 2: StatsD Workshop Monitorama 2013

• What is this StatsD?

• Metrics types

• Backends

• Graphite and operating StatsD

• Send all the metrics

• Write all the backends

Friday, March 29, 13

Page 3: StatsD Workshop Monitorama 2013

Friday, March 29, 13

Page 4: StatsD Workshop Monitorama 2013

Receiver loop

Metricsprocessing

module

Backends

Friday, March 29, 13

Page 5: StatsD Workshop Monitorama 2013

legacyNamespace: false

Friday, March 29, 13

Page 6: StatsD Workshop Monitorama 2013

Counters

foo.bar:1|c

stats.counters.foo.bar.ratestats.counters.foo.bar.count

Friday, March 29, 13

Page 7: StatsD Workshop Monitorama 2013

Gauges

foo.gar:30|gfoo.gar:-5|gfoo.gar:+5|g

stats.gauges.foo.garFriday, March 29, 13

Page 8: StatsD Workshop Monitorama 2013

Sets

foo.sar:30|sfoo.sar:50|s

stats.sets.foo.sar

Friday, March 29, 13

Page 9: StatsD Workshop Monitorama 2013

Timers

foo.tar:30|ms

stats.timers.foo.tar.mean_90stats.timers.foo.tar.std

stats.timers.foo.tar.sum_90Friday, March 29, 13

Page 10: StatsD Workshop Monitorama 2013

Histograms

histogram: [{metric: "foo.tar", bins: [10,20,30,50]}]

stats.timers.foo.tar.histogram.bin_10stats.timers.foo.tar.histogram.bin_20

Friday, March 29, 13

Page 11: StatsD Workshop Monitorama 2013

Friday, March 29, 13

Page 12: StatsD Workshop Monitorama 2013

Pluggable backendsfunction MyBackend(startupTime, config, emitter){  var self = this;  this.lastFlush = startupTime;  this.lastException = startupTime;  this.config = config.mybackendconfig || {};

  // what to do with metrics  emitter.on('flush', function(timestamp, metrics) {}); // update your status  emitter.on('status', function(callback) {}); // handle raw packet emitter.on('packet', function(packet, rinfo) {});};

Friday, March 29, 13

Page 13: StatsD Workshop Monitorama 2013

Management Interface

> telnet 127.0.0.1 8126

> stats

> counters

> delcounters

> help

Friday, March 29, 13

Page 14: StatsD Workshop Monitorama 2013

Graphite + StatsD

• default backend

• whisper archives should match flush interval

• sum aggregation for raw counters

• docs/graphite.md

Friday, March 29, 13

Page 15: StatsD Workshop Monitorama 2013

The single-thread dilemma

Friday, March 29, 13

Page 16: StatsD Workshop Monitorama 2013

Tuning UDP

# increase default core memory sizes

net.core.rmem_default = 16777216

net.core.wmem_default = 16777216

net.ipv4.udp_wmem_min = 67108864

net.ipv4.udp_rmem_min = 67108864

net.ipv4.udp_mem = 4648512 6198016 9297024

Friday, March 29, 13

Page 17: StatsD Workshop Monitorama 2013

Sampling

• default sampling of 0.1 on all metrics

• most sent keys (log file) are sampled 0.01

Friday, March 29, 13

Page 18: StatsD Workshop Monitorama 2013

Quis monitoret ipsos monitores?

Friday, March 29, 13

Page 19: StatsD Workshop Monitorama 2013

Friday, March 29, 13

Page 20: StatsD Workshop Monitorama 2013

Friday, March 29, 13

Page 21: StatsD Workshop Monitorama 2013

Friday, March 29, 13

Page 22: StatsD Workshop Monitorama 2013

Friday, March 29, 13

Page 23: StatsD Workshop Monitorama 2013

Let’s do thisFriday, March 29, 13

Page 24: StatsD Workshop Monitorama 2013

Basic setup

• git clone https://github.com/etsy/statsd.git

• curl https://gist.github.com/mrtazz/5270376 > test_config.js

• nc -k -l 2003 > output.log

• node stats.js test_config.js

Friday, March 29, 13

Page 25: StatsD Workshop Monitorama 2013

Send some stats

> echo -n "foo.bar:1|c" | nc -w0 -u 127.0.0.1 8125

> echo -n "foo.lerl:3|g" | nc -w0 -u 127.0.0.1 8125

> echo -n "foo.lol:33|ms" | nc -w0 -u 127.0.0.1 8125

> echo -n "foo.lol:43|ms" | nc -w0 -u 127.0.0.1 8125

> echo -n "foo.lol:53|ms" | nc -w0 -u 127.0.0.1 8125

Friday, March 29, 13

Page 26: StatsD Workshop Monitorama 2013

Some actual statsDisk space:

df -m | grep "/var" | awk '{print "diskspace.var:"$4"|g"}'

Apache HTTPD processes:

echo -n "httpd.procs:$(ps aux | grep [h]ttpd | wc -l)|g"

Logfile size:

du -s /var/log/chef.log | awk '{print "cheflog:"$1"|g"}'

Friday, March 29, 13

Page 27: StatsD Workshop Monitorama 2013

Is this real life?

• Set up a web page

• Have it send stats to StatsD

• page load time

• counters when page was accessed

• look in the examples/ directory for code

Friday, March 29, 13

Page 28: StatsD Workshop Monitorama 2013

Histograms

• You should have timers now

• Configure histograms for them

• { graphite: { histograms: [] }

Friday, March 29, 13

Page 29: StatsD Workshop Monitorama 2013

Level up!

Friday, March 29, 13

Page 30: StatsD Workshop Monitorama 2013

Write a new backend

• Have it HTTP POST to a web server

• write metrics to a file

• send a txt message

• repeat all UDP packets to TCP

Friday, March 29, 13

Page 31: StatsD Workshop Monitorama 2013

Hackathon ideas

• Metrics path validation in backend

• Pluggable receiver frontends

• Forked backends

• Configurable timer metrics

Friday, March 29, 13

Page 32: StatsD Workshop Monitorama 2013

• #statsd on Freenode IRC

[email protected]

• Ask me

Friday, March 29, 13

Page 33: StatsD Workshop Monitorama 2013

Basic setup

• git clone https://github.com/etsy/statsd.git

• curl https://gist.github.com/mrtazz/5270376 > test_config.js

• nc -k -l 2003 > output.log

• node stats.js test_config.js

Friday, March 29, 13

Page 34: StatsD Workshop Monitorama 2013

StatsD workshop @ Monitorama 2013

Daniel SchauenbergSoftware Engineer, Etsy Infrastructure

@mrtazz

Friday, March 29, 13