Slide 1

Slide 1 text

ΑΓUXʹ͍ۙSLIɾSLOͷӡ ༻ʹΑΔՄ༻ੑͷ࠶ઃܭ Ӭ໺ Ұഅ

Slide 2

Slide 2 text

ࣗݾ঺հ ● 2019/4ʙ λοϓϧʹiOSΤϯδχΞͱͯ͠ δϣΠϯ ● 2021೥ΑΓSREνʔϜʹϞόΠϧΤϯδχ Ξͱͯ͠ॴଐ ● ݱࡏ͸αʔϏεͷ৴པੑΛߴΊΔϛογϣ ϯʹऔΓ૊ΜͰ͍·͢ Ӭ໺ Ұഅ

Slide 3

Slide 3 text

λοϓϧͷαʔϏεʹ͍ͭͯ https://tapple.me/ 2014೥5݄ʹϦϦʔεͨ͠ࠃ಺࠷େن໛ͷϚονϯάΞϓϦͰ͢ɻ1,000छҎ্ͷσʔτϓϥϯ͔Β૬ख Λืूͯ͠ϚονϯάͰ͖Δʮ͓Ͱ͔͚ػೳʯΛఏڙ͠ɺ೥ऩɾ৬ۀͳͲͷ৚͚݅ͩͰͳ͘ɺझຯΛ͖ͬ ͔͚ʹࣗ෼Β͘͠աͤ͝Δύʔτφʔͱग़ձ͑Δͷ͕ಛ௃Ͱɺ20୅ͷஉঁΛத৺ʹࢧ࣋Λड͚͍ͯ·͢ɻ

Slide 4

Slide 4 text

● SREνʔϜʹϞ バ ΠϧΤϯ ジ χΞ(iOSɺAndroid֤1ਓ) が ઐଐ で ॴଐ͢Δܗ ● ΑΓϢʔβʔʹ͍ۙ෦෼ͰͷܭଌɺBFFͷਪਐͱ͍ͬͨόοΫΤϯυSRE͚ͩͰ͸खΛ৳͹ͮ͠Β ͍෦෼ʹ΋ΞδϦςΟߴ͘औΓ૊ΊΔΑ͏ʹ͢Δ໨త ● Πϯϑϥ΍όοΫΤϯυͷઐ໳ੑͷ֫ಘ΋ SREνʔϜͷMobileΤϯδχΞʹ͍ͭͯ

Slide 5

Slide 5 text

ࠓճͷൃද಺༰ SLI / SLOΛϞόΠϧΞϓϦέʔγϣϯଆͰܭଌ͞ΕΔࢦඪΛ΋ͱʹ࠶ઃܭ͠ɺΑΓUXʹ͍ۙࢦඪΛ໨ࢦ ͢औΓ૊Έͷ঺հ ● ৴པੑΛճ෮ͤ͞ΔͨΊͷΞΫγϣϯ΍ɺΠϯγσϯτ΁ͷରॲΛఆྔతʹߦ͑ΔΑ͏ʹ ● ৴པੑΛఆྔతʹ೺ѲͰ͖Δ͜ͱͰͷ҆৺ײ ● ࣄۀ൑அ΍༏ઌ౓ͷίϛϡχέʔγϣϯʹ͓͚Δڞ௨ݴޠʹ

Slide 6

Slide 6 text

ैདྷͷSLI/SLOͷӡ༻

Slide 7

Slide 7 text

όοΫΤϯυ ● APIαʔόʔ, BFFαʔόʔͦΕͧΕͷϨΠςϯγΛSLIͱͯ͠ར༻ ● ϞχλϦϯάɺΞϥʔτڞʹDataDogͰ؅ཧ ● ҧ൓࣌΍ɺΤϥʔόδΣοτΛஶ͘͠ফඅ͢Δ৔߹͸ଈ࣌ো֐ରԠ ैདྷͷSLI/SLOͷӡ༻ — όοΫΤϯυ — https://developers.cyberagent.co.jp/blog/archives/20354/

Slide 8

Slide 8 text

ΫϥΠΞϯτ ΫϥΠΞϯτଆͰ͸ಠࣗͷSLIΛӡ༻ ● Ϋϥογϡ཰ɺύʔεΤϥʔ਺ɺϑϨʔϜϨʔτ ैདྷͷSLI/SLOͷӡ༻ — ΫϥΠΞϯτ —

Slide 9

Slide 9 text

● Firebase Performance, CrashlyticsͷϩάΛར༻͠ɺϕϩγςΟΞϥʔτΛར༻ ● Data PortalͰμογϡϘʔυ؅ཧ ● ҧ൓࣌͸Өڹͷൣғɺػೳͷॏཁ౓ʹԠͯ͡ΞΫγϣϯΛܾఆ 
 ैདྷͷSLI/SLOͷӡ༻ — ΫϥΠΞϯτ — ΠϯύΫτ ΞΫγϣϯ High ࢪࡦΛͱΊͯͰ΋νʔϜશମͰՄೳͳݶΓϦιʔεΛͭ͗ࠐΈɺ ϗοτϑΟοΫε΋ݕ౼ Middle ୲౰ͷΤϯδχΞΛΞαΠϯ্ͨ͠Ͱɺ࣍ճϦϦʔεͰඞͣରԠɻ ඞཁͰ͋Ε͹ࢪࡦͷख΋ͱΊΔ Low ୲౰ͷΤϯδχΞΛΞαΠϯ্ͨ͠Ͱɺ ։ൃϦιʔε͕ۭ͖࣍ୈదٓରԠ͢Δ

Slide 10

Slide 10 text

SLO͕αʔϏεͷՄ༻ੑͷ൑அ࣠ʹͳ͍ͬͯͳ͍ 
 
 
 1. emergencyϨϕϧͷΞϥʔτ͕ൃՐ 2. ΤϯδχΞ͕֤ࣗӨڹൣғʢػೳɺϢʔβʔ਺ʣௐࠪ 3. ΞΫγϣϯܾఆʢ͓஌ΒͤɺTwitterࠂ஌ɺ޿ࠂఀࢭɺϝϯςΠϯʣ 
 
 
 1. emergencyϨϕϧͷΞϥʔτ͕ൃՐ 2. SLI/SLOμογϡϘʔυͰӨڹൣғ֬ೝ 3. ӨڹͷͰ͍ͯΔSLIɺΤϥʔόδΣοτͷফඅ͔Β࣍ͷΞΫγϣϯΛܾఆ ैདྷͷSLI/SLOͷӡ༻ — ՝୊ᶃ — ຊདྷͷཧ૝ ݱࡏͷӡ༻

Slide 11

Slide 11 text

όοΫΤϯυɺΫϥΠΞϯτʹดͨ͡ࢦඪͦΕͧΕͷΈͰ͸Մ༻ੑΛอূͰ͖ͳ͍ 
 
 αʔόʔͷSLO͕ຬͨ͞Ε͍ͯͯ΋ɺ ● ૬खͷϝοηʔδ͕ݟΕ͍ͯͳ͍ 
 → ΫϥΠΞϯτଆͰͷύʔεΤϥʔ͕ݪҼͰϨεϙϯεΛड৴Ͱ͖ͯͳ͍ ● ৽نొ࿥Ͱ͖ͳ͍ 
 → ֎෦SNSଆͰো֐ൃੜɺΦϯϘʔσΟϯάϑϩʔ͕ແݶϧʔϓ 
 
 
 ● ϝοηʔδը໘Λ։͍ͨϢʔβʔͷ○%͕ϝοηʔδͷӾཡʹ੒ޭ͍ͯ͠Δঢ়ଶ͔Θ͔Δ ● ৽نొ࿥Λ։࢝ͨ͠Ϣʔβʔͷ○%͕৽نొ࿥ʹ੒ޭ͍ͯ͠Δ͔Θ͔Δ ैདྷͷSLI/SLOͷӡ༻ — ՝୊ᶄ — ຊདྷͷཧ૝ ݱࡏͷӡ༻

Slide 12

Slide 12 text

໨ࢦ͢ཧ૝ঢ়ଶ ● Ϣʔβʔͷظ଴͢ΔUXΛΧόʔ͢Δࢦඪઃఆ 
 ● SLI / SLOͷҧ൓ʹΑΔϢʔβʔӨڹ೺ѲΛ༰қʹ 
 ● ϏδωεɺΫϥΠΞϯτɺαʔόʔؒͰαʔϏεঢ়ଶͷڞ௨ݴޠΛ࣋ͭ

Slide 13

Slide 13 text

ΑΓUXʹ͍ۙSLIɾSLOͷઃܭ

Slide 14

Slide 14 text

Ϣʔβʔͷظ଴͢ΔUXΛΧόʔ͢ΔSLIઃఆ ϝϯόʔ͔ΒʮαʔϏεͷՄ༻ੑʯͷٵ্͍͛ ● औΓ͍ͨࢦඪɺఆٛɺܭଌํ๏ɺѱԽͨ͠৔߹ʹଛͳΘΕΔUXΛώΞϦϯά ● ϑΥʔΧε͢ΔࢦඪɺίΞͳମݧΛ࢈ΜͰ͍ΔUXΛܾఆ͢Δ ϚΠΫϩαʔϏε౳ͷυϝΠϯϞσϧͱ߹கͤ͞Δ

Slide 15

Slide 15 text

ϓϥοτϑΥʔϜͷఏڙ͢Δࢦඪͷ࠾༻ Apple, Google͕σΟϕϩούʔʹఏڙ͢ΔSLI ● ϓϥοτϑΥʔϜଆͷߟ͑Δྑ͍ΞϓϦͷఆٛ ● ΞϓϦετΞ΍OSϨϕϧͰӨڹ͕͋Δ͜ͱ΋ ○ ASOʢApp Store Optimizationʣ ○ ༏ઌͯ͠ΞϯΠϯετʔϧΛଅ͞ΕΔ ○ ΞϓϦͷόοΫάϥ΢ϯυͰͷੜଘ࣌ؒ ● λοϓϧͰ͸ԼهͷࢦඪΛSLIͱͯ͠࠾༻ ○ ΞϓϦαΠζ ○ શମΫϥογϡ཰ʢANRʣ ○ ىಈ࣌ؒ https://developers.cyberagent.co.jp/blog/archives/20354/

Slide 16

Slide 16 text

SLIҧ൓Λ࠶ݱͨ͠ΞϓϦΛ࢖ͬͨSLOܾΊ ● աڈͷΠϯγσϯτ࣌ͷࢦඪ΍ɺࣄલώΞϦϯά͔Βɺ͖͍͠஋ʹ͋ͨΓΛ͚ͭΔ 
 ● σόοάػೳͰৄࡉͳ͖͍͠஋Λௐ੔ՄೳͳΞϓϦΛ༻ҙ͠ɺ৮Γͳ͕Βٞ࿦

Slide 17

Slide 17 text

࠶ఆٛͨ͠SLI όοΫΤϯυʢܧଓʣ ● ϨΠςϯγʔ 
 ΫϥΠΞϯτʢʹϓϥοτϑΥʔϜࢦඪʣ ● ىಈ࣌ؒɺશମΫϥογϡ཰ɺΞϓϦαΠζ 
 ίΞػೳʢʹػೳ͝ͱͷՄ༻ੑʣ ● ϩάΠϯɺ৽نొ࿥ɺΧʔυϑϦοΫɺ 
 ϝοηʔδɺ͓Ͱ͔͚ɺWish 
 Մ༻ੑΛ΋ͱʹͨ͠SLIΛઃఆ 
 ڞ௨ Ϋϥογϡ / ANR ػೳ͝ͱͷΩʔϝτϦΫε ϝοηʔδ: ಡΈࠐΈ଎౓ ΧʔυϑϦοΫ: ࠶ϑϦοΫՄೳʹͳΔ·Ͱͷ࣌ؒ 
 ɾɾɾ

Slide 18

Slide 18 text

ΫϥΠΞϯτଆͰͷSLI / SLOͷܭଌ

Slide 19

Slide 19 text

ΫϥΠΞϯτଆͰͷSLI / SLOͷܭଌ 1. ·ͣ͸Firebase (+BigQuery) ʹ׬݁ͯ͠ϛχϚϜʹՔಇ ● ػೳతʹे෼ͳ͜ͱΛݕূ 2. Monitoring, DashboardΛDataDogʹҠߦʢ͜Ε͔Βʣ ● Ξϥʔτͷࣗ༝౓Λ্͛Δ ● ଞͷϩάͰར༻ͯ͠ΔαʔϏεͱ߹ΘͤΔ

Slide 20

Slide 20 text

ΫϥΠΞϯτଆͰͷϞχλϦϯάπʔϧͷݕ౼ ͻͱ·ͣྉۚ໘Λߟྀ͠FirebaseΛར༻͠ɺʮӡ༻Λ։࢝ → ՝୊͕͋Ε͹ϒϥογϡΞοϓʯͷํ਑ʹ 
 1. Firebase Crashlytics / Performance + BigQuery ● Firebaseࣗମ͸ແྉͷͨΊBigQueryͷQuery, Active StorageͷྉۚͷΈ ● Crashlytics, Performance͸طଘͰ΋ར༻͍ͯ͠ΔͨΊಋೖίετ͕௿͍ ● BigQueryʹ஝ੵ͢Δ͜ͱͰൺֱతࣗ༝౓͸ߴ͘ར༻Ͱ͖Δ 2. DataDog RUM ● طଘͷϞχλϦϯάπʔϧͱͯ͠DataDogΛར༻͍ͯ͠ΔͨΊπʔϧΛ౷ҰͰ͖Δ ● ηογϣϯ୯Ґͷ՝ۚମܥͷͨΊɺࠓճ͸ྉۚ໘Ͱஅ೦ 3. New Relic One ● όοΫΤϯυͰDataDogΛར༻͍ͯ͠Δ͜ͱɺྉۚ໘Λഎܠʹஅ೦

Slide 21

Slide 21 text

FirebaseͰߏ੒͢ΔϛχϚϜͳܭଌϑϩʔ Firebase ( Crashlytics + Performance ) ͷΈͰϛχϚϜͳϑϩʔ͸࣮ݱՄೳ ● BigQueryʹExportʢϦΞϧλΠϜ΋Մೳʣ ● BigQuery্ʹμογϡϘʔυදࣔ༻ͷதؒςʔϒϧ࡞੒ ● Data PortalͰμογϡϘʔυදࣔ )LUHEDVH 3HUIRUPDQFH )LUHEDVH &UDVKO\WLFV 8VHU &UDVK .H\0HWULFV *RRJOH'DWD3RUWDO $XWR([SRUW %LJ4XHU\ ,QWHUPHGLDWHWDEOH %LJ4XHU\

Slide 22

Slide 22 text

Ξϥʔτͷઃఆͷࣗ༝౓ Firebase Performance ● ࡞੒ͨ͠ࢦඪ͝ͱʹΞϥʔτͷઃఆ͕Մೳ ● ͖͍͠஋Λ50ʙ95ύʔηϯλΠϧͷࢦఆ͕Մೳ Firebase Crashlytics ● ௚ۙ1࣌ؒͷηογϣϯʹର͢ΔΫϥογϡ཰ ● ͖͍͠஋Λ0.1%ʙ1.0%ͰίϯτϩʔϧՄೳ

Slide 23

Slide 23 text

Ϋϥογϡϩάͷ෼ྨ https://firebase.google.com/docs/crashlytics/customize-crash-reports import UIKit import FirebaseCrashlytics final class LoginViewController: UIViewController { // ը໘Λදࣔ͢ΔλΠϛϯάͰCrashlyticsʹΧελϜΩʔΛઃఆ override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) Crashlytics.crashlytics().setCustomValue("login", forKey: "domain") } iOSΞϓϦͰͷϩάΠϯը໘ʹର͢Δ࣮૷ྫ ֤ػೳͷը໘දࣔ࣌ʹCrashlyticsʹΧελϜΩʔΛઃఆ͢Δ ● ΧελϜΩʔΛ΋ͱʹBigQuery (Data Portal) ্ͰػೳυϝΠϯ͝ͱͷΫϥογϡΛूܭ ● ػೳ͝ͱͷΞϥʔτ͸ઃఆͰ͖ͳ͍ͨΊɺVelocity Alert → μογϡϘʔυͰػೳӨڹ֬ೝ

Slide 24

Slide 24 text

ࠓޙʣϞχλϦϯάΛDataDogʹ౷Ұ ҎԼͷ؍఺͔ΒDataDogʹू໿͍ͯ͘͠ ● ϞχλϦϯάͷू໿ ● Ϋϥογϡͷػೳ͝ͱͷΞϥʔτ )LUHEDVH 3HUIRUPDQFH )LUHEDVH &UDVKO\WLFV $XWR([SRUW %LJ4XHU\ 4XHU\ SXVK IRUZRUGWRGDWDGRJ &ORXG)XQFWLRQV 'DWD'RJ &ORXG 3XE6XE WULJJHU

Slide 25

Slide 25 text

ӡ༻ʹ͍ͭͯ

Slide 26

Slide 26 text

ӡ༻ͷมԽ Πϯγσϯτൃੜ࣌ ● PMɺόοΫΤϯυɺΫϥΠΞϯτϝϯόʔશһ͕ϢʔβʔӨڹΛ൑அ͢ΔҰ࣌৘ใͱͯ͠׆༻ ○ ΤϯδχΞͷௐࠪΛ଴ͨͣͯ͠ωΫετΞΫγϣϯΛಈ͖ग़ͤΔΑ͏ʹ 
 ྫʣશϢʔβʔ΁ͷ͓͠ΒͤɺTwitterࠂ஌ɺ޿ࠂͷఀࢭ ● ِཅੑͷ௿Լ ○ ಛఆͷ৚݅ԼʢΩϟϯϖʔϯதͷΈ౳ʣʹൃੜ͢ΔύʔεΤϥʔΛ༏ઌ౓ߴ͘ΞϥʔτΛ͋͛ ΒΕΔΑ͏ʹ

Slide 27

Slide 27 text

ӡ༻ͷมԽ ϦϦʔεޙͷϝτϦΫε֬ೝ࣌ʹόοΫΤϯυɺΫϥΠΞϯτͷڞ௨ݴޠʹ 
 ● όοΫΤϯυɺΫϥΠΞϯτͦΕͧΕ͕׬શʹ෼͔Εͯ֬ೝ ● ֬ೝՄೳͳϝτϦΫεɺμογϡϘʔυΛҰ௨Γ໢ཏతʹ֬ೝ ● όοΫΤϯυɺΫϥΠΞϯτڞ௨ͷSLI / SLO μογϡϘʔυΛ֬ೝ ○ ௐࠪͷ৔߹͸SLIΛڞ௨ݴޠͱͯ͠ίϛϡχέʔγϣϯ ● ҧ൓͕͋ͬͨ৔߹ʹؔ࿈ͷϝτϦΫεɺμογϡϘʔυΛ֬ೝ ○ SLI / SLO΋ಉ࣌ʹߦ͏ ݱࡏͷӡ༻ ैདྷͷӡ༻

Slide 28

Slide 28 text

ࠓޙͷల๬ ● ·ͩ·ͩӡ༻࢝ΊͨͯͳͷͰɺࠓޙ΋஌ݟΛஷΊ͍ͯ͘ ● ࢦඪͦͷ΋ͷͷܧଓతͳϒϥογϡΞοϓ ○ ࢦඪͷ͖͍͠஋ɺλʔήοτʢ90% → 50%ʣ ○ ΤϥʔόδΣοτ ○ ػೳͷΩʔϝτϦΫεͷର৅ ● DataDogͰҰؾ௨؏ͯ͠ϞχλϦϯάɺμογϡϘʔυΛ؅ཧͰ͖ΔΑ͏ʹ͢Δ ● ૊৫಺ͰͷSLI / SLOͷਁಁ ○ ݱঢ়·ͩ·ͩΤϯδχΞҎ֎ʹ͸ਁಁͰ͖ͯͳ͍

Slide 29

Slide 29 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠