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
Transcript
34 slides
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
More Decks by Daniel Schauenberg
See All by Daniel Schauenberg
The Road to Success is paved with Small Improvements
mrtazz
4
1.8k
Human Factors and PostMortems
mrtazz
3
920
Deploy, Collaborate and Listen
mrtazz
2
900
Data Driven Monitoring
mrtazz
2
870
Mobile CI at Etsy
mrtazz
2
600
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
870
Development, Deployment and Collaboration at Etsy
mrtazz
9
5.9k
Other Decks in Technology
See All in Technology
「任されビリティ」で引き受けて「よしなりてぃ」に頼らず任せる / Accept tasks with "makasarebility" and hand them over without relying on "yoshinarily"
pauli
0
350
[JAWS Festa 2026]一番いい仕事は、請求書に現れない / jawsfesta2026
sh_fk2
2
510
Datadog の権限統制 〜Org 統合に向けて調べた注意点 / JDDUG-Meetup_24
visional_engineering_and_design
1
110
BALLAS Technology Deck
ballas_inc
0
590
Steering と Hook (チームの決まりを守らせる) | 目指せ Kiro マスター 06
inariku
PRO
2
120
速くなるほど、深く考える AI時代のQAに学ぶ
kobayashiyorimitsu
0
180
自治体AIコンタクトセンター、何をどこに任せる?~Amazon Connect Customer +Amazon Bedrockの実践知~ / 20261107 Satoshi Torano
shift_evolve
PRO
1
140
田んぼの見回りをIoTで減らしたい!水位監視から電池駆動カメラまでの試行錯誤
itosoft
1
160
2026-11-11 Tamachi.sre#7 PaCにインフラリソースの命を救われました。 / PaC saves the infra resource life
masasuzu
0
160
ぼくのClaude Codeの使い方
falken
PRO
4
6.5k
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
16k
Claude Codeで作ったアプリを安全に公開する/Built with Claude Japan 2026
yoshidashingo
0
240
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
350
A designer walks into a library…
pauljervisheath
211
25k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.3k
It's Worth the Effort
3n
188
29k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
520
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
800
Crafting Experiences
bethany
1
440
How to Ace a Technical Interview
jacobian
280
24k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
480
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
630