Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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.8k
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.6k
サーバレスアーキテクチャによる時系列データベースの構築と監視 / Serverlessconf Tokyo 2017
itchyny
18
30k
Other Decks in Technology
See All in Technology
Symfony AI in Action
el_stoffel
2
370
eBPFとwaruiBPF
sat
PRO
2
960
法人支出管理領域におけるソフトウェアアーキテクチャに基づいたテスト戦略の実践
ogugu9
1
110
原理から解き明かす AIと人間の成長 - Progate BAR
teba_eleven
2
300
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
980
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
0
640
モバイルゲーム開発におけるエージェント技術活用への試行錯誤 ~開発効率化へのアプローチの紹介と未来に向けた展望~
qualiarts
0
280
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
21k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
なぜ使われないのか?──定量×定性で見極める本当のボトルネック
kakehashi
PRO
1
760
MAP-7thplaceSolution
yukichi0403
2
250
私のRails開発環境
yahonda
0
180
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Side Projects
sachag
455
43k
How STYLIGHT went responsive
nonsquared
100
5.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Typedesign – Prime Four
hannesfritz
42
2.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Done Done
chrislema
186
16k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
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