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
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
870
Deploy, Collaborate and Listen
mrtazz
2
860
Data Driven Monitoring
mrtazz
2
840
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
840
Development, Deployment and Collaboration at Etsy
mrtazz
9
5.8k
Other Decks in Technology
See All in Technology
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
19k
20260722_品質と開発生産性の相互作用
magicpod
0
120
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
160
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
110
タクシーアプリ『GO』の実践的データ活用〜位置情報データの収集とStreamlitでの可視化〜
mot_techtalk
2
200
Swift&Xcodeのバージョンアップにまつわる怖かった思い出 / Scary Memories of Swift and Xcode Updates
bitkey
PRO
0
150
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.4k
AI ネイティブな組織に Gemini Enterprise Agent Platform がなぜ必要なのか
asei
1
160
コンポーネント名には何を含めるべきなのか? / what-should-be-included-in-component-names
airrnot1106
0
250
MIRU 2026 チュートリアル
keisuke198619
0
760
OSPN.JPバージョンアップ作業進捗のご報告 / 20260801-osc26kyoto
akkiesoft
0
220
初めてのGitHub Actions / GitHub Actions at First
tooppoo
0
140
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Balancing Empowerment & Direction
lara
6
1.2k
Test your architecture with Archunit
thirion
1
2.3k
Bash Introduction
62gerente
615
220k
Product Roadmaps are Hard
iamctodd
55
12k
A Soul's Torment
seathinner
6
3.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
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