Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
StatsD Workshop Monitorama 2013
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Daniel Schauenberg
March 29, 2013
Technology
2k
11
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
StatsD Workshop Monitorama 2013
Daniel Schauenberg
March 29, 2013
More Decks by Daniel Schauenberg
See All by Daniel Schauenberg
The Road to Success is paved with Small Improvements
mrtazz
4
1.7k
Human Factors and PostMortems
mrtazz
3
850
Deploy, Collaborate and Listen
mrtazz
2
840
Data Driven Monitoring
mrtazz
2
830
Mobile CI at Etsy
mrtazz
2
570
Development, Deployment & Collaboration at Etsy
mrtazz
5
15k
A Whirlwind Tour of Etsy's Monitoring Stack
mrtazz
6
2.8k
Co-Workers As Customers: Lessons from Airbnb & Etsy
mrtazz
7
820
Development, Deployment and Collaboration at Etsy
mrtazz
9
5.8k
Other Decks in Technology
See All in Technology
200個のGitHubリポジトリを横断調査したかった
icck
0
130
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
200
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
270
【2026年版】 ベクトル検索䛸 Embedding最前線
mocobeta
2
240
Disciplined Vibes: Scaling AI-Assisted Engineering
sheharyar
0
150
やさしいA2A入門
minorun365
PRO
12
1.9k
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
2
600
入門!AWS Blocks
ysuzuki
1
140
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.1k
人材育成分科会.pdf
_awache
4
270
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
4
680
失敗を資産に変えるClaude Code
shinyasaita
0
680
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
YesSQL, Process and Tooling at Scale
rocio
174
15k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Leo the Paperboy
mayatellez
7
1.8k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
Speed Design
sergeychernyshev
33
1.8k
A Tale of Four Properties
chriscoyier
163
24k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
330
Transcript
StatsD workshop @ Monitorama 2013 Daniel Schauenberg Software Engineer, Etsy
Infrastructure @mrtazz Friday, March 29, 13
• What is this StatsD? • Metrics types • Backends
• Graphite and operating StatsD • Send all the metrics • Write all the backends Friday, March 29, 13
Friday, March 29, 13
Receiver loop Metrics processing module Backends Friday, March 29, 13
legacyNamespace: false Friday, March 29, 13
Counters foo.bar:1|c stats.counters.foo.bar.rate stats.counters.foo.bar.count Friday, March 29, 13
Gauges foo.gar:30|g foo.gar:-5|g foo.gar:+5|g stats.gauges.foo.gar Friday, March 29, 13
Sets foo.sar:30|s foo.sar:50|s stats.sets.foo.sar Friday, March 29, 13
Timers foo.tar:30|ms stats.timers.foo.tar.mean_90 stats.timers.foo.tar.std stats.timers.foo.tar.sum_90 Friday, March 29, 13
Histograms histogram: [{metric: "foo.tar", bins: [10,20,30,50]}] stats.timers.foo.tar.histogram.bin_10 stats.timers.foo.tar.histogram.bin_20 Friday, March
29, 13
Friday, March 29, 13
Pluggable backends function 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
Management Interface > telnet 127.0.0.1 8126 > stats > counters
> delcounters > help Friday, March 29, 13
Graphite + StatsD • default backend • whisper archives should
match flush interval • sum aggregation for raw counters • docs/graphite.md Friday, March 29, 13
The single-thread dilemma Friday, March 29, 13
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
Sampling • default sampling of 0.1 on all metrics •
most sent keys (log file) are sampled 0.01 Friday, March 29, 13
Quis monitoret ipsos monitores? Friday, March 29, 13
Friday, March 29, 13
Friday, March 29, 13
Friday, March 29, 13
Friday, March 29, 13
Let’s do this Friday, March 29, 13
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
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
Some actual stats Disk 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
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
Histograms • You should have timers now • Configure histograms
for them • { graphite: { histograms: [] } Friday, March 29, 13
Level up! Friday, March 29, 13
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
Hackathon ideas • Metrics path validation in backend • Pluggable
receiver frontends • Forked backends • Configurable timer metrics Friday, March 29, 13
• #statsd on Freenode IRC •
[email protected]
• Ask me
Friday, March 29, 13
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
StatsD workshop @ Monitorama 2013 Daniel Schauenberg Software Engineer, Etsy
Infrastructure @mrtazz Friday, March 29, 13