Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

͜Ε·Ͱ • ΠϯϑϥνʔϜ (ԣ۲૊৫) ͕ݸʑͷαʔϏεΛ୲౰ • αʔόʔͷ؅ཧ΍ϞχλϦϯά͸Πϯϑϥϝϯόʔ͕୲౰ • αʔϏεʹΑͬͯٻΊΒΕΔΠϯϑϥ஌͕ࣝ͹Β͹Β • Apache + mod_perl + MySQL ΦϯϓϨ ͷαʔϏε͕ଟ਺
 → Scala + PostgreSQL / Go on EC2, ECS, Lambda… • ٻΊΒΕΔ৴པੑ (Մ༻ੑ): ಛʹtoB΍toBtoC

Slide 7

Slide 7 text

໰୊఺ • Πϯϑϥϝϯόʔͷ୲౰αʔϏεͷ࢓ࣄ͕ଟ͘ɺ
 ج൫γεςϜͷ؅ཧ΍։ൃ͕͓Ζ͔ͦʹ… • Πϯϑϥϝϯόʔͷ୲౰αʔϏεସ͕͑ࠔ೉ • ো֐ରԠ͸ଞͷΠϯϑϥϝϯόʔʹ͸೉͍͠ • ։ൃνʔϜ͕Մ༻ੑ΍Πϯϑϥඅ༻Λग़࣌͢ʹ
 ΠϯϑϥνʔϜΛר͖ࠐ·ͳ͍ͱ͍͚ͳ͍

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Mackerel mackerel.io

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

ݱࡏͷνʔϜͷମ੍ • ΞϓϦέʔγϣϯΤϯδχΞ਺໊ + σβΠφʔ
 + Director + Producer + Sales + CRE • Πϯϑϥϝϯόʔ1ਓ͕νʔϜʹೖ͍ͬͯΔ • ேձ΍νʔϜͷձٞʹ΋ࢀՃ • σεΫ΋ྡ: ίϛϡχέʔγϣϯ͸େࣄ

Slide 14

Slide 14 text

ೖࣾͨ͠౰࣌ͷࢲ • ΢ΣϒΞϓϦέʔγϣϯͷ࢓૊ΈΛ஌Βͳ͍ • SQLΛ஌Βͳ͍ • LinuxΛ஌Βͳ͍ (ͳ͔ͥMacΛ࢖͍ͬͯΔ) • AWSΛ஌Βͳ͍ • ίʔυ͸ͪΐͬͱॻ͚Δ (ͳ͔ͥHaskellͱVim͕޷͖)

Slide 15

Slide 15 text

ඞཁͳ஌ࣝ • ͦ΋ͦ΋αʔόʔͱ͸ɺ؂ࢹͱ͸… • σβΠφʔʹ΋جຊతͳ͜ͱ͸ཧղͯ͠΋Β͏ • LinuxɾWindowsͷγεςϜϝτϦοΫ • ֤छϛυϧ΢ΣΞͷಛ௃΍؂ࢹɾϝτϦοΫɾάϥϑͷݟํ • ϚωʔδυαʔϏε • ֤छνϟοτπʔϧͱͷ࿈ܞɹChefɾAnsible • rpm/debϦϙδτϦɾWindows msi

Slide 16

Slide 16 text

υοάϑʔσΟϯά • MackerelνʔϜ͸࠷ߴͷυοάϑʔσΟϯά͕Ͱ͖Δ • ࡞͍ͬͯΔαʔϏεΛ஌Δ → ࣗ෼ͷαʔϏεΛ؂ࢹ͢Δ • ؂ࢹ͍ͯ͠ͳ͍ͱ͜Ζ͕෼͔Δ → ࡞Δ → ؂ࢹΛ࢝ΊΔ • ։ൃΤϯδχΞ͸සൟʹը໘ΛݟΔ • ۀ຿ʹ૊ΈࠐΉ·Ͱ͕ػೳ։ൃ
 ྫ: σϓϩΠͰάϥϑΞϊςʔγϣϯ • ଞνʔϜͷ։ൃΤϯδχΞ΋MackerelΛΑ͘࢖͏

Slide 17

Slide 17 text

σϓϩΠ • σϓϩΠ୲౰ͷΤϯδχΞΛॱ൪ʹΞαΠϯ • ୲౰ΤϯδχΞ͸μογϡϘʔυΛॱ൪ʹݟ͍ͯ͘ • ීஈͷϝτϦοΫͷ༷ࢠΛ஌Δ܇࿅
 ؂ࢹ͢Δ = ҟৗঢ়ଶΛఆΊΔ = ීஈΛ஌Δ • σϓϩΠ͸ΠϯϑϥΛݟΔྑ͍ػձ • σϓϩΠͱ͸ɺͲ͜ʹԿΛͲ͏͢Δ͜ͱͳͷ͔ʁ • σϓϩΠίϚϯυͷཪଆͰԿ͕ى͖͍ͯΔͷ͔ʁ

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

໰͍߹Θͤͷྫ • MySQL/DockerϓϥάΠϯͰϝτϦοΫ͕औಘͰ͖ͳ͍ • ϒϥ΢βʔͰ͸ݟΕΔͷʹ֎ܗ؂ࢹͰΤϥʔ͕ग़Δ • CPU steal͕100%ʹுΓ෇͍͍ͯΔ • WindowsͰprocess queue length͕औΕ͍ͯͳ͍ • loadavg͕7࣌ؒ͝ͱʹ্ঢ͢Δ ֤छϛυϧ΢ΣΞ΍OSɺ֎ܗ؂ࢹͰ͸DNSͷ࢓૊ΈͳͲͷ஌͕ࣝ໰ΘΕΔ

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

PWG • Performance Working Group • ύϑΥʔϚϯεͷ֬ೝɾى͖ͨো֐ͱରࡦਐḿͷ֬ೝ • ࢀՃऀ͸ΠϯϑϥΤϯδχΞͱ։ൃΤϯδχΞશһ • ࢘ձ୲౰Λॱ൪ʹճ͢: ϝϯόʔͷཧղΛਂΊΔ
 ฉ͚ͩ͘ΑΓ΋ɺ࢘ձͱͯ͠આ໌͢Δ͜ͱͰཧղ • άϥϑΛݟΔίʔφʔ

Slide 24

Slide 24 text

ো֐ରԠৼΓฦΓ • ো֐ͷৼΓฦΓͱ͸ผʹɺରԠͨ͠खॱͳͲΛ֬ೝ • ଐਓੑ: ܦݧଟ͍ΤϯδχΞ͕ҰॠͰ௚ͯ͠͠·͏
 ԿΛࢥͬͯԿΛͲ͏ݟͯͲͷΑ͏ʹ൑அ͔ͨ͠ • ͲͷάϥϑΛݟ͔ͨɺͲͷαʔόʔͷϩάΛݟ͔ͨ • ରԠ͠ͳ͔ͬͨਓ͕stagingͰ࣮ࡍʹखॱΛ࠶ݱ • ো֐࣌ͷௐࠪͷͨΊͷ࢓૊Έͮ͘Γ
 ϩά΍؅ཧը໘ͷվળɾμογϡϘʔυ࡞੒ͳͲ ো֐͸ى͖ͯཉ͘͠ͳ͍͕ɺى͖ͨͱ͖͸ଟ͘ͷֶͼΛಘΔ

Slide 25

Slide 25 text

Մ༻ੑɾίεττϥοΩϯά • Մ༻ੑ: ো֐͝ͱʹه࿥͠ɺPWGͰ֬ೝ • ։ൃνʔϜ͕ظ͝ͱʹ໨ඪΛ࣋ͭ • SLAެ։Λ໨ࢦ͢ • ίετ: ΠϯϑϥϝϯόʔͱσΟϨΫλʔ͕֬ೝձ • ։ൃϝϯόʔ΋AWS cost explorerͰ֬ೝͰ͖Δ • Node.js 6.10→8.10 Ͱ Lambdaͷίετ1ׂ࡟ݮ

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

ϚωʔδυαʔϏε • ࣌ܥྻσʔλϕʔε: LambdaɾDynamoDBɾS3 • Πϯϑϥ͸৮Γ΍͘͢ͳ͖͍ͬͯͯΔ • ΩϟύγςΟʔมߋ͸୭Ͱ΋Ͱ͖Δ࣌୅ • ʮ࣌ܥྻσʔλϕʔε஌ݟڞ༗ձʯ • ։ൃΤϯδχΞ͸ࣗવͱίετΛݟΔΑ͏ʹͳΔ • Cost ExplorerͰreportΛ੔උ

Slide 28

Slide 28 text

ίϯςφԽ • deploy / rollback͕ѹ౗తʹָʹͳΔ • ΦʔτεέʔϧΛߟྀͨ͠ίϯςφج൫ • ࣾ಺ͷChefڞ௨ج൫΁ͷґଘΛࣙΊΒΕΔ • ϞχλϦϯά΋ؚΊͯࠓͷ՝୊ • MackerelͷίϯςφରԠ։ൃதͰ͢ • Dockerfileͱ͍͏ڞ௨ݴޠɾϛυϧ΢ΣΞͱͷ઀ଓΛએݴతʹߦ͏

Slide 29

Slide 29 text

࠷ۙͷMackerelνʔϜͷձ࿩ • DevʮݴͬͯͨϓϥάΠϯͷόά௚ͨ͠ͷͰΞοϓσʔτ͓͍ͯͨ͠ʯ
 OpsʮͲ΋Ͳ΋ʯ • Devʮ͜͜ϝτϦοΫݟ͓͚ͯ͹Αͦ͞͏ͳͷͰ؂ࢹ࡞͓͍ͬͯͨΑʯ
 Opsʮྃղʯ • DevʮલݴΘΕͯͨ৽ػೳ࣮૷ͨ͠Αʙʯ
 Opsʮ΍ͬͨʔศརʙʯ • Opsʮstagingͷ΄͛΄͛ΛίϯςφԽ͠·ͨ͠ʯ
 Devʮ͗͢͢͝Δʯ

Slide 30

Slide 30 text

·ͱΊ • ΠϯϑϥΛֶͿͷ͸ָ͍͠ • ٕज़ͷਐาͰΠϯϑϥ؅ཧ͸ָʹͳ͖͍ͬͯͯΔ • ௐୡɾεέʔϧΞ΢τɾϩʔϧόοΫ͸APIͰͰ͖Δ࣌୅ • ιϑτ΢ΣΞʹΑͬͯࣗಈԽ͞ΕΔ࣌୅΁ • ΠϯϑϥΤϯδχΞ͸ωοτϫʔΫ/OSͷϨΠϠʔʹઐ೦ • ΦϖϨʔγϣϯπʔϧΛ͢͹΍͘࡞ΕΔਓ͸ڧ͍

Slide 31

Slide 31 text

αʔϏε͸զ͕ࢠ

Slide 32

Slide 32 text

No content