Share
Embed
何でも屋になっている SRE 的なチームから責務を分離するまでの道のり 〜新設チームでオンコール体制を構築するまで〜 / SRE Lounge #15
https://sre-lounge.connpass.com/event/290455/ の発表資料です。
発表動画や発表で触れられなかった内容については https://tech.repro.io/entry/2023/09/28/101708 に載っています。
Takeshi Arabiki
August 31, 2023
Transcript
60 slides
-
© 2023 Repro Inc. │ CONFIDENTIAL Reproגࣜձࣾ Development Div. Platform
Team Takeshi Arabiki (@a_bicky) ԿͰʹͳ͍ͬͯΔ SRE తͳνʔϜ͔Β Λ͢Δ·ͰͷಓͷΓ ʙ৽ઃνʔϜͰΦϯίʔϧମ੍Λߏங͢Δ·Ͱʙ -
ࣗݾհ Takeshi Arabiki • X (چ Twitter): @a_bicky • Blog:
͋Βͼ͖ه • ॴଐ: Rerpo גࣜձࣾʢ2017 8 ݄ʙʣ • SREɺσʔλΤϯδχΞϦϯάɺΞϓϦέʔγϣ ϯ։ൃɺΞʔΩςΫτͬΆ͍͜ͱΛΔνʔϜͰ ϚωʔδϟʔΛͭͭ͠ɺΤϯδχΞͱͯ͠ίʔ υϨϏϡʔোରԠɾ҆ఆԽʹؔ͢Δ͜ͱΛϝ Πϯʹɺͨ·ʹػೳ։ൃΔਓʢͬͱίʔυ ॻ͖͍ͨʣ -
© 2023 Repro Inc. │ CONFIDENTIAL 3 ΞδΣϯμ • Repro
ʹ͍ͭͯ • ࣌ͷSys-Infraͷ୲ྖҬ • ৽νʔϜઃཱͱ৫ମ੍ͷมߋ • ৽ઃνʔϜͰΦϯίʔϧମ੍Λߏங͢Δ·Ͱ • Δ՝ • ·ͱΊ -
© 2023 Repro Inc. │ CONFIDENTIAL 4 ΞδΣϯμ • Repro
ʹ͍ͭͯ • ࣌ͷSys-Infraͷ୲ྖҬ • ৽νʔϜઃཱͱ৫ମ੍ͷมߋ • ৽ઃνʔϜͰΦϯίʔϧମ੍Λߏங͢Δ·Ͱ • Δ՝ • ·ͱΊ -
© 2023 Repro Inc. │ CONFIDENTIAL ใऩू ੳɾηάϝϯτ ҰਓͻͱΓʹ࠷దͳࢪࡦΛ࣮ࢪ ଟ༷ͳσʔλΛੳ
ϢʔβʔΛηάϝϯτ ϙοϓΞοϓ ਧ͖ग़͠ ϝʔϧ ΞϓϦ٬ ΞϓϦ٬ ΞϓϦ٬ ίϯςϯπຒΊࠐΈ ϓογϡ௨ Ϩίϝϯυ Web ళฮ ΞϓϦ ϦΞϧλΠϜͷ One to One ίϛϡχέʔγϣϯ -
© 2023 Repro Inc. │ CONFIDENTIAL ใऩू ੳɾηάϝϯτ ҰਓͻͱΓʹ࠷దͳࢪࡦΛ࣮ࢪ ଟ༷ͳσʔλΛੳ
ϢʔβʔΛηάϝϯτ ϙοϓΞοϓ ਧ͖ग़͠ ϝʔϧ ΞϓϦ٬ ΞϓϦ٬ ΞϓϦ٬ ίϯςϯπຒΊࠐΈ ϓογϡ௨ Ϩίϝϯυ Web ళฮ ΞϓϦ ϦΞϧλΠϜͷ One to One ίϛϡχέʔγϣϯ SDK ͔Βͷେྔͷ ϦΫΤετΛࡹ͘ API େྔͷσʔλΛՃ͢Δ ΞϓϦέʔγϣϯ ४ϦΞϧλΠϜʹର ϢʔβʔΛߋ৽͢Δ ΞϓϦέʔγϣϯ -
© 2023 Repro Inc. │ CONFIDENTIAL ReproͷαʔόαΠυΛࢧ͑Δओͳٕज़ Amazon Corretto (Java)
BigQuery Kafka Streams Rundeck Amazon EC2 Amazon ECS Amazon Aurora (MySQL Compatible) Amazon ElastiCache (Redis) Amazon S3 -
© 2023 Repro Inc. │ CONFIDENTIAL 1લͷαʔόαΠυνʔϜͷߏ Sys-Infra ˚˚ϓϩδΣΫτ ̋̋ϓϩδΣΫτ
✕✕ϓϩδΣΫτ Development Div. SREతͳνʔϜ ػೳ։ൃνʔϜʢϓϩδΣΫτ੍ʣ -
© 2023 Repro Inc. │ CONFIDENTIAL 11 ΞδΣϯμ • Repro
ʹ͍ͭͯ • ࣌ͷSys-Infraͷ୲ྖҬ • ৽νʔϜઃཱͱ৫ମ੍ͷมߋ • ৽ઃνʔϜͰΦϯίʔϧମ੍Λߏங͢Δ·Ͱ • Δ՝ • ·ͱΊ -
© 2023 Repro Inc. │ CONFIDENTIAL ใऩू ੳɾηάϝϯτ ҰਓͻͱΓʹ࠷దͳࢪࡦΛ࣮ࢪ ଟ༷ͳσʔλΛੳ
ϢʔβʔΛηάϝϯτ ϙοϓΞοϓ ਧ͖ग़͠ ϝʔϧ ΞϓϦ٬ ΞϓϦ٬ ΞϓϦ٬ ίϯςϯπຒΊࠐΈ ϓογϡ௨ Ϩίϝϯυ Web ళฮ ΞϓϦ ϦΞϧλΠϜͷ One to One ίϛϡχέʔγϣϯ SDK ͔Βͷେྔͷ ϦΫΤετΛࡹ͘ API େྔͷσʔλΛՃ͢Δ ΞϓϦέʔγϣϯ ४ϦΞϧλΠϜʹର ϢʔβʔΛߋ৽͢Δ ΞϓϦέʔγϣϯ -
© 2023 Repro Inc. │ CONFIDENTIAL Ұ෦ͷΞϓϦέʔγϣϯͷ։ൃɾͦͷଞશൠͷӡ༻ Amazon Corretto (Java)
BigQuery Kafka Streams Rundeck Amazon EC2 Amazon ECS Amazon Aurora (MySQL Compatible) Amazon ElastiCache (Redis) Amazon S3 SDK Rails ͷϑϩϯτΤϯυͷ։ൃҎ֎ ʹؔͯ͠΄΅શͯʹਂؔ͘༩ -
© 2023 Repro Inc. │ CONFIDENTIAL ʑͷӡ༻ɾόʔδϣϯΞοϓ Amazon Corretto (Java)
BigQuery Kafka Streams Rundeck Amazon EC2 Amazon ECS Amazon Aurora (MySQL Compatible) Amazon ElastiCache (Redis) Amazon S3 -
© 2023 Repro Inc. │ CONFIDENTIAL 16 Ͳ͏ͯ͜͠͏ͳͬͨ • Rails
ΞϓϦέʔγϣϯͷ֤ػೳ୲͕ᐆດ - ಛఆͷػೳͷ։ൃ͕ྃ͢ΔʹνʔϜΛεΫϥοϓΞϯυϏϧυ - ৽ػೳ։ൃͰ͋·ΓखΛೖΕͳ͍ೃછΈͷͳ͍ΞϓϦέʔγϣϯͷଘࡏ • εέδϡʔϧΛ༏ઌͯ͠Sys-InfraΛத৺ʹߦͬͨΞϓϦέʔγϣϯ։ൃ • Chief Architectʢݩ CTOʣ͕ಋೖ͢Δج൫ͷड͚ೖΕઌ͕͍͍ͩͨSys-Infra - ೝෛՙͷݶք͔Βػೳ։ൃνʔϜड͚ೖΕઌʹͳΓͭͭ͋ͬͨ • ͦͦSys-Infraͷ͕ᐆດ - Կ͔Λཧ͠Α͏ͱ͢Δड͚ೖΕઌ͕ͳ͘࠳ -
© 2023 Repro Inc. │ CONFIDENTIAL 17 ΞδΣϯμ • Repro
ʹ͍ͭͯ • ࣌ͷSys-Infraͷ୲ྖҬ • ৽νʔϜઃཱͱ৫ମ੍ͷมߋ • ৽ઃνʔϜͰΦϯίʔϧମ੍Λߏங͢Δ·Ͱ • Δ՝ • ·ͱΊ -
© 2023 Repro Inc. │ CONFIDENTIAL ൃޙͷαʔόαΠυνʔϜͷߏ Sys-Infra Feature Team
1 Repro Core Feature Team 2 Development Div. SREతͳνʔϜ ػೳ։ൃνʔϜʢجຊݻఆʣ New!! -
© 2023 Repro Inc. │ CONFIDENTIAL 20 Repro Core ৽ઃʹΑͬͯղܾ͍ͨ͠՝
• ReproΛࢧ͑Δॏཁͳج൫ͷӡ༻͕ଐਓԽ͍ͯ͠Δ্ʹઐ೦ͮ͠Β͍ঢ়گ - ސ٬͕ར༻͠ͳ͍Օॴͷӡ༻ෛՙ͕ Sys-Infra ʹҰۃूத • Chief Architectͷࣝͷঝઌ͕ෆࡏ • ػೳ։ൃ͢ΔνʔϜ͕Βͳ͍ͱ͍͚ͳ͍͜ͱ͕ଟ্͍ʹखް͍αϙʔτͳ͍ -
© 2023 Repro Inc. │ CONFIDENTIAL 21 Repro Core ৽ઃʹΑͬͯղܾ͍ͨ͠՝
• ReproΛࢧ͑Δॏཁͳج൫ͷӡ༻͕ଐਓԽ͍ͯ͠Δ্ʹઐ೦ͮ͠Β͍ঢ়گ - Repro Core ͕୲͏ • Chief Architectͷࣝͷঝઌ͕ෆࡏ - Repro Core ͕୲͏ • ػೳ։ൃ͢ΔνʔϜ͕Βͳ͍ͱ͍͚ͳ͍͜ͱ͕ଟ্͍ʹखް͍αϙʔτͳ͍ - Repro Core ͱ Sys-Infra ͕୲͏ -
© 2023 Repro Inc. │ CONFIDENTIAL 22 νʔϜͷׂͷཧ • Repro
Core - ސ٬ʹతͳՁಧ͚ͳ͍͕ɺFeature Team ͕ސ٬ʹՁΛಧ͚Δ্Ͱඞཁ ͱͳΔڞ௨ج൫Λఏڙ͢Δ • Sys-Infra - ۃͳReproݻ༗ͷ͕ࣝͳͯ͘Γཱͭج൫ͷఏڙ • Feature Team - ސ٬ʹతͳՁΛಧ͚Δػೳͷ։ൃ -
© 2023 Repro Inc. │ CONFIDENTIAL 23 νʔϜͷׂΛྉཧͰྫ͑Δͱ Feature Team
Repro Core Sys-Infra ਫɾΨεͷ҆ఆͨ͠ڙڅ ศརͳಓ۩ͷ։ൃ ྉཧΛ࡞Δ -
© 2023 Repro Inc. │ CONFIDENTIAL ใऩू ੳɾηάϝϯτ ҰਓͻͱΓʹ࠷దͳࢪࡦΛ࣮ࢪ ଟ༷ͳσʔλΛੳ
ϢʔβʔΛηάϝϯτ ϙοϓΞοϓ ਧ͖ग़͠ ϝʔϧ ΞϓϦ٬ ΞϓϦ٬ ΞϓϦ٬ ίϯςϯπຒΊࠐΈ ϓογϡ௨ Ϩίϝϯυ Web ళฮ ΞϓϦ Repro Coreͷίϯϙʔωϯτͷྫ େྔͷσʔλΛՃ͢Δ ΞϓϦέʔγϣϯ ४ϦΞϧλΠϜʹର ϢʔβʔΛߋ৽͢Δ ΞϓϦέʔγϣϯ -
© 2023 Repro Inc. │ CONFIDENTIAL 26 ΞδΣϯμ • Repro
ʹ͍ͭͯ • ࣌ͷSys-Infraͷ୲ྖҬ • ৽νʔϜઃཱͱ৫ମ੍ͷมߋ • ৽ઃνʔϜͰΦϯίʔϧମ੍Λߏங͢Δ·Ͱ • Δ՝ • ·ͱΊ -
© 2023 Repro Inc. │ CONFIDENTIAL 28 ࣌ͷΦϯίʔϧମ੍ • ࣌ͷ
PagerDuty αʔϏεओʹ 4 छྨͰ Feature Team ͱ Sys-Infra Ͱ୲ - ϓογϡ௨ؔ࿈αʔϏε - Sys-Infra ؔ࿈αʔϏε - Kafka BrokerɾKafka Streams ΞϓϦέʔγϣϯؔ࿈αʔϏε - Rails ΞϓϦέʔγϣϯαʔϏε • ্هͷαʔϏεखಈͰཧ • ֤αʔϏεৗʹ Primary ͱ Secondary ͷ 2 ໊͕ػ -
© 2023 Repro Inc. │ CONFIDENTIAL 29 ࣌ͷΦϯίʔϧମ੍ • ࣌ͷ
PagerDuty αʔϏεओʹ 4 छྨͰ Feature Team ͱ Sys-Infra Ͱ୲ - ϓογϡ௨ؔ࿈αʔϏε - Sys-Infra ؔ࿈αʔϏε - Kafka BrokerɾKafka Streams ΞϓϦέʔγϣϯؔ࿈αʔϏε - Rails ΞϓϦέʔγϣϯαʔϏε • ্هͷαʔϏεखಈͰཧ • ֤αʔϏεৗʹ Primary ͱ Secondary ͷ 2 ໊͕ػ ← ࠓޙRepro Core͕Ұ෦Λ୲ ← ࠓޙRepro Core͕Ұ෦Λ୲ ← ࠓޙRepro Core͕Ұ෦Λ୲ ← ࠓޙRepro Core͕Ұ෦Λ୲ -
© 2023 Repro Inc. │ CONFIDENTIAL 30 ΦϯίʔϧҠߦͰΔ͜ͱ • PagerDuty
αʔϏεͷ࡞୯Ґͷํܾఆ • ҠߦظؒதͷΤεΧϨʔγϣϯϙϦγʔͷํܾఆ • ֤छίϯϙʔωϯτͷΩϟονΞοϓ • υΩϡϝϯτͷඋ • Φϯίʔϧͷϧʔϧ (Working Agreement) ͷઃఆ • Ξϥʔτͷ͖ઌมߋ -
© 2023 Repro Inc. │ CONFIDENTIAL 31 ΦϯίʔϧҠߦͰΔ͜ͱ • PagerDuty
αʔϏεͷ࡞୯Ґͷํܾఆ • ҠߦظؒதͷΤεΧϨʔγϣϯϙϦγʔͷํܾఆ • ֤छίϯϙʔωϯτͷΩϟονΞοϓ • υΩϡϝϯτͷඋ • Φϯίʔϧͷϧʔϧ (Working Agreement) ͷઃఆ • Ξϥʔτͷ͖ઌมߋ -
© 2023 Repro Inc. │ CONFIDENTIAL 32 PagerDuty ͷ༻ޠ •
αʔϏε - ઃఆ͞ΕͨΤεΧϨʔγϣϯϙϦγʔʹैͬͯΦϯίʔϧ୲ऀʹ௨Λߦ͏୯Ґ • ΤεΧϨʔγϣϯϙϦγʔ - αʔϏεͰΠϯγσϯτ͕࡞͞Εͨࡍʹ Ͳͷεέδϡʔϧʹैͬͯ௨͢Δ͔Λܾఆ͢Δ • εέδϡʔϧ - ࣌ؒଳʹΑͬͯΦϯίʔϧ୲ऀΛมߋ͢ΔΈ - ௨ৗ1νʔϜ1εέδϡʔϧͳͷͰνʔϜͰಡସ͑Մ ΤεΧϨʔγϣϯϙϦγʔ εέδϡʔϧ -
© 2023 Repro Inc. │ CONFIDENTIAL 33 PagerDuty ͷαʔϏεͱ You
can call this something a microservice, a piece of functionality, a feature, a slice of a monolith, a component, a shared piece of infrastructure, or an internal tool. For the purposes of this guide, these somethings will all be labeled as a type of "service." Although the monolith shares the same code base, each logical source of functionality you identify can be considered its own service. That logical service can be represented as a different service for your documentation, runbooks, and wikis, along with your on-call ownership in PagerDuty. Introduction - PagerDuty Full-Service Ownership Documentation Defining a Service - PagerDuty Full-Service Ownership Documentation -
© 2023 Repro Inc. │ CONFIDENTIAL 34 PagerDuty ͷαʔϏεͱ You
can call this something a microservice, a piece of functionality, a feature, a slice of a monolith, a component, a shared piece of infrastructure, or an internal tool. For the purposes of this guide, these somethings will all be labeled as a type of "service." Although the monolith shares the same code base, each logical source of functionality you identify can be considered its own service. That logical service can be represented as a different service for your documentation, runbooks, and wikis, along with your on-call ownership in PagerDuty. Introduction - PagerDuty Full-Service Ownership Documentation Defining a Service - PagerDuty Full-Service Ownership Documentation ϚΠΫϩαʔϏείϯϙʔωϯτͱ͔ΛαʔϏεͱݺͿΑ ಉ͡ίʔυΛڞ༗͢ΔϞϊϦγοΫαʔϏεͰҟͳΔػೳ Λఏڙ͍ͯ͠ΔͳΒผͷαʔϏεͱΈͳͤΔΑ -
© 2023 Repro Inc. │ CONFIDENTIAL 35 ࣌ͷΦϯίʔϧମ੍ʢ࠶ܝʣ • ࣌ͷ
PagerDuty αʔϏεओʹ 4 छྨͰ Feature Team ͱ Sys-Infra Ͱ୲ - ϓογϡ௨ؔ࿈αʔϏε - Sys-Infra ؔ࿈αʔϏε - Kafka BrokerɾKafka Streams ΞϓϦέʔγϣϯؔ࿈αʔϏε - Rails ΞϓϦέʔγϣϯαʔϏε • ্هͷαʔϏεखಈͰཧ • ֤αʔϏεৗʹ Primary ͱ Secondary ͷ 2 ໊͕ػ -
© 2023 Repro Inc. │ CONFIDENTIAL 36 PagerDuty αʔϏεͷׂ •
࣌ͷ PagerDuty αʔϏεओʹ 4 छྨͰ Feature Team ͱ Sys-Infra Ͱ୲ - ϓογϡ௨ؔ࿈αʔϏε → 5 ͭʹׂ - Sys-Infra ؔ࿈αʔϏε → 3 ͭʹׂ - Kafka BrokerɾKafka Streams ΞϓϦέʔγϣϯؔ࿈αʔϏε → 2 ͭʹׂ - Rails ΞϓϦέʔγϣϯαʔϏε → 4 ͭʹׂ -
© 2023 Repro Inc. │ CONFIDENTIAL 38 PagerDuty ͷ༻ޠʢ࠶ܝʣ •
αʔϏε - ઃఆ͞ΕͨΤεΧϨʔγϣϯϙϦγʔʹैͬͯΦϯίʔϧ୲ऀʹ௨Λߦ͏୯Ґ • ΤεΧϨʔγϣϯϙϦγʔ - αʔϏεͰΠϯγσϯτ͕࡞͞Εͨࡍʹ Ͳͷεέδϡʔϧʹैͬͯ௨͢Δ͔Λܾఆ͢Δ • εέδϡʔϧ - ࣌ؒଳʹΑͬͯΦϯίʔϧ୲ऀΛมߋ͢ΔΈ - ௨ৗ1νʔϜ1εέδϡʔϧͳͷͰνʔϜͰಡସ͑Մ ΤεΧϨʔγϣϯϙϦγʔ εέδϡʔϧ -
© 2023 Repro Inc. │ CONFIDENTIAL • Repro Core -
Repro Core ͚ͩͰΦϯίʔϧʹೖΔ αʔϏε༻ • Repro Core Trial with FT - Feature Team ͱҰॹʹΦϯίʔϧʹೖΔ αʔϏε༻ • Repro Core Trial with Sys Infra - Sys-Infra ͱҰॹʹΦϯίʔϧʹೖΔ αʔϏε༻ • etc. 39 PagerDuty ΤεΧϨʔγϣϯϙϦγʔͷํ Repro Core Trial with Sys Infra ͷྫ -
© 2023 Repro Inc. │ CONFIDENTIAL 40 PagerDuty εέδϡʔϧͷํ •
Repro Core Trial Primary/Secondary - Repro Core ͱଞͷνʔϜͷΦϯίʔϧ୲͕Ұॹʹػ͢Δεέδϡʔϧ - ฏதෆ׳Εͳϝϯόʔ͕ৗʹػͯ͠ܦݧΛੵΉ - ฏதҎ֎׳Ε͍ͯΔϝϯόʔ͕ػ͢Δ͔ɺ୲ෆࡏͷঢ়ଶ • Repro Core Primary/Secondary - Repro Core ͚͕ͩػ͢ΔϙϦγʔ - ฏதෆ׳Εͳϝϯόʔ͕ৗʹػͯ͠ܦݧΛੵΉ - ฏதҎ֎ϩʔςʔγϣϯʹैͬͯػ - Repro Core Trial Primary/Secondary ͔Β࢝Ίͯͪ͜ΒʹΓସ͍͑ͯ͘ -
© 2023 Repro Inc. │ CONFIDENTIAL • ෆ׳ΕͳαʔϏεγϟυʔΠϯά͔Β࢝ΊΔ - γϟυʔΠϯά
= ରԠ͍ͯ͠Δਓͷ࡞ۀΛࣗͰͳͧΔ͜ͱ • ͋Δఔ׳Ε͍ͯΔαʔϏεࣗҰਓͰΦϯίʔϧʹೖ͍ͬͯΔͭΓͰରԠ - खʹෛ͑ͳ͍ͷʹؔͯ͠ผνʔϜͷ൪ͷਓͷॿ͚ΛआΓΔ • Φϯίʔϧظؒʹൃੜͨ͠Ξϥʔτʹશͯʹؔͯ࣍͠ͷ 2 Λԡ͑͞Δ - ΞϥʔτΛ์ஔͨ͠߹ʹαʔϏεʹͲͷΑ͏ͳӨڹΛ༩͑ΔՄೳੑ͕͋Δ͔ - ΞϥʔτΛղফ͢ΔͨΊʹͲͷΑ͏ͳ࡞ۀΛߦΘͳ͚ΕͳΒͳ͍͔ • ࣍ͷΑ͏ͳ͜ͱͰ͖Δͱ·͍͕͠ඞਢͰͳ͍ - Ξϥʔτ͕໐ΔݪҼʹ͍ͭͯͷٕज़తͳཧղɾΞϥʔτͷࠜຊղফ 41 ΦϯίʔϧҠߦظؒதͷ৺ߏ͑ -
© 2023 Repro Inc. │ CONFIDENTIAL 42 ΞδΣϯμ • Repro
ʹ͍ͭͯ • ࣌ͷSys-Infraͷ୲ྖҬ • ৽νʔϜઃཱͱ৫ମ੍ͷมߋ • ৽ઃνʔϜͰΦϯίʔϧମ੍Λߏங͢Δ·Ͱ • Δ՝ • ·ͱΊ -
© 2023 Repro Inc. │ CONFIDENTIAL • ࠓͷ Repro Core
Ҏલͷ Sys-Infra ฒΈʹೝෛՙ͕େ͖͍ • ೝෛՙͷݶքʹ߹ΘͤͯνʔϜΛׂׂ͍͕ͨ͠Ͱ͖Δ΄Ͳͷن͡Όͳ͍ • Φϯίʔϧߟ͑Δͱ 1 νʔϜ࠷ 4 ਓ֬อ͍ͨ͠ - ೖࢹʹΑΕɺΦϯίʔϧͰηΧϯμϦΛ༻ҙ͢ΔͳΒ࠷8ਓඞཁ • Repro CoreࣾͷϝϯόʔͰ݁͞ΕͨͷͰ࠾༻ϑϩʔ͕͍ͬͯͳ͍ - ͜Ε͔Βඋ͍͔ͯ͠ͳ͚Ε… 44 ਓ͕Γͳ͍ʂʂ -
© 2023 Repro Inc. │ CONFIDENTIAL 45 ΞδΣϯμ • Repro
ʹ͍ͭͯ • ࣌ͷSys-Infraͷ୲ྖҬ • ৽νʔϜઃཱͱ৫ମ੍ͷมߋ • ৽ઃνʔϜͰΦϯίʔϧମ੍Λߏங͢Δ·Ͱ • Δ՝ • ·ͱΊ -
© 2023 Repro Inc. │ CONFIDENTIAL 47 ·ͱΊ • 1લɺReproͰSREతͳνʔϜ͕ԿͰʹͳ͍ͬͯͨ
• ৽νʔϜઃཱ৫ମ੍มߋʹͬͯΛཧͨ͠ - ৽νʔϜઃཱΛཧ͢Δνϟϯεʂ • ৽ઃνʔϜͰطଘνʔϜ͔ΒΛണ͕ͯ͠Φϯίʔϧମ੍Λߏங͢Δ - PagerDuty ͷαʔϏεཻͷݟ͠ - Terraform Ͱཧ͢Δ͜ͱͰมߋΛՃ͑ͨ͘͢͠ - ΦϯίʔϧʹೖΔ࣌ؒଳͷ - ΦϯίʔϧҠߦظؒதͷ৺ߏ͑Λ໌จԽ -
© 2023 Repro Inc. │ CONFIDENTIAL 49 طଘίϯϙʔωϯτඞཁͳࣝͷΩϟονΞοϓ • طଘίϯϙʔωϯτͷϦϑΝΫλϦϯάɾόʔδϣϯΞοϓ
• ಡॻձͷ࣮ࢪ - σʔλࢦΞϓϦέʔγϣϯσβΠϯ - ιϑτΣΞΞʔΩςΫνϟɾϋʔυύʔπ • ୲ίϯϙʔωϯτ୯ҐͰεΩϧϚοϓΛ࡞ - جૅతͳεΩϧίϯϙʔωϯτͷεΩϧʹؚ·ΕΔ • ษڧձͷ࣮ࢪ - εΩϧϚοϓͰॏཁ͔ͭଐਓੑͷߴ͍ͷΛத৺ʹ࣮ࢪ • Ұ෦ͷίϯϙʔωϯτͰ staging ڥͰٖࣅతͳোΛൃੜͤͯ͞ରԠ܇࿅Λ࣮ࢪ -
© 2023 Repro Inc. │ CONFIDENTIAL 50 GRPI ϞσϧΛҙࣝͨ͠νʔϜϏϧσΟϯά •
Goal: νʔϜͱͯ͠ͷํੑʹ͍ͭͯશһ͕ཧղ͍ͯ͠Δ - → νʔϜͷɾඪʹ͍ͭͯσΟεΧογϣϯ • Role: ͓ޓ͍ʹର͢ΔظʢׂʣΛཧղ͍ͯ͠Δ - → ࣗͷׂɾ૬खʹظ͢Δׂͷ͢Γ߹Θͤ • Process: ීஈͲ͏ߦಈ͖͔͢ɾͲ͏ඪΛୡ͢Δ͔શһ͕ཧղ͍ͯ͠Δ - → ɾඪ͔Β۩ମతͳλεΫʹམͱ͢ɾWorking Agreement ͷઃఆ • Interaction: ͓ޓ͍ͷಛੑʢੑ֨ɾՁ؍ʣΛཧղ͍ͯ͠Δ - → ετϨϯάεϑΝΠϯμʔΛར༻ͨ͠ϫʔΫγϣοϓͷ࣮ࢪ -
© 2023 Repro Inc. │ CONFIDENTIAL 51 Repro Coreͷϛογϣϯɾ •
ϛογϣϯ - Repro ͷػೳΛఏڙ͢Δ্Ͱத֩ͱͳΔج൫Λఏڙ͠ɺFeature Team ͕ސ٬Ձ ͷఏڙʹूதͰ͖Δ৫Λ࡞Δ • - SDK͔ΒͷσʔλΛଞͷαʔϏεͰར༻Ͱ͖ΔΑ͏ʹ֤छσʔλετΞʹอଘ͢Δ - Feature Team ͕ػೳ։ൃ͢Δࡍʹར༻͢Δڞ௨ج൫ɾϥΠϒϥϦͷ։ൃ - ্هڞ௨ج൫ɾϥΠϒϥϦΛͬͨ։ൃͷࢧԉ - Feature Team ͷઃܭ૬ஊ -
© 2023 Repro Inc. │ CONFIDENTIAL • Datadog - ΠϯϑϥͷϞχλϦϯάαʔϏε
• Rollbar - ΞϓϦέʔγϣϯΞϥʔτΛཧ͢ΔαʔϏε • Rundeck - δϣϒεέδϡʔϥ • Papertrail - ϩάཧαʔϏε • CloudWatch Logs - AWS ͷϞχλϦϯάαʔϏε 53 PagerDuty ͱ࿈ܞ͍ͯ͠ΔओͳαʔϏε -
© 2023 Repro Inc. │ CONFIDENTIAL • Datadog - ΠϯϑϥͷϞχλϦϯάαʔϏε
• Rollbar - ΞϓϦέʔγϣϯΞϥʔτΛཧ͢ΔαʔϏε • Rundeck - δϣϒεέδϡʔϥ • Papertrail - ϩάཧαʔϏε • CloudWatch Logs - AWS ͷϞχλϦϯάαʔϏε 54 PagerDuty ͱ࿈ܞ͍ͯ͠ΔओͳαʔϏε -
© 2023 Repro Inc. │ CONFIDENTIAL 55 DatadogϞχλʔͷPagerDuty࿈ܞઌͷมߋʢมฤʣ locals {
clusters = flatten(values(var.services).*.clusters) } resource "datadog_monitor" "cpu" { ... query = "avg(last_5m):cpu{cluster NOT IN (${join(",", local.clusters)})} ..." message = <<-EOF {{#is_alert}} @pagerduty-Sys-Infra {{/is_alert}} {{#is_recovery}} @pagerduty-resolve {{/is_recovery}} EOF } resource "datadog_monitor" "cpu_others" { for_each = var.services ... query = "avg(last_5m):cpu{cluster IN (${join(",", each.value.clusters)})) ..." message = <<-EOF {{#is_alert}} ${each.value.on_alert} {{/is_alert}} {{#is_recovery}} ${each.value.on_recovery} {{/is_recovery}} EOF } -
© 2023 Repro Inc. │ CONFIDENTIAL 56 DatadogϞχλʔͷPagerDuty࿈ܞઌͷมߋʢذฤʣ resource "datadog_monitor"
"consumer_lag" { ... query = "min(last_10m):max:kafka.consumer_lag{*} by {consumer_group} > 1000" message = <<-EOF {{#is_alert}} {{#is_match "consumer_group.name" "xxxxx" }} @pagerduty-Push-Service {{else}} @pagerduty-Repro-Core-Service-1 {{/is_match}} {{/is_alert}} EOF } -
© 2023 Repro Inc. │ CONFIDENTIAL • Datadog - ΠϯϑϥͷϞχλϦϯάαʔϏε
• Rollbar - ΞϓϦέʔγϣϯΞϥʔτΛཧ͢ΔαʔϏε • Rundeck - δϣϒεέδϡʔϥ • Papertrail - ϩάཧαʔϏε • CloudWatch Logs - AWS ͷϞχλϦϯάαʔϏε 57 PagerDuty ͱ࿈ܞ͍ͯ͠ΔओͳαʔϏε -
© 2023 Repro Inc. │ CONFIDENTIAL • ReproͰΞϓϦέʔγϣϯΞϥʔτͷ֤छ࿈ܞʹ Rollbar Λ༻
• ReproͷRailsΞϓϦέʔγϣϯϞϊϨϙͰRollbarͷϓϩδΣΫτڞ௨ - ECSαʔϏεԿݸʹ͔Ε͍ͯΔ • RollbarͰϓϩδΣΫτΛ͚ΔͱϓϩδΣΫτΛԣஅͯ͠ΞϥʔτΛ֬ೝͮ͠Β͍ - ෳͷϓϩδΣΫτΛԣஅͯ͠ΞϥʔτΛ֬ೝͰ͖Δ͕ • Rollbarͷ௨ઌͷഉଞ੍ޚେม - Τϥʔϝοηʔδʹ A ؚ͕·ΕͨΒ PagerDuty ͷ Service A ʹ incident Λ࡞ - Τϥʔϝοηʔδʹ B ؚ͕·ΕͨΒ PagerDuty ͷ Service B ʹ incident Λ࡞ - → Τϥʔϝοηʔδʹ A ͱ B ؚ͕·Ε͍ͯͨΒͲͪΒʹ incident ͕࡞͞ΕΔ 58 ΞϓϦέʔγϣϯΞϥʔτͷPagerDuty࿈ܞઌมߋͷ՝ -
© 2023 Repro Inc. │ CONFIDENTIAL 60 ഉଞతͳϧʔϧΛ؆୯ʹهड़Ͱ͖ΔπʔϧΛ࡞ https://github.com/abicky/rollbar-notification-rules-generator
1 ສߦͷ tf ϑΝΠϧ͕ 600 ߦΒͣͷ YAML ʹʂʂ