28
Measure everything Ruby Underground, August 2012 @arikfr Tuesday, February 12, 13

Measure Everything

Embed Size (px)

DESCRIPTION

A talk about monitoring using Graphite and StatsD I gave at a local Ruby meetup.

Citation preview

Page 1: Measure Everything

Measure everything

Ruby Underground, August 2012@arikfr

Tuesday, February 12, 13

Page 2: Measure Everything

Today’s plan

• Why measure

• How to measure

• Graphite / StatsD

• Using Graphite/StatsD with Ruby and Rails

Tuesday, February 12, 13

Page 3: Measure Everything

Questions to answer

• How fast is my system?

• Is it faster than last month?

• Did our last deploy affect database performance?

• How much time do we spend calling external web services?

Tuesday, February 12, 13

Page 4: Measure Everything

More questions

• How many errors do we have a day?

• How many failed logins?

• How many successful logins?

• How many orders without house number?

Tuesday, February 12, 13

Page 5: Measure Everything

And more questions!

• How many orders did we have today?

• How many orders did we have today from Android version 2.056?

• How many rejected orders did we have?

• How many rejected orders due to lack of coverage vs. lack of taxis?

Tuesday, February 12, 13

Page 6: Measure Everything

To answer all of this, you need a way to track different numbers.

Tuesday, February 12, 13

Page 7: Measure Everything

So now we know the why.

But how...?

Tuesday, February 12, 13

Page 8: Measure Everything

Tuesday, February 12, 13

Page 9: Measure Everything

But that’s not enough

• Not real time enough

• Hard to control what’s being collected

• Pricey for big deployments

Tuesday, February 12, 13

Page 10: Measure Everything

The Alternative

• Graphite (Whisper, Carbon, Graphite Web)

• StatsD

• CollectD

• (there are other options -- OpenTSDB, Liberato, home grown)

Tuesday, February 12, 13

Page 11: Measure Everything

Benefits

• Easy to install

• Highly scalable

• Practically zero cost to measure anything:

• efficient storage

• UDP packets to send data in

• Ecosystem

Tuesday, February 12, 13

Page 12: Measure Everything

Whisper

• Default settings:

• 6 hours of 10 second data

• 1 week of 1 minute data

• 5 years of 10 minute data

• That’s amounts to ~3.2MB per metric.

• Configurable.

Tuesday, February 12, 13

Page 13: Measure Everything

Types of data

• Counters - number of orders per sec

• Gauges - total orders today

• Timers - time to make an order

• (with additional values, such as: count, mean, 90th percentile, max, min, etc)

Tuesday, February 12, 13

Page 14: Measure Everything

Sending a number to Graphite

• metric number timestamp

• example.ruby.under_ground 20 1346075634

• echo "example.ruby_underground 20 `date +%s`" | nc graphite.yourcorp.com 2003

Tuesday, February 12, 13

Page 15: Measure Everything

Sending a number to StatsD

./statsd-client.sh 'my_metric:100|g'

Tuesday, February 12, 13

Page 16: Measure Everything

Naming Convention

• Whatever makes sense to you, just remember that it’s a tree.

• We use:

• {env}.{metric}.{region}.{hostname}

• You can use globs, when querying:

• app.orders.daily.completed.israel.*

• app.orders.daily.completed.*.*

Tuesday, February 12, 13

Page 17: Measure Everything

Ruby Examples

Tuesday, February 12, 13

Page 18: Measure Everything

$ gem install statsd-ruby(https://github.com/reinh/statsd)

Tuesday, February 12, 13

Page 19: Measure Everything

Track Deployments

Tuesday, February 12, 13

Page 20: Measure Everything

Measure controllers

Tuesday, February 12, 13

Page 21: Measure Everything

Measure Specific stuff

Tuesday, February 12, 13

Page 22: Measure Everything

Getting Data out

Tuesday, February 12, 13

Page 23: Measure Everything

Graphite web

Tuesday, February 12, 13

Page 24: Measure Everything

Tasseo

Tuesday, February 12, 13

Page 25: Measure Everything

Gdash

Tuesday, February 12, 13

Page 26: Measure Everything

Graphene

Tuesday, February 12, 13

Page 27: Measure Everything

Down sides

• Hard to track user analytics

• You can tell how many orders were done today

• You can’t tell (easily) how many unique users did those orders

• The tree of metrics is sometimes annoying

Tuesday, February 12, 13

Page 28: Measure Everything

Questions?

Tuesday, February 12, 13