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
Stupid Graphite Tips
Search
Jason Dixon
November 04, 2013
Technology
4.9k
37
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Stupid Graphite Tips
My Ignite talk from DevOpsDays Portland on November 4, 2013.
Jason Dixon
November 04, 2013
More Decks by Jason Dixon
See All by Jason Dixon
Graphite 1.0-ish
obfuscurity
0
390
Monitorama PDX 2015 - Closing Plenary
obfuscurity
1
470
The State of Open-Source Monitoring
obfuscurity
145
49k
Trending with Purpose
obfuscurity
11
1.4k
Other Decks in Technology
See All in Technology
ロボティクスの技術 / Robotics Technology
ks91
PRO
0
120
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
510
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
260
手塩にかけりゃいいってもんじゃない
ming_ayami
0
620
螺旋型キャリアの生存戦略 / kinoko-conf2026
rakus_dev
1
690
AIはどのように 組織のアジリティを変えるのか?
junki
4
1.1k
AIチャットの改善から見えた、良いAI体験とは / What Constitutes a Good AI Experience: Insights from Improving AI Chat
kubode
0
110
FPGAの開発コンペでZephyrを使ってみた
iotengineer22
0
180
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
160
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
3k
GitHub Copilot app最速の発信の裏側
tomokusaba
1
230
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
320
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
The Spectacular Lies of Maps
axbom
PRO
1
820
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
Fireside Chat
paigeccino
42
4k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Building Applications with DynamoDB
mza
96
7.1k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Designing Experiences People Love
moore
143
24k
Transcript
Stupid Graphite Tips DevOpsDays Portland 2013
What is Graphite? carbon whisper metrics
require 'socket' require ‘time’ conn = TCPSocket.new 'graphite.example.com', 2003 conn.puts
"foo #{value} #{Time.now.to_i}\n" conn.close metric key value timestamp $ echo "test.foo.bar 1 `date +%s`" | nc graphite.example.com 2003 metric key value timestamp Sending metrics to Carbon
Organizing metrics • Prefix with your collector/agent/app source • Keep
test/development stuff in check • Automatically purge test & release metrics • Avoid the urge to include your username
and Tracking deployments drawAsInfinite(color(custom.instances.*.killed,"white")) summarize(sumSeries(group(custom.instances.*.killed)), "1d")
mostDeviant(5, runtime.*.load.1m) Finding the Outliers p.s. Don’t forget about sortByMaxima,
sortByMinima and limit !
Adjusting Rate scale(nonNegativeDerivative(snmp.IF-MIB::ifInOctets.7),0.133333333) doesn’t scale! ... because as soon as
you hit a new resolution, your math is wrong. scaleToSeconds(nonNegativeDerivative(snmp.IF-MIB::ifInOctets.7),1)
Time Shifting sumSeries(mail.hosts.mta-*.messages.in) timeShift(sumSeries(mail.hosts.mta-*.messages.in),"6mon")
Counting metrics sumSeries(offset(scale(collectd.*.load.load.longterm,0),1))
Hybrid Graphs mail.hosts.mta-*.messages.in alpha(stacked(sumSeries(mail.hosts.mta-*.messages.in)),0.6)
Renaming Keys on-the-fly Ever wanted to redefine your metric key
in the middle of a query because the wildcard wasn’t quite in the right spot? aliasSub(hosts.web-01-pdx-prod-example- com.metric,”-(\w+)-prod”, ”.\1.prod”)
Graph Bookmarklet javascript:url=prompt("Enter Url");if (url) {content.Composer.loadMyGraph("temp", decodeURIComponent(url));};
Listing metrics $ curl -s http://graphite/metrics/index.json | json_pp | tail
"graphite-1.processes.ps_state-blocked.value", "graphite-1.processes.ps_state-paging.value", "graphite-1.processes.ps_state-running.value", "graphite-1.processes.ps_state-sleeping.value", "graphite-1.processes.ps_state-stopped.value", "graphite-1.processes.ps_state-zombies.value", "graphite-1.users.users.users", "test.bar", "test.foo" ]
Grokking Whisper $ whisper-info.py foo.wsp maxRetention: 31536000 xFilesFactor: 0.0 aggregationMethod:
average fileSize: 1262932 Archive 0 retention: 86400 secondsPerPoint: 1 points: 86400 size: 1036800 offset: 52 $ whisper-fetch.py foo.wsp | tail 1383585660! None 1383585720! 29.529000 1383585780! 87.016000 1383585840! 33.416000 1383585900! 29.012000 1383585960! 31.164000 1383586020! None 1383586080! 29.702000 1383586140! 29.299000 1383586200! None
Repairing Data $ whisper-fetch.py foo.wsp | grep -v None 1376066700
1.000000 1376066760 226.000000 1376066820 215.000000 1376066880 266.000000 1376066940 237.000000 1376072760 5.000000 1376074560 1.000000 1376075280 2.000000 $ for i in 1376066760 1376066820 1376066880 1376066940; \ do whisper-update.py foo.wsp ${i}:0"; done
Know your Carbon sumSeries(group(carbon.agents.*.updateOperations)) sumSeries(group(carbon.agents.*.metricsReceived)) sumSeries(group(carbon.agents.*.committedPoints)) secondYAxis(sumSeries(group(carbon.agents.*.pointsPerUpdate))) secondYAxis(averageSeries(group(carbon.agents.*.cpuUsage))) secondYAxis(sumSeries(group(carbon.agents.*.creates))) p.s.
Check out @scott_sanders’ collectd-tail examples https://gist.github.com/jssjr/35b592b4852625449c27
Tagged Events $ curl -X POST http://graphite/events/ \ -d '{"what":
"Something Interesting", "tags" : "wtf", "data" : "foo bar"}' events(“wtf”) events(“wtf”,”zomg”) events(“*”)
Dat Spark $ brew install spark $ curl -H 'Accept:
application/json' -s "http://graphite/ render/?target=foo&format=json&from=-30min" | json_pp | grep ',' | grep -v '\]' | grep -v target | spark ▂▂▁▂▂▂▂▂▁▃▁▂▂▂▄▃▂▂█▇▃█▂▃▂▃▁▂▄▂
Scaling dat Carbon Open Spaces, doge. omg multicore hip fanout
replication me much io vintage metrics
Thank You