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.6k
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.3k
サーバレスアーキテクチャによる時系列データベースの構築と監視 / Serverlessconf Tokyo 2017
itchyny
18
29k
Other Decks in Technology
See All in Technology
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
140
20241220_S3 tablesの使い方を検証してみた
handy
4
680
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
190
事業貢献を考えるための技術改善の目標設計と改善実績 / Targeted design of technical improvements to consider business contribution and improvement performance
oomatomo
0
150
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
380
【re:Invent 2024 アプデ】 Prompt Routing の紹介
champ
0
160
DevFest 2024 Incheon / Songdo - Compose UI 조합 심화
wisemuji
0
140
TypeScript開発にモジュラーモノリスを持ち込む
sansantech
PRO
2
300
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
1.1k
多様なメトリックとシステムの健全性維持
masaaki_k
0
110
新機能VPCリソースエンドポイント機能検証から得られた考察
duelist2020jp
0
230
AWS re:Invent 2024 ふりかえり勉強会
yhana
0
390
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
427
64k
Building an army of robots
kneath
302
44k
Code Review Best Practice
trishagee
65
17k
Writing Fast Ruby
sferik
628
61k
Designing for Performance
lara
604
68k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Done Done
chrislema
182
16k
Building Adaptive Systems
keathley
38
2.3k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
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