$30 off During Our Annual Pro Sale. View Details »

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

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

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

Ken Hamada

June 23, 2018
Tweet

More Decks by Ken Hamada

Other Decks in Technology

Transcript

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

    View Slide

  2. ࣗݾ঺հ
    גࣜձࣾ͸ͯͳ ΞϓϦέʔγϣϯΤϯδχΞ
    MackerelνʔϜ ࢛೥໨
    ޷͖: Go, Rust, Scala, Haskell, Vim
    ϓϩάϥϜϞάϞά itchyny.hatenablog.com
    ⅓ా ݈ id:itchyny

    View Slide

  3. ϓϩάϥϜϞάϞά
    ୅ද࡞: lightline.vim

    View Slide

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

    View Slide

  5. ΠϯϑϥΦʔφʔγοϓ
    • ։ൃνʔϜ͕ΠϯϑϥͷΦʔφʔγοϓΛ࣋ͭ

    • ϞχλϦϯάɾϗετ؅ཧɾΩϟύγςΟϓϥϯχϯά

    ։ൃ؀ڥ΍CI؀ڥͷߏஙɾΠϯϑϥߏ੒ͷઃܭ

    • ΠϯϑϥνʔϜ͸ωοτϫʔΫͳͲͷڞ௨ج൫ʹઐ೦

    • DevOpsͷ͋ΓํΛݟ௚ͨ݁͠Ռ
    ৴པੑͱඅ༻ΛαʔϏε։ൃνʔϜ͕੹೚Λ࣋ͭ

    View Slide

  6. ͜Ε·Ͱ
    • ΠϯϑϥνʔϜ (ԣ۲૊৫) ͕ݸʑͷαʔϏεΛ୲౰

    • αʔόʔͷ؅ཧ΍ϞχλϦϯά͸Πϯϑϥϝϯόʔ͕୲౰

    • αʔϏεʹΑͬͯٻΊΒΕΔΠϯϑϥ஌͕ࣝ͹Β͹Β

    • Apache + mod_perl + MySQL ΦϯϓϨ ͷαʔϏε͕ଟ਺

    → Scala + PostgreSQL / Go on EC2, ECS, Lambda…

    • ٻΊΒΕΔ৴པੑ (Մ༻ੑ): ಛʹtoB΍toBtoC

    View Slide

  7. ໰୊఺
    • Πϯϑϥϝϯόʔͷ୲౰αʔϏεͷ࢓ࣄ͕ଟ͘ɺ

    ج൫γεςϜͷ؅ཧ΍։ൃ͕͓Ζ͔ͦʹ…

    • Πϯϑϥϝϯόʔͷ୲౰αʔϏεସ͕͑ࠔ೉

    • ো֐ରԠ͸ଞͷΠϯϑϥϝϯόʔʹ͸೉͍͠

    • ։ൃνʔϜ͕Մ༻ੑ΍Πϯϑϥඅ༻Λग़࣌͢ʹ

    ΠϯϑϥνʔϜΛר͖ࠐ·ͳ͍ͱ͍͚ͳ͍

    View Slide

  8. ͜Ε͔Β
    • ։ൃνʔϜ͕αʔόʔ͔Βϛυϧ΢ΣΞͷ؅ཧΛߦ͏

    • αʔόʔߏங/؅ཧɾΩϟύγςΟϓϥϯχϯά

    ։ൃ؀ڥɾCI؀ڥߏஙɾϞχλϦϯάɾো֐ରԠ

    • αʔϏεͷ৴པੑͱඅ༻Λ֤։ൃνʔϜ͕؅ཧ

    • ΠϯϑϥνʔϜ͸Ծ૝ԽɾωοτϫʔΫج൫ɾOSΛ୲౰

    View Slide

  9. ։ൃνʔϜʹͱͬͯ
    • Πϯϑϥ஌ࣝΛ͚͍͔ͭͯ͘͠ͳ͍

    • αʔόʔΛཱͯΒΕΔΑ͏ʹͳΔ

    • ద੾ͳ؂ࢹΛઃఆͰ͖ΔΑ͏ʹͳΔ

    • ো֐ରԠͰ͖ΔΑ͏ʹͳΔ

    • Մ༻ੑΛτϥοΩϯάͰ͖ΔΑ͏ʹͳΔ

    View Slide

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

    View Slide

  11. Mackerel
    mackerel.io

    View Slide

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

    View Slide

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

    + Director + Producer + Sales + CRE

    • Πϯϑϥϝϯόʔ1ਓ͕νʔϜʹೖ͍ͬͯΔ

    • ேձ΍νʔϜͷձٞʹ΋ࢀՃ

    • σεΫ΋ྡ: ίϛϡχέʔγϣϯ͸େࣄ

    View Slide

  14. ೖࣾͨ͠౰࣌ͷࢲ
    • ΢ΣϒΞϓϦέʔγϣϯͷ࢓૊ΈΛ஌Βͳ͍

    • SQLΛ஌Βͳ͍

    • LinuxΛ஌Βͳ͍ (ͳ͔ͥMacΛ࢖͍ͬͯΔ)

    • AWSΛ஌Βͳ͍

    • ίʔυ͸ͪΐͬͱॻ͚Δ (ͳ͔ͥHaskellͱVim͕޷͖)

    View Slide

  15. ඞཁͳ஌ࣝ
    • ͦ΋ͦ΋αʔόʔͱ͸ɺ؂ࢹͱ͸…

    • σβΠφʔʹ΋جຊతͳ͜ͱ͸ཧղͯ͠΋Β͏

    • LinuxɾWindowsͷγεςϜϝτϦοΫ

    • ֤छϛυϧ΢ΣΞͷಛ௃΍؂ࢹɾϝτϦοΫɾάϥϑͷݟํ

    • ϚωʔδυαʔϏε

    • ֤छνϟοτπʔϧͱͷ࿈ܞɹChefɾAnsible

    • rpm/debϦϙδτϦɾWindows msi

    View Slide

  16. υοάϑʔσΟϯά
    • MackerelνʔϜ͸࠷ߴͷυοάϑʔσΟϯά͕Ͱ͖Δ

    • ࡞͍ͬͯΔαʔϏεΛ஌Δ → ࣗ෼ͷαʔϏεΛ؂ࢹ͢Δ

    • ؂ࢹ͍ͯ͠ͳ͍ͱ͜Ζ͕෼͔Δ → ࡞Δ → ؂ࢹΛ࢝ΊΔ

    • ։ൃΤϯδχΞ͸සൟʹը໘ΛݟΔ

    • ۀ຿ʹ૊ΈࠐΉ·Ͱ͕ػೳ։ൃ

    ྫ: σϓϩΠͰάϥϑΞϊςʔγϣϯ

    • ଞνʔϜͷ։ൃΤϯδχΞ΋MackerelΛΑ͘࢖͏

    View Slide

  17. σϓϩΠ
    • σϓϩΠ୲౰ͷΤϯδχΞΛॱ൪ʹΞαΠϯ

    • ୲౰ΤϯδχΞ͸μογϡϘʔυΛॱ൪ʹݟ͍ͯ͘

    • ීஈͷϝτϦοΫͷ༷ࢠΛ஌Δ܇࿅

    ؂ࢹ͢Δ = ҟৗঢ়ଶΛఆΊΔ = ීஈΛ஌Δ

    • σϓϩΠ͸ΠϯϑϥΛݟΔྑ͍ػձ

    • σϓϩΠͱ͸ɺͲ͜ʹԿΛͲ͏͢Δ͜ͱͳͷ͔ʁ

    • σϓϩΠίϚϯυͷཪଆͰԿ͕ى͖͍ͯΔͷ͔ʁ

    View Slide

  18. MackerelνʔϜͷΤϯδχΞ͸
    ීஈͷ։ൃΛ͠ͳ͕Β
    ΠϯϑϥΛֶΜͰ͍Δ
    ֶ͹͟ΔΛಘͳ͍αʔϏεΛ࡞͍ͬͯΔ

    View Slide

  19. ໰͍߹Θͤͷྫ
    • MySQL/DockerϓϥάΠϯͰϝτϦοΫ͕औಘͰ͖ͳ͍

    • ϒϥ΢βʔͰ͸ݟΕΔͷʹ֎ܗ؂ࢹͰΤϥʔ͕ग़Δ

    • CPU steal͕100%ʹுΓ෇͍͍ͯΔ

    • WindowsͰprocess queue length͕औΕ͍ͯͳ͍

    • loadavg͕7࣌ؒ͝ͱʹ্ঢ͢Δ
    ֤छϛυϧ΢ΣΞ΍OSɺ֎ܗ؂ࢹͰ͸DNSͷ࢓૊ΈͳͲͷ஌͕ࣝ໰ΘΕΔ

    View Slide

  20. https://mackerel.io/ja/blog/entry/tech/high-loadavg-every-7-hours

    View Slide

  21. αϙʔτ୲౰
    • αϙʔτ͔ΒͷௐࠪґཔΛड͚ΔΤϯδχΞΛॱ൪ʹ୲౰

    • ຖि୲౰Λճͯ͠શһ͕͋ͨΔ

    • ෼͔Βͳ͚Ε͹ଞͷਓͱڞʹௐࠪɾ஌ݟͷڞ༗

    • ෆ۩߹ͷൃݟ

    मਖ਼͸ผλεΫͱͯ͠issueΛཱͯΔ

    ؆୯ͳ΋ͷ͸͍ͭͰʹ௚͢͜ͱ΋͋Δ

    View Slide

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

    View Slide

  23. PWG
    • Performance Working Group

    • ύϑΥʔϚϯεͷ֬ೝɾى͖ͨো֐ͱରࡦਐḿͷ֬ೝ

    • ࢀՃऀ͸ΠϯϑϥΤϯδχΞͱ։ൃΤϯδχΞશһ

    • ࢘ձ୲౰Λॱ൪ʹճ͢: ϝϯόʔͷཧղΛਂΊΔ

    ฉ͚ͩ͘ΑΓ΋ɺ࢘ձͱͯ͠આ໌͢Δ͜ͱͰཧղ

    • άϥϑΛݟΔίʔφʔ

    View Slide

  24. ো֐ରԠৼΓฦΓ
    • ো֐ͷৼΓฦΓͱ͸ผʹɺରԠͨ͠खॱͳͲΛ֬ೝ

    • ଐਓੑ: ܦݧଟ͍ΤϯδχΞ͕ҰॠͰ௚ͯ͠͠·͏

    ԿΛࢥͬͯԿΛͲ͏ݟͯͲͷΑ͏ʹ൑அ͔ͨ͠

    • ͲͷάϥϑΛݟ͔ͨɺͲͷαʔόʔͷϩάΛݟ͔ͨ

    • ରԠ͠ͳ͔ͬͨਓ͕stagingͰ࣮ࡍʹखॱΛ࠶ݱ

    • ো֐࣌ͷௐࠪͷͨΊͷ࢓૊Έͮ͘Γ

    ϩά΍؅ཧը໘ͷվળɾμογϡϘʔυ࡞੒ͳͲ
    ো֐͸ى͖ͯཉ͘͠ͳ͍͕ɺى͖ͨͱ͖͸ଟ͘ͷֶͼΛಘΔ

    View Slide

  25. Մ༻ੑɾίεττϥοΩϯά
    • Մ༻ੑ: ো֐͝ͱʹه࿥͠ɺPWGͰ֬ೝ

    • ։ൃνʔϜ͕ظ͝ͱʹ໨ඪΛ࣋ͭ

    • SLAެ։Λ໨ࢦ͢

    • ίετ: ΠϯϑϥϝϯόʔͱσΟϨΫλʔ͕֬ೝձ

    • ։ൃϝϯόʔ΋AWS cost explorerͰ֬ೝͰ͖Δ

    • Node.js 6.10→8.10 Ͱ Lambdaͷίετ1ׂ࡟ݮ

    View Slide

  26. View Slide

  27. ϚωʔδυαʔϏε
    • ࣌ܥྻσʔλϕʔε: LambdaɾDynamoDBɾS3

    • Πϯϑϥ͸৮Γ΍͘͢ͳ͖͍ͬͯͯΔ

    • ΩϟύγςΟʔมߋ͸୭Ͱ΋Ͱ͖Δ࣌୅

    • ʮ࣌ܥྻσʔλϕʔε஌ݟڞ༗ձʯ

    • ։ൃΤϯδχΞ͸ࣗવͱίετΛݟΔΑ͏ʹͳΔ

    • Cost ExplorerͰreportΛ੔උ

    View Slide

  28. ίϯςφԽ
    • deploy / rollback͕ѹ౗తʹָʹͳΔ

    • ΦʔτεέʔϧΛߟྀͨ͠ίϯςφج൫

    • ࣾ಺ͷChefڞ௨ج൫΁ͷґଘΛࣙΊΒΕΔ

    • ϞχλϦϯά΋ؚΊͯࠓͷ՝୊

    • MackerelͷίϯςφରԠ։ൃதͰ͢

    • Dockerfileͱ͍͏ڞ௨ݴޠɾϛυϧ΢ΣΞͱͷ઀ଓΛએݴతʹߦ͏

    View Slide

  29. ࠷ۙͷMackerelνʔϜͷձ࿩
    • DevʮݴͬͯͨϓϥάΠϯͷόά௚ͨ͠ͷͰΞοϓσʔτ͓͍ͯͨ͠ʯ

    OpsʮͲ΋Ͳ΋ʯ

    • Devʮ͜͜ϝτϦοΫݟ͓͚ͯ͹Αͦ͞͏ͳͷͰ؂ࢹ࡞͓͍ͬͯͨΑʯ

    Opsʮྃղʯ

    • DevʮલݴΘΕͯͨ৽ػೳ࣮૷ͨ͠Αʙʯ

    Opsʮ΍ͬͨʔศརʙʯ

    • Opsʮstagingͷ΄͛΄͛ΛίϯςφԽ͠·ͨ͠ʯ

    Devʮ͗͢͢͝Δʯ

    View Slide

  30. ·ͱΊ
    • ΠϯϑϥΛֶͿͷ͸ָ͍͠

    • ٕज़ͷਐาͰΠϯϑϥ؅ཧ͸ָʹͳ͖͍ͬͯͯΔ

    • ௐୡɾεέʔϧΞ΢τɾϩʔϧόοΫ͸APIͰͰ͖Δ࣌୅

    • ιϑτ΢ΣΞʹΑͬͯࣗಈԽ͞ΕΔ࣌୅΁

    • ΠϯϑϥΤϯδχΞ͸ωοτϫʔΫ/OSͷϨΠϠʔʹઐ೦

    • ΦϖϨʔγϣϯπʔϧΛ͢͹΍͘࡞ΕΔਓ͸ڧ͍

    View Slide

  31. αʔϏε͸զ͕ࢠ

    View Slide

  32. View Slide