Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mackerelチームにおけるインフラオーナーシップ / Hatena Pepabo tech conf 4 DevOps Kyoto

Mackerelチームにおけるインフラオーナーシップ / Hatena Pepabo tech conf 4 DevOps Kyoto

Mackerelチームにおけるインフラオーナーシップ

E374ddea34651a9a43de332bfcba64a3?s=128

Ken Hamada

June 23, 2018
Tweet

Transcript

  1. MackerelνʔϜʹ͓͚Δ ΠϯϑϥΦʔφʔγοϓ גࣜձࣾ͸ͯͳ id:itchyny 2018/6/23 ͸ͯͳɾϖύϘٕज़େձ#4

  2. ࣗݾ঺հ גࣜձࣾ͸ͯͳ ΞϓϦέʔγϣϯΤϯδχΞ MackerelνʔϜ ࢛೥໨ ޷͖: Go, Rust, Scala, Haskell,

    Vim ϓϩάϥϜϞάϞά itchyny.hatenablog.com ⅓ా ݈ id:itchyny
  3. ϓϩάϥϜϞάϞά ୅ද࡞: lightline.vim

  4. ʮΠϯϑϥΦʔφʔγοϓʯ

  5. ΠϯϑϥΦʔφʔγοϓ • ։ൃνʔϜ͕ΠϯϑϥͷΦʔφʔγοϓΛ࣋ͭ • ϞχλϦϯάɾϗετ؅ཧɾΩϟύγςΟϓϥϯχϯά
 ։ൃ؀ڥ΍CI؀ڥͷߏஙɾΠϯϑϥߏ੒ͷઃܭ • ΠϯϑϥνʔϜ͸ωοτϫʔΫͳͲͷڞ௨ج൫ʹઐ೦ • DevOpsͷ͋ΓํΛݟ௚ͨ݁͠Ռ

    ৴པੑͱඅ༻ΛαʔϏε։ൃνʔϜ͕੹೚Λ࣋ͭ
  6. ͜Ε·Ͱ • ΠϯϑϥνʔϜ (ԣ۲૊৫) ͕ݸʑͷαʔϏεΛ୲౰ • αʔόʔͷ؅ཧ΍ϞχλϦϯά͸Πϯϑϥϝϯόʔ͕୲౰ • αʔϏεʹΑͬͯٻΊΒΕΔΠϯϑϥ஌͕ࣝ͹Β͹Β •

    Apache + mod_perl + MySQL ΦϯϓϨ ͷαʔϏε͕ଟ਺
 → Scala + PostgreSQL / Go on EC2, ECS, Lambda… • ٻΊΒΕΔ৴པੑ (Մ༻ੑ): ಛʹtoB΍toBtoC
  7. ໰୊఺ • Πϯϑϥϝϯόʔͷ୲౰αʔϏεͷ࢓ࣄ͕ଟ͘ɺ
 ج൫γεςϜͷ؅ཧ΍։ൃ͕͓Ζ͔ͦʹ… • Πϯϑϥϝϯόʔͷ୲౰αʔϏεସ͕͑ࠔ೉ • ো֐ରԠ͸ଞͷΠϯϑϥϝϯόʔʹ͸೉͍͠ • ։ൃνʔϜ͕Մ༻ੑ΍Πϯϑϥඅ༻Λग़࣌͢ʹ


    ΠϯϑϥνʔϜΛר͖ࠐ·ͳ͍ͱ͍͚ͳ͍
  8. ͜Ε͔Β • ։ൃνʔϜ͕αʔόʔ͔Βϛυϧ΢ΣΞͷ؅ཧΛߦ͏ • αʔόʔߏங/؅ཧɾΩϟύγςΟϓϥϯχϯά
 ։ൃ؀ڥɾCI؀ڥߏஙɾϞχλϦϯάɾো֐ରԠ • αʔϏεͷ৴པੑͱඅ༻Λ֤։ൃνʔϜ͕؅ཧ • ΠϯϑϥνʔϜ͸Ծ૝ԽɾωοτϫʔΫج൫ɾOSΛ୲౰

  9. ։ൃνʔϜʹͱͬͯ • Πϯϑϥ஌ࣝΛ͚͍͔ͭͯ͘͠ͳ͍ • αʔόʔΛཱͯΒΕΔΑ͏ʹͳΔ • ద੾ͳ؂ࢹΛઃఆͰ͖ΔΑ͏ʹͳΔ • ো֐ରԠͰ͖ΔΑ͏ʹͳΔ •

    Մ༻ੑΛτϥοΩϯάͰ͖ΔΑ͏ʹͳΔ
  10. ։ൃνʔϜ͸Ͳ͏͢Ε͹ ΠϯϑϥͷΦʔφʔγοϓΛ ࣗ৴Λ΋ͬͯऔΕΔΑ͏ʹͳΔͷ͔

  11. Mackerel mackerel.io

  12. Mackerelͱ͸ • SaaSͷαʔόʔ؅ཧɾ؂ࢹπʔϧ • ͸ͯͳࣾ಺ͷαʔόʔ؅ཧγεςϜΛαʔϏεԽͯ͠ެ։ • Mackerel͸ࡾ୅໨ • Scala +

    Go / PostgreSQL + Redis
  13. ݱࡏͷνʔϜͷମ੍ • ΞϓϦέʔγϣϯΤϯδχΞ਺໊ + σβΠφʔ
 + Director + Producer +

    Sales + CRE • Πϯϑϥϝϯόʔ1ਓ͕νʔϜʹೖ͍ͬͯΔ • ேձ΍νʔϜͷձٞʹ΋ࢀՃ • σεΫ΋ྡ: ίϛϡχέʔγϣϯ͸େࣄ
  14. ೖࣾͨ͠౰࣌ͷࢲ • ΢ΣϒΞϓϦέʔγϣϯͷ࢓૊ΈΛ஌Βͳ͍ • SQLΛ஌Βͳ͍ • LinuxΛ஌Βͳ͍ (ͳ͔ͥMacΛ࢖͍ͬͯΔ) • AWSΛ஌Βͳ͍

    • ίʔυ͸ͪΐͬͱॻ͚Δ (ͳ͔ͥHaskellͱVim͕޷͖)
  15. ඞཁͳ஌ࣝ • ͦ΋ͦ΋αʔόʔͱ͸ɺ؂ࢹͱ͸… • σβΠφʔʹ΋جຊతͳ͜ͱ͸ཧղͯ͠΋Β͏ • LinuxɾWindowsͷγεςϜϝτϦοΫ • ֤छϛυϧ΢ΣΞͷಛ௃΍؂ࢹɾϝτϦοΫɾάϥϑͷݟํ •

    ϚωʔδυαʔϏε • ֤छνϟοτπʔϧͱͷ࿈ܞɹChefɾAnsible • rpm/debϦϙδτϦɾWindows msi
  16. υοάϑʔσΟϯά • MackerelνʔϜ͸࠷ߴͷυοάϑʔσΟϯά͕Ͱ͖Δ • ࡞͍ͬͯΔαʔϏεΛ஌Δ → ࣗ෼ͷαʔϏεΛ؂ࢹ͢Δ • ؂ࢹ͍ͯ͠ͳ͍ͱ͜Ζ͕෼͔Δ →

    ࡞Δ → ؂ࢹΛ࢝ΊΔ • ։ൃΤϯδχΞ͸සൟʹը໘ΛݟΔ • ۀ຿ʹ૊ΈࠐΉ·Ͱ͕ػೳ։ൃ
 ྫ: σϓϩΠͰάϥϑΞϊςʔγϣϯ • ଞνʔϜͷ։ൃΤϯδχΞ΋MackerelΛΑ͘࢖͏
  17. σϓϩΠ • σϓϩΠ୲౰ͷΤϯδχΞΛॱ൪ʹΞαΠϯ • ୲౰ΤϯδχΞ͸μογϡϘʔυΛॱ൪ʹݟ͍ͯ͘ • ීஈͷϝτϦοΫͷ༷ࢠΛ஌Δ܇࿅
 ؂ࢹ͢Δ = ҟৗঢ়ଶΛఆΊΔ

    = ීஈΛ஌Δ • σϓϩΠ͸ΠϯϑϥΛݟΔྑ͍ػձ • σϓϩΠͱ͸ɺͲ͜ʹԿΛͲ͏͢Δ͜ͱͳͷ͔ʁ • σϓϩΠίϚϯυͷཪଆͰԿ͕ى͖͍ͯΔͷ͔ʁ
  18. MackerelνʔϜͷΤϯδχΞ͸ ීஈͷ։ൃΛ͠ͳ͕Β ΠϯϑϥΛֶΜͰ͍Δ ֶ͹͟ΔΛಘͳ͍αʔϏεΛ࡞͍ͬͯΔ

  19. ໰͍߹Θͤͷྫ • MySQL/DockerϓϥάΠϯͰϝτϦοΫ͕औಘͰ͖ͳ͍ • ϒϥ΢βʔͰ͸ݟΕΔͷʹ֎ܗ؂ࢹͰΤϥʔ͕ग़Δ • CPU steal͕100%ʹுΓ෇͍͍ͯΔ • WindowsͰprocess

    queue length͕औΕ͍ͯͳ͍ • loadavg͕7࣌ؒ͝ͱʹ্ঢ͢Δ ֤छϛυϧ΢ΣΞ΍OSɺ֎ܗ؂ࢹͰ͸DNSͷ࢓૊ΈͳͲͷ஌͕ࣝ໰ΘΕΔ
  20. https://mackerel.io/ja/blog/entry/tech/high-loadavg-every-7-hours

  21. αϙʔτ୲౰ • αϙʔτ͔ΒͷௐࠪґཔΛड͚ΔΤϯδχΞΛॱ൪ʹ୲౰ • ຖि୲౰Λճͯ͠શһ͕͋ͨΔ • ෼͔Βͳ͚Ε͹ଞͷਓͱڞʹௐࠪɾ஌ݟͷڞ༗ • ෆ۩߹ͷൃݟ
 मਖ਼͸ผλεΫͱͯ͠issueΛཱͯΔ


    ؆୯ͳ΋ͷ͸͍ͭͰʹ௚͢͜ͱ΋͋Δ
  22. αϙʔτ୲౰Λճ͢͜ͱͰ ஌Βͳ͍ػೳ΍ϛυϧ΢ΣΞΛֶͿ ௐࠪํ๏ɾΠϯϑϥ஌ࣝͷԣల։ loadavgʹ͍ͭͯҟৗʹৄ͘͠ͳͬͨΓ͢Δ

  23. PWG • Performance Working Group • ύϑΥʔϚϯεͷ֬ೝɾى͖ͨো֐ͱରࡦਐḿͷ֬ೝ • ࢀՃऀ͸ΠϯϑϥΤϯδχΞͱ։ൃΤϯδχΞશһ •

    ࢘ձ୲౰Λॱ൪ʹճ͢: ϝϯόʔͷཧղΛਂΊΔ
 ฉ͚ͩ͘ΑΓ΋ɺ࢘ձͱͯ͠આ໌͢Δ͜ͱͰཧղ • άϥϑΛݟΔίʔφʔ
  24. ো֐ରԠৼΓฦΓ • ো֐ͷৼΓฦΓͱ͸ผʹɺରԠͨ͠खॱͳͲΛ֬ೝ • ଐਓੑ: ܦݧଟ͍ΤϯδχΞ͕ҰॠͰ௚ͯ͠͠·͏
 ԿΛࢥͬͯԿΛͲ͏ݟͯͲͷΑ͏ʹ൑அ͔ͨ͠ • ͲͷάϥϑΛݟ͔ͨɺͲͷαʔόʔͷϩάΛݟ͔ͨ •

    ରԠ͠ͳ͔ͬͨਓ͕stagingͰ࣮ࡍʹखॱΛ࠶ݱ • ো֐࣌ͷௐࠪͷͨΊͷ࢓૊Έͮ͘Γ
 ϩά΍؅ཧը໘ͷվળɾμογϡϘʔυ࡞੒ͳͲ ো֐͸ى͖ͯཉ͘͠ͳ͍͕ɺى͖ͨͱ͖͸ଟ͘ͷֶͼΛಘΔ
  25. Մ༻ੑɾίεττϥοΩϯά • Մ༻ੑ: ো֐͝ͱʹه࿥͠ɺPWGͰ֬ೝ • ։ൃνʔϜ͕ظ͝ͱʹ໨ඪΛ࣋ͭ • SLAެ։Λ໨ࢦ͢ • ίετ:

    ΠϯϑϥϝϯόʔͱσΟϨΫλʔ͕֬ೝձ • ։ൃϝϯόʔ΋AWS cost explorerͰ֬ೝͰ͖Δ • Node.js 6.10→8.10 Ͱ Lambdaͷίετ1ׂ࡟ݮ
  26. None
  27. ϚωʔδυαʔϏε • ࣌ܥྻσʔλϕʔε: LambdaɾDynamoDBɾS3 • Πϯϑϥ͸৮Γ΍͘͢ͳ͖͍ͬͯͯΔ • ΩϟύγςΟʔมߋ͸୭Ͱ΋Ͱ͖Δ࣌୅ • ʮ࣌ܥྻσʔλϕʔε஌ݟڞ༗ձʯ

    • ։ൃΤϯδχΞ͸ࣗવͱίετΛݟΔΑ͏ʹͳΔ • Cost ExplorerͰreportΛ੔උ
  28. ίϯςφԽ • deploy / rollback͕ѹ౗తʹָʹͳΔ • ΦʔτεέʔϧΛߟྀͨ͠ίϯςφج൫ • ࣾ಺ͷChefڞ௨ج൫΁ͷґଘΛࣙΊΒΕΔ •

    ϞχλϦϯά΋ؚΊͯࠓͷ՝୊ • MackerelͷίϯςφରԠ։ൃதͰ͢ • Dockerfileͱ͍͏ڞ௨ݴޠɾϛυϧ΢ΣΞͱͷ઀ଓΛએݴతʹߦ͏
  29. ࠷ۙͷMackerelνʔϜͷձ࿩ • DevʮݴͬͯͨϓϥάΠϯͷόά௚ͨ͠ͷͰΞοϓσʔτ͓͍ͯͨ͠ʯ
 OpsʮͲ΋Ͳ΋ʯ • Devʮ͜͜ϝτϦοΫݟ͓͚ͯ͹Αͦ͞͏ͳͷͰ؂ࢹ࡞͓͍ͬͯͨΑʯ
 Opsʮྃղʯ • DevʮલݴΘΕͯͨ৽ػೳ࣮૷ͨ͠Αʙʯ
 Opsʮ΍ͬͨʔศརʙʯ

    • Opsʮstagingͷ΄͛΄͛ΛίϯςφԽ͠·ͨ͠ʯ
 Devʮ͗͢͢͝Δʯ
  30. ·ͱΊ • ΠϯϑϥΛֶͿͷ͸ָ͍͠ • ٕज़ͷਐาͰΠϯϑϥ؅ཧ͸ָʹͳ͖͍ͬͯͯΔ • ௐୡɾεέʔϧΞ΢τɾϩʔϧόοΫ͸APIͰͰ͖Δ࣌୅ • ιϑτ΢ΣΞʹΑͬͯࣗಈԽ͞ΕΔ࣌୅΁ •

    ΠϯϑϥΤϯδχΞ͸ωοτϫʔΫ/OSͷϨΠϠʔʹઐ೦ • ΦϖϨʔγϣϯπʔϧΛ͢͹΍͘࡞ΕΔਓ͸ڧ͍
  31. αʔϏε͸զ͕ࢠ

  32. None