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
Mackerelチームにおけるインフラオーナーシップ / Hatena Pepabo tec...
Search
Ken Hamada
June 23, 2018
Technology
0
5.7k
Mackerelチームにおけるインフラオーナーシップ / Hatena Pepabo tech conf 4 DevOps Kyoto
Mackerelチームにおけるインフラオーナーシップ
Ken Hamada
June 23, 2018
Tweet
Share
More Decks by Ken Hamada
See All by Ken Hamada
組織と技術の両輪で開発を加速させるkintoneチームの取り組み / JJUG CCC 2022 Fall Cybozu kintone
itchyny
1
2.5k
サーバレスアーキテクチャによる時系列データベースの構築と監視 / Serverlessconf Tokyo 2017
itchyny
18
30k
Other Decks in Technology
See All in Technology
【CEDEC2025】『Shadowverse: Worlds Beyond』二度目のDCG開発でゲームをリデザインする~遊びやすさと競技性の両立~
cygames
PRO
1
290
Google Cloud で学ぶデータエンジニアリング入門 2025年版 #GoogleCloudNext / 20250805
kazaneya
PRO
13
3k
データモデリング通り #2オンライン勉強会 ~方法論の話をしよう~
datayokocho
0
110
Claude Codeは仕様駆動の夢を見ない
gotalab555
15
3.5k
【新卒研修資料】数理最適化 / Mathematical Optimization
brainpadpr
25
11k
✨敗北解法コレクション✨〜Expertだった頃に足りなかった知識と技術〜
nanachi
1
510
Nx × AI によるモノレポ活用 〜コードジェネレーター編〜
puku0x
0
340
Amazon Q と『音楽』-ゲーム音楽もAmazonQで作成してみた感想-
senseofunity129
0
110
AI時代の経営、Bet AI Vision #BetAIDay
layerx
PRO
1
1.7k
みんなのSRE 〜チーム全員でのSRE活動にするための4つの取り組み〜
kakehashi
PRO
2
140
Amazon Qで2Dゲームを作成してみた
siromi
0
100
alecthomas/kong はいいぞ
fujiwara3
6
1.4k
Featured
See All Featured
How GitHub (no longer) Works
holman
314
140k
Documentation Writing (for coders)
carmenintech
73
5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
182
54k
The Invisible Side of Design
smashingmag
301
51k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Building Adaptive Systems
keathley
43
2.7k
We Have a Design System, Now What?
morganepeng
53
7.7k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
Transcript
MackerelνʔϜʹ͓͚Δ ΠϯϑϥΦʔφʔγοϓ גࣜձࣾͯͳ id:itchyny 2018/6/23 ͯͳɾϖύϘٕज़େձ#4
ࣗݾհ גࣜձࣾͯͳ ΞϓϦέʔγϣϯΤϯδχΞ MackerelνʔϜ ࢛ ͖: Go, Rust, Scala, Haskell,
Vim ϓϩάϥϜϞάϞά itchyny.hatenablog.com ⅓ా ݈ id:itchyny
ϓϩάϥϜϞάϞά ද࡞: lightline.vim
ʮΠϯϑϥΦʔφʔγοϓʯ
ΠϯϑϥΦʔφʔγοϓ • ։ൃνʔϜ͕ΠϯϑϥͷΦʔφʔγοϓΛ࣋ͭ • ϞχλϦϯάɾϗετཧɾΩϟύγςΟϓϥϯχϯά ։ൃڥCIڥͷߏஙɾΠϯϑϥߏͷઃܭ • ΠϯϑϥνʔϜωοτϫʔΫͳͲͷڞ௨ج൫ʹઐ೦ • DevOpsͷ͋ΓํΛݟͨ݁͠Ռ
৴པੑͱඅ༻ΛαʔϏε։ൃνʔϜ͕Λ࣋ͭ
͜Ε·Ͱ • ΠϯϑϥνʔϜ (ԣ۲৫) ͕ݸʑͷαʔϏεΛ୲ • αʔόʔͷཧϞχλϦϯάΠϯϑϥϝϯόʔ͕୲ • αʔϏεʹΑͬͯٻΊΒΕΔΠϯϑϥ͕ࣝΒΒ •
Apache + mod_perl + MySQL ΦϯϓϨ ͷαʔϏε͕ଟ → Scala + PostgreSQL / Go on EC2, ECS, Lambda… • ٻΊΒΕΔ৴པੑ (Մ༻ੑ): ಛʹtoBtoBtoC
• Πϯϑϥϝϯόʔͷ୲αʔϏεͷࣄ͕ଟ͘ɺ ج൫γεςϜͷཧ։ൃ͕͓Ζ͔ͦʹ… • Πϯϑϥϝϯόʔͷ୲αʔϏεସ͕͑ࠔ • োରԠଞͷΠϯϑϥϝϯόʔʹ͍͠ • ։ൃνʔϜ͕Մ༻ੑΠϯϑϥඅ༻Λग़࣌͢ʹ
ΠϯϑϥνʔϜΛר͖ࠐ·ͳ͍ͱ͍͚ͳ͍
͜Ε͔Β • ։ൃνʔϜ͕αʔόʔ͔ΒϛυϧΣΞͷཧΛߦ͏ • αʔόʔߏங/ཧɾΩϟύγςΟϓϥϯχϯά ։ൃڥɾCIڥߏஙɾϞχλϦϯάɾোରԠ • αʔϏεͷ৴པੑͱඅ༻Λ֤։ൃνʔϜ͕ཧ • ΠϯϑϥνʔϜԾԽɾωοτϫʔΫج൫ɾOSΛ୲
։ൃνʔϜʹͱͬͯ • ΠϯϑϥࣝΛ͚͍͔ͭͯ͘͠ͳ͍ • αʔόʔΛཱͯΒΕΔΑ͏ʹͳΔ • దͳࢹΛઃఆͰ͖ΔΑ͏ʹͳΔ • োରԠͰ͖ΔΑ͏ʹͳΔ •
Մ༻ੑΛτϥοΩϯάͰ͖ΔΑ͏ʹͳΔ
։ൃνʔϜͲ͏͢Ε ΠϯϑϥͷΦʔφʔγοϓΛ ࣗ৴ΛͬͯऔΕΔΑ͏ʹͳΔͷ͔
Mackerel mackerel.io
Mackerelͱ • SaaSͷαʔόʔཧɾࢹπʔϧ • ͯͳࣾͷαʔόʔཧγεςϜΛαʔϏεԽͯ͠ެ։ • Mackerelࡾ • Scala +
Go / PostgreSQL + Redis
ݱࡏͷνʔϜͷମ੍ • ΞϓϦέʔγϣϯΤϯδχΞ໊ + σβΠφʔ + Director + Producer +
Sales + CRE • Πϯϑϥϝϯόʔ1ਓ͕νʔϜʹೖ͍ͬͯΔ • ேձνʔϜͷձٞʹࢀՃ • σεΫྡ: ίϛϡχέʔγϣϯେࣄ
ೖࣾͨ࣌͠ͷࢲ • ΣϒΞϓϦέʔγϣϯͷΈΛΒͳ͍ • SQLΛΒͳ͍ • LinuxΛΒͳ͍ (ͳ͔ͥMacΛ͍ͬͯΔ) • AWSΛΒͳ͍
• ίʔυͪΐͬͱॻ͚Δ (ͳ͔ͥHaskellͱVim͕͖)
ඞཁͳࣝ • ͦͦαʔόʔͱɺࢹͱ… • σβΠφʔʹجຊతͳ͜ͱཧղͯ͠Β͏ • LinuxɾWindowsͷγεςϜϝτϦοΫ • ֤छϛυϧΣΞͷಛࢹɾϝτϦοΫɾάϥϑͷݟํ •
ϚωʔδυαʔϏε • ֤छνϟοτπʔϧͱͷ࿈ܞɹChefɾAnsible • rpm/debϦϙδτϦɾWindows msi
υοάϑʔσΟϯά • MackerelνʔϜ࠷ߴͷυοάϑʔσΟϯά͕Ͱ͖Δ • ࡞͍ͬͯΔαʔϏεΛΔ → ࣗͷαʔϏεΛࢹ͢Δ • ࢹ͍ͯ͠ͳ͍ͱ͜Ζ͕͔Δ →
࡞Δ → ࢹΛ࢝ΊΔ • ։ൃΤϯδχΞසൟʹը໘ΛݟΔ • ۀʹΈࠐΉ·Ͱ͕ػೳ։ൃ ྫ: σϓϩΠͰάϥϑΞϊςʔγϣϯ • ଞνʔϜͷ։ൃΤϯδχΞMackerelΛΑ͘͏
σϓϩΠ • σϓϩΠ୲ͷΤϯδχΞΛॱ൪ʹΞαΠϯ • ୲ΤϯδχΞμογϡϘʔυΛॱ൪ʹݟ͍ͯ͘ • ීஈͷϝτϦοΫͷ༷ࢠΛΔ܇࿅ ࢹ͢Δ = ҟৗঢ়ଶΛఆΊΔ
= ීஈΛΔ • σϓϩΠΠϯϑϥΛݟΔྑ͍ػձ • σϓϩΠͱɺͲ͜ʹԿΛͲ͏͢Δ͜ͱͳͷ͔ʁ • σϓϩΠίϚϯυͷཪଆͰԿ͕ى͖͍ͯΔͷ͔ʁ
MackerelνʔϜͷΤϯδχΞ ීஈͷ։ൃΛ͠ͳ͕Β ΠϯϑϥΛֶΜͰ͍Δ ֶ͟ΔΛಘͳ͍αʔϏεΛ࡞͍ͬͯΔ
͍߹Θͤͷྫ • MySQL/DockerϓϥάΠϯͰϝτϦοΫ͕औಘͰ͖ͳ͍ • ϒϥβʔͰݟΕΔͷʹ֎ܗࢹͰΤϥʔ͕ग़Δ • CPU steal͕100%ʹுΓ͍͍ͯΔ • WindowsͰprocess
queue length͕औΕ͍ͯͳ͍ • loadavg͕7࣌ؒ͝ͱʹ্ঢ͢Δ ֤छϛυϧΣΞOSɺ֎ܗࢹͰDNSͷΈͳͲͷ͕ࣝΘΕΔ
https://mackerel.io/ja/blog/entry/tech/high-loadavg-every-7-hours
αϙʔτ୲ • αϙʔτ͔ΒͷௐࠪґཔΛड͚ΔΤϯδχΞΛॱ൪ʹ୲ • ຖि୲Λճͯ͠શһ͕͋ͨΔ • ͔Βͳ͚Εଞͷਓͱڞʹௐࠪɾݟͷڞ༗ • ෆ۩߹ͷൃݟ मਖ਼ผλεΫͱͯ͠issueΛཱͯΔ
؆୯ͳͷ͍ͭͰʹ͢͜ͱ͋Δ
αϙʔτ୲Λճ͢͜ͱͰ Βͳ͍ػೳϛυϧΣΞΛֶͿ ௐࠪํ๏ɾΠϯϑϥࣝͷԣల։ loadavgʹ͍ͭͯҟৗʹৄ͘͠ͳͬͨΓ͢Δ
PWG • Performance Working Group • ύϑΥʔϚϯεͷ֬ೝɾى͖ͨোͱରࡦਐḿͷ֬ೝ • ࢀՃऀΠϯϑϥΤϯδχΞͱ։ൃΤϯδχΞશһ •
࢘ձ୲Λॱ൪ʹճ͢: ϝϯόʔͷཧղΛਂΊΔ ฉ͚ͩ͘ΑΓɺ࢘ձͱͯ͠આ໌͢Δ͜ͱͰཧղ • άϥϑΛݟΔίʔφʔ
োରԠৼΓฦΓ • োͷৼΓฦΓͱผʹɺରԠͨ͠खॱͳͲΛ֬ೝ • ଐਓੑ: ܦݧଟ͍ΤϯδχΞ͕ҰॠͰͯ͠͠·͏ ԿΛࢥͬͯԿΛͲ͏ݟͯͲͷΑ͏ʹஅ͔ͨ͠ • ͲͷάϥϑΛݟ͔ͨɺͲͷαʔόʔͷϩάΛݟ͔ͨ •
ରԠ͠ͳ͔ͬͨਓ͕stagingͰ࣮ࡍʹखॱΛ࠶ݱ • ো࣌ͷௐࠪͷͨΊͷΈͮ͘Γ ϩάཧը໘ͷվળɾμογϡϘʔυ࡞ͳͲ োى͖ͯཉ͘͠ͳ͍͕ɺى͖ͨͱ͖ଟ͘ͷֶͼΛಘΔ
Մ༻ੑɾίεττϥοΩϯά • Մ༻ੑ: ো͝ͱʹه͠ɺPWGͰ֬ೝ • ։ൃνʔϜ͕ظ͝ͱʹඪΛ࣋ͭ • SLAެ։Λࢦ͢ • ίετ:
ΠϯϑϥϝϯόʔͱσΟϨΫλʔ͕֬ೝձ • ։ൃϝϯόʔAWS cost explorerͰ֬ೝͰ͖Δ • Node.js 6.10→8.10 Ͱ Lambdaͷίετ1ׂݮ
None
ϚωʔδυαʔϏε • ࣌ܥྻσʔλϕʔε: LambdaɾDynamoDBɾS3 • Πϯϑϥ৮Γ͘͢ͳ͖͍ͬͯͯΔ • ΩϟύγςΟʔมߋ୭ͰͰ͖Δ࣌ • ʮ࣌ܥྻσʔλϕʔεݟڞ༗ձʯ
• ։ൃΤϯδχΞࣗવͱίετΛݟΔΑ͏ʹͳΔ • Cost ExplorerͰreportΛඋ
ίϯςφԽ • deploy / rollback͕ѹతʹָʹͳΔ • ΦʔτεέʔϧΛߟྀͨ͠ίϯςφج൫ • ࣾͷChefڞ௨ج൫ͷґଘΛࣙΊΒΕΔ •
ϞχλϦϯάؚΊͯࠓͷ՝ • MackerelͷίϯςφରԠ։ൃதͰ͢ • Dockerfileͱ͍͏ڞ௨ݴޠɾϛυϧΣΞͱͷଓΛએݴతʹߦ͏
࠷ۙͷMackerelνʔϜͷձ • DevʮݴͬͯͨϓϥάΠϯͷόάͨ͠ͷͰΞοϓσʔτ͓͍ͯͨ͠ʯ OpsʮͲͲʯ • Devʮ͜͜ϝτϦοΫݟ͓͚ͯΑͦ͞͏ͳͷͰࢹ࡞͓͍ͬͯͨΑʯ Opsʮྃղʯ • DevʮલݴΘΕͯͨ৽ػೳ࣮ͨ͠Αʙʯ Opsʮͬͨʔศརʙʯ
• Opsʮstagingͷ΄͛΄͛ΛίϯςφԽ͠·ͨ͠ʯ Devʮ͗͢͢͝Δʯ
·ͱΊ • ΠϯϑϥΛֶͿͷָ͍͠ • ٕज़ͷਐาͰΠϯϑϥཧָʹͳ͖͍ͬͯͯΔ • ௐୡɾεέʔϧΞτɾϩʔϧόοΫAPIͰͰ͖Δ࣌ • ιϑτΣΞʹΑͬͯࣗಈԽ͞ΕΔ࣌ •
ΠϯϑϥΤϯδχΞωοτϫʔΫ/OSͷϨΠϠʔʹઐ೦ • ΦϖϨʔγϣϯπʔϧΛ͘͢࡞ΕΔਓڧ͍
αʔϏεզ͕ࢠ
None