Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
StatsD Workshop Monitorama 2013
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Daniel Schauenberg
March 29, 2013
Technology
2.1k
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
900
Deploy, Collaborate and Listen
mrtazz
2
880
Data Driven Monitoring
mrtazz
2
860
Mobile CI at Etsy
mrtazz
2
580
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
850
Development, Deployment and Collaboration at Etsy
mrtazz
9
5.8k
Other Decks in Technology
See All in Technology
20260929_AmazonGuardDutyの検出通知メールにAWS DevOpsAgentの調査結果を追加する
yhana
1
410
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
270
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
370
CI/CDではもう遅い - 人とAIが迂回しないDevSecOps Verify基盤の再設計 -
kintotechdev
1
620
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
710
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
1
150
AWS FinOps Agent 結局何が得意なの?
siromi
0
230
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
2
280
10年欲しかった音楽管理アプリを、AIと一緒に作りはじめた
judau
1
200
DORA_Metrics.pdf
wagnerfusca
1
140
spanner-autoscalerに学ぶ CRD設計パターン 〜自動化と緊急時対応を両立する Kubernetesコントローラーの作り方〜
tkuchiki
0
220
Meet AgentCore Identity Consent Portal
hironobuiga
2
150
Featured
See All Featured
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
580
Leo the Paperboy
mayatellez
10
2.3k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Facilitating Awesome Meetings
lara
57
7.2k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.9k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Crafting Experiences
bethany
1
360
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
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