PHPConference 2021での発表資料です。
PHPΞϓϦέʔγϣϯͩͬͯ ϞχλϦϯά͍ͨ͠ɻPHPConference 2021αΠϘζגࣜձࣾɹਿࢁ ༞Ұ@oogFranz#phpcon2021 #track3 Discord Channel: #track3-2-a-php-monitor
View Slide
Whoami• ਿࢁ ༞Ұ @oogFranz• αΠϘζ7ΤϯδχΞ• େاۀ͚άϧʔϓΣΞGaroon(Ψϧʔϯ) ࡞ͬͯΔ• ෳۀδϟζϛϡʔδγϟϯ@MASHݭָஂ
αΠϘζ Garoon• େاۀ͚ͷάϧʔϓΣΞ• ੜ࢈ੑɾνʔϜϫʔΫ্ͷࢧԉ• ύοέʔδ൛ͱΫϥυ൛͕͋Δ
We're sorry for...
We're sorry for...• োʹͯ͝໎Λ͓͔͚ͨ͠Έͳ͞·ɺ͝ΊΜͳ͍͞• ࢹɾରࡦɾௐࠪɾମ੍Λʑվળ• վળ·ͩ·ͩಓ• αΠϘζͱGaroonΛ͘ΑΖ͓͘͠ئ͍͠·͢• ͜ͷൃදͷάϥϑίʔυɺ෦ใΛؚ·ͳ͍Α͏ʹ͢ΔͨΊɺ ·ͨઆ໌ͷͨΊʹɺ࣮ࡍͷͷͱҰ෦ҟͳΔ͕͋Γ·͢ɻ
cybozu.comͷαϒυϝΠϯmash.cybozu.combluegrass.cybozu.combanana.cybozu.commonopockle.cybozu.com
cybozu.comͷαϒυϝΠϯmash.cybozu.combluegrass.cybozu.combanana.cybozu.commonopockle.cybozu.comϢʔβʔ͝ͱʹαϒυϝΠϯΛ͚ΒΕΔ
cybozu.comͷߏ• ΞϓϦέʔγϣϯΛෳͷαʔόʔ(VM)Ͱಈ͔͍ͯ͠Δ ʢΞϓϦέʔγϣϯɾσʔλϕʔεɾϑΝΠϧɾetc.ʣ• Ϛϧνςφϯτͷߏ• ෳͷαʔόʔͷηοτͰෳͷυϝΠϯΛಈ͔͍ͯ͠Δ
cybozu.comͷαϒυϝΠϯ9mash.cybozu.combluegrass.cybozu.combanana.cybozu.commonopockle.cybozu.com/HJOY͕֤αΠϘζʹϦόʔεϓϩΩγ͍ͯ͠Δ
cybozu.comͷαϒυϝΠϯmash.cybozu.combluegrass.cybozu.combanana.cybozu.commonopockle.cybozu.comোൃੜʂ
cybozu.comͷαϒυϝΠϯmash.cybozu.combluegrass.cybozu.combanana.cybozu.commonopockle.cybozu.comোൃੜʂো͕ൃੜ͢ΔͱͲ͏ͳΔʁ
Ϣʔβʔ͔Βి͕͘Δ
Ϣʔβʔ͔ΒిΛ͍ͨͩ͘·ͰΤϯυϢʔβʔཧऀΧελϚʔαϙʔτ ։ൃνʔϜαΠϘζϢʔβʔاۀোൃੜʂ
Ϣʔβʔ͔ΒిΛ͍ͨͩ͘·ͰΤϯυϢʔβʔཧऀΧελϚʔαϙʔτ ։ൃνʔϜαΠϘζϢʔβʔاۀΤϯυϢʔβʔཧऀʹ͓͍߹ΘͤΛ͢Δ
Ϣʔβʔ͔ΒిΛ͍ͨͩ͘·ͰΤϯυϢʔβʔཧऀΧελϚʔαϙʔτ ։ൃνʔϜαΠϘζϢʔβʔاۀཧऀαϙʔτʹ͓͍߹ΘͤΛ͢Δ
Ϣʔβʔ͔ΒిΛ͍ͨͩ͘·ͰΤϯυϢʔβʔཧऀΧελϚʔαϙʔτ ։ൃνʔϜαΠϘζϢʔβʔاۀαϙʔτ։ൃνʔϜʹΤεΧ͢Δ
ిͰোʹؾ͕ͭ͘·Ͱʹ• ΤϯυϢʔβʔ࣌ؒΛ͓͍ͯ͏Ұࢼͦ͏ͱߟ͑Δ͔͠Εͳ͍• ཧऀͨ͘͞ΜͷΤϯυϢʔβʔ͔Βͷ͍߹ΘͤΛ·ͱΊͯ͘Ε͍ͯΔ͔͠Εͳ͍• ཧऀࣗࣾଆͷͰͳ͍͔֬ೝ͔ͯ͠Β αϙʔτʹ͍߹ΘͤΑ͏ͱߟ͑Δ͔͠Εͳ͍• αϙʔτ࠶ݱͰ͖Δෆ۩߹͔Λௐࠪ͢Δ͕͔͔࣌ؒΔ• αϙʔτطଘͷෆ۩߹Ͱͳ͍͔Λௐࠪ͢Δ͕͔͔࣌ؒΔ• etc.
ిͰোʹؾ͕ͭ͘·Ͱʹ• ΤϯυϢʔβʔ࣌ؒΛ͓͍ͯ͏Ұࢼͦ͏ͱߟ͑Δ͔͠Εͳ͍• ཧऀͨ͘͞ΜͷΤϯυϢʔβʔ͔Βͷ͍߹ΘͤΛ·ͱΊͯ͘Ε͍ͯΔ͔͠Εͳ͍• ཧऀࣗࣾଆͷͰͳ͍͔֬ೝ͔ͯ͠Β αϙʔτʹ͍߹ΘͤΑ͏ͱߟ͑Δ͔͠Εͳ͍• αϙʔτ࠶ݱͰ͖Δෆ۩߹͔Λௐࠪ͢Δ͕͔͔࣌ؒΔ• αϙʔτطଘͷෆ۩߹Ͱͳ͍͔Λௐࠪ͢Δ͕͔͔࣌ؒΔ• etc. ։ൃνʔϜ͕োʹؾ͕ͭ͘·ͰʹλΠϜϥά͕ൃੜ͢Δ
োʹؾ͕ͭ͘ͷ͕ΕΕ• ରԠΕΔ• ෮چ·Ͱͷ࣌ؒԆͼΔ• ಉ͡োʹͨΔϢʔβʔ͕૿͑Δ• ͍߹Θͤͦͷ૿͑Δ• ॳΊʹোʹ໘ͨ͠ϢʔβʔͣͬͱαʔϏε͕ར༻Ͱ͖ͳ͍
োʹؾ͕ͭ͘ͷ͕ΕΕ• ରԠΕΔ• ෮چ·Ͱͷ࣌ؒԆͼΔ• ಉ͡োʹͨΔϢʔβʔ͕૿͑Δ• ͍߹Θͤͦͷ૿͑Δ• ॳΊʹোʹ໘ͨ͠ϢʔβʔͣͬͱαʔϏε͕ར༻Ͱ͖ͳ͍ࣄޙରԠͰϢʔβʔʹ໎Λ͔͚ͯ͠·͏
োʹؾ͕ͭ͘ͷ͕ΕΕ• ରԠΕΔ• ෮چ·Ͱͷ࣌ؒԆͼΔ• ಉ͡োʹͨΔϢʔβʔ͕૿͑Δ• ͍߹Θͤͦͷ૿͑Δ• ॳΊʹোʹ໘ͨ͠ϢʔβʔͣͬͱαʔϏε͕ར༻Ͱ͖ͳ͍αʔϏεΛࢹͯ͠ɺোʹઌʹૣ͘ؾ͕ͭ͜͏
ͦͦোͱʁ
ϢʔβʔઢͰͷোͷྨ• ར༻Ͱ͖ͳ͍ൣғ• ͳʹ͔ͭ͑ͳ͍• ಛఆͷػೳͷΈ• ಛఆͷૢ࡞ͷΈ• ಛఆͷ࣌ؒଳͷΈ• ར༻Ͱ͖ͳ͍ঢ়گ• ϨεϙϯελΠϜ͕͍• Τϥʔ͕ฦͬͯ͘Δ• εϧʔϓοτ͕Ͱͳ͍• ఆͨ͠ಈ࡞͕ฦͬͯ͜ͳ͍
։ൃઢͰͷোͷྨ• ൃੜൣғ• શαʔϏε• ಛఆαʔόʔ• ಛఆυϝΠϯ• ಛఆϢʔβʔ• ൃੜݪҼ• ϋʔυΣΞোʢߴෛՙɾαʔόμϯʣ• ιϑτΣΞোʢෆ۩߹ɾ༷ɾఆ֎ͷར༻ʣ• σʔλىҼͷো• ࡞ۀϛε
োͱҰޱʹݴͬͯ• Ͳͷঢ়ଶ͕োʹͳΔ͔αʔϏεʹΑͬͯҟͳΔ• ϞχλʔɾϩάɾϝτϦΫεͷݱΕํҟͳΔ
োͱҰޱʹݴͬͯ• Ͳͷঢ়ଶ͕োʹͳΔ͔αʔϏεʹΑͬͯҟͳΔ• ϞχλʔɾϩάɾϝτϦΫεͷݱΕํҟͳΔݕ͍ͨ͠োʹ߹ΘͤͯࢹΛ࢝ΊΑ͏
SLO (Service Level Objective)• cybozu.comʹՔಇ99.99%ͱ͍͏SLO͕͋Δɻ• ͔͠͠ͳ͕ΒɺGaroonϨϕϧͰSLOͳ͔ͬͨ• ʮGaroon͕͍ʯͱ͍͏͓͍߹Θ͕ͤ͋ͬͯɺ োͳͷ͔ͷஅ͕͙͢ʹͰ͖ͳ͍ɻ• SREαϙʔτɺӦۀͱ͍ͬͨଞͷνʔϜͱɺ Ͳͷ͘Β͍ٸ͍ͰରԠ͖͔͢ɺͷೝ͕ࣝἧ͑ΒΕͳ͍https://www.cybozu.com/jp/infrastructure/slo.html
ʮຖே࢝ۀޙʹϝʔϧΛ։͜͏ͱ͢ΔͱɺҰ෦ͷࣾһ͚ͩ ΊͪΌͪ͘Ό͘ͳΔͷ͚ͩͲʯྫ͑͜Μͳ͓͍߹Θͤ
ʮຖே࢝ۀޙʹϝʔϧΛ։͜͏ͱ͢ΔͱɺҰ෦ͷࣾһ͚ͩ ΊͪΌͪ͘Ό͘ͳΔͷ͚ͩͲʯྫ͑͜Μͳ͓͍߹Θͤಛఆͷ࣌ؒଳͷΈ
ʮຖே࢝ۀޙʹϝʔϧΛ։͜͏ͱ͢ΔͱɺҰ෦ͷࣾһ͚ͩ ΊͪΌͪ͘Ό͘ͳΔͷ͚ͩͲʯྫ͑͜Μͳ͓͍߹Θͤಛఆͷ࣌ؒଳͷΈ ಛఆͷૢ࡞ͷΈ
ʮຖே࢝ۀޙʹϝʔϧΛ։͜͏ͱ͢ΔͱɺҰ෦ͷࣾһ͚ͩ ΊͪΌͪ͘Ό͘ͳΔͷ͚ͩͲʯಛఆͷ࣌ؒଳͷΈ ಛఆͷૢ࡞ͷΈ ಛఆͷϢʔβʔͷΈྫ͑͜Μͳ͓͍߹Θͤ
ಛఆͷૢ࡞ͷΈಛఆͷ࣌ؒଳͷΈʮຖே࢝ۀޙʹϝʔϧΛ։͜͏ͱ͢ΔͱɺҰ෦ͷࣾһ͚ͩ ΊͪΌͪ͘Ό͘ͳΔͷ͚ͩͲʯಛఆͷϢʔβʔͷΈϨεϙϯελΠϜ͕͍ྫ͑͜Μͳ͓͍߹Θͤ
ಛఆͷૢ࡞ͷΈಛఆͷ࣌ؒଳͷΈʮຖே࢝ۀޙʹϝʔϧΛ։͜͏ͱ͢ΔͱɺҰ෦ͷࣾһ͚ͩ ΊͪΌͪ͘Ό͘ͳΔͷ͚ͩͲʯಛఆͷϢʔβʔͷΈϨεϙϯελΠϜ͕͍ྫ͑͜Μͳ͓͍߹ΘͤΞΫηεϩάͰผͰ͖ͦ͏
cybozu.comͷΞΫηεϩά• ϩάͷղੳʹࢄΫΤϦΤϯδϯͷPresto Λ• UIͰΫΤϦΛ࣮ߦ͢ΔͨΊ Redash Λར༻͍ͯ͠ΔαΠϘζͷϩάج൫ 2018൛ΑΓ https://blog.cybozu.io/entry/2018/03/19/080000
োൃੜ࣌ͷαʔόʔ͝ͱͷ ϨεϙϯελΠϜͷਪҠΛΈΔ
server 11server 24server 41server 59server 13server 21server 32server 17server 12server 98োൃੜ࣌ͷαʔόʔ͝ͱͷ ϨεϙϯελΠϜͷਪҠΛΈΔ
server 11server 24server 41server 59server 13server 21server 32server 17server 12server 98োൃੜ࣌ͷαʔόʔ͝ͱͷ ϨεϙϯελΠϜͷਪҠΛΈΔোͩʂ
• σʔλΛঢॱʹฒͨͱ͖ʹɺશମͷN ˋͷҐஔʹ͋Δ• ֎ΕΛແࢹͯ͠େ෦ͷϢʔβʔʹͲ͏͔ͩͬͨΛݟΔͷʹ͍͍ͯΔ• Presto ʹύʔηϯλΠϧͷ֓ࢉΛૉૣ͘ٻΊΔ͕ؔ͋ΔύʔηϯλΠϧapprox_percentile(response_time, 0.95)
ύʔηϯλΠϧΛͲ͜ʹઃఆ͢Δ͔ʁ• োΛݕ͢Δ͚ͩͳΒߴ͍ͷ΄͏͕ɺݕ͍͢͠• γεςϜ͕݈શʹಈ࡞͍ͯ͠Δ͜ͱΛΓ͍ͨͷͰ͋Ε͍ͷํ͕ద͍ͯ͠Δ͜ͱ͋Δ• ࠓͷGaroonͰ99%λΠϧͰ30ඵɺ95ˋλΠϧͰ4ඵɺ85%λΠϧͰ2ඵɺͱ͍͏Α͏ʹઃఆ͍ͯ͠Δ
୯७ͳᮢͰোΛΈ͚ͭΒΕΔ͔ʁ• ୯७ʹᮢΛ͑ͨͱ͜Ζ͔ΒোΛݕ͠Α͏ͱ͢Δͱɺِཅੑ͕ଟ͘ͳΔ• ूܭൣғ͕ͤ·͍ͱগͷΞΫηεʹҾͬுΒΕͯ͠·͏• ͘ͳΓ͍͢ΞΫηεଘࡏ͢Δ
ूܭൣғ• 95%λΠϧͰूܭൣғʹ20ΞΫηε͔͠ͳ͚Εɺ1൪͍ΞΫηεͷ͕༻͍ΒΕΔ• ूܭൣғ͕ڱ͍ͱɺগͳ͍ΞΫηεʹҾͬுΒΕΔ• ΞΫηε͕গͳ͍߹ͦͦແࢹ͢Δͷ͋Γ
Ͳͷ࣌ؒΠϯυ෯Ͱूܭ͢Δ͔ʁ• ͍Πϯυ෯Ͱूܭ͢Δɿ• ͘͢োΛݕͰ͖Δ• ॠஅͷোݕͰ͖Δ• গͳ͍ΞΫηεʹҾͬுΒΕ͍͢• ͍Πϯυ෯Ͱूܭ͢Δɿ• োݕ࣌ؒʹϥά͕ͰΔ• ॠஅͷোΛݕͰ͖ͳ͘ͳΔ• গͳ͍ΞΫηεʹӨڹ͞Εͳ͘ͳΔ
ूܭൣғ• αʔϏεશମ• αʔόʔ͝ͱ• υϝΠϯ͝ͱ• Ϣʔβʔ͝ͱ
ूܭൣғ• αʔϏεશମ• αʔόʔ͝ͱ• υϝΠϯ͝ͱ• Ϣʔβʔ͝ͱখ͍͞ൣғͰͷো͕ ݕ͠ʹ͍͘খ͍͞ൣғͰͷো͕ ݕՄೳϊΠζ͕ଟ͘ͳΔϊΠζ͕গͳ͘ͳΔ
͘ͳΓ͍͢ΞΫηε• ͯ͘ͷͳ͍ΞΫηε͋Δ• ϑΝΠϧΞοϓϩʔυɾμϯϩʔυ• APIͰͷҰׅऔಘ• CSVॻ͖ग़͠• etc...
͘ͳΓ͍͢ΞΫηε• ͯ͘ͷͳ͍ΞΫηε͋Δ• ϑΝΠϧΞοϓϩʔυɾμϯϩʔυ• APIͰͷҰׅऔಘ• CSVॻ͖ग़͠• etc...ੑ࣭͝ͱʹผʑʹࢹ͢Δඞཁ͕͋Δ
োΛͣ͞ݕͰ͖Δ͔ʁ• ϨεϙϯελΠϜ͋͘·Ͱɻ• ݕ͍ͨ͠ͷϢʔβʔʹෆརӹͳঢ়گ͕ൃੜ͍ͯ͠ͳ͍͔Ͳ͏͔• ϢʔβʔͷͨΊʹͳΔஅج४͕ඞཁ
Apple Watch• ߴ৺ഥɾ৺ഥɾෆنଇͳ৺ഥΛ௨ͯ͘͠ΕΔ• ৺ࡉಈʹΑΔෆنଇͳ৺ഥΛૣظʹݟ͚ͭΒΕΔ͜ͱ͕ظͰ͖Δhttps://support.apple.com/ja-jp/HT208931
Apple Watch• ߴ৺ഥɾ৺ഥɾෆنଇͳ৺ഥΛ௨ͯ͘͠ΕΔ• ৺ࡉಈʹΑΔෆنଇͳ৺ഥΛૣظʹݟ͚ͭΒΕΔ͜ͱ͕ظͰ͖Δhttps://support.apple.com/ja-jp/HT208931োݕʹ͓͍ͯɺશͳݕͳ͍ͱ೦಄ʹஔ͘ඞཁ͋Δ
োީิΛهఆظతʹ3FEBTIͰΫΤϦΛ࣮ߦᮢΛӽ͑ͨΞΫηεΛ োީิͱͯ͠ه
RedashͷRefresh Schedule• Redash ͷΫΤϦΛఆظతʹ
Garoon PerformanceΞϓϦ
Garoon PerformanceΞϓϦͲͷαʔόʔͰͲͷ͘Β͍Քಇঢ়گ͕ѱԽ͍ͯ͠Δ͔͕Θ͔Δ
·ͱΊ• αʔόʔϨϕϧͰͳ͘ΞϓϦέʔγϣϯϨϕϧͰࢹΛ͡ΊΑ͏• SLOϢʔβʔͷͨΊʹཱͯΔ• ࢹ͢Δൣғ͗ͣ͢ɾڱ͗ͣ͢ߦ͓͏• োσʔλΛͱʹٞΛ͠Α͏
ΤϥʔΛݕ• ϦϦʔεޙʹ৽ͨͳΤϥʔ͕ൃੜ͢Δέʔε͕ଟൃ• Garoon PHPΤϥʔ͕͋Δͱɺ༧ظͤ͵Τϥʔͱ͢Δ• σʔλෆ߹ͳͲͰɺ༧ظͤ͵ΤϥʔΛશʹͳ͘͢ͷࠔ9
ΤϥʔͷൃੜΛϩάʹه• Τϥʔൃੜ࣌ Header ʹ Τϥʔ൪߸Λه• Nginx ͰΞΫηεϩάʹు͘Α͏ʹ͢Δ• RedashͰͷղੳ͕ՄೳʹͳΔ9
৽ͨͳΤϥʔΛݕ9ఆظతʹΫΤϦΛ࣮ߦ͍··Ͱݕͨ͜͠ͱͷͳ͍ Τϥʔ͕͋ͬͨΒLJOUPOFʹొ