Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プロダクション環境の信頼性を損ねず観測する技術

 プロダクション環境の信頼性を損ねず観測する技術

## プロダクション環境の信頼性を損ねず観測する技術
### 2022/05/15 SRE NEXT 2022
#### Sohei Iwahori (GREE, Inc.)

---
# Agenda

- Introduction 観測は低コスト?
- case1 監視SaaSサービス障害がプロダクションサービス障害につながった話
- case2 ログエージェント負荷がプロダクション障害を引き起こす話
- case3 一部の環境の問題がシステム全体に影響してしまう話
- Recap

3baceb46dfe36422370df30b8eab61d1?s=128

Sohei Iwahori

May 15, 2022
Tweet

More Decks by Sohei Iwahori

Other Decks in Technology

Transcript

  1. ϓϩμΫγϣϯ؀ڥͷ৴པੑΛଛͶͣ ؍ଌ͢Δٕज़ 2022/05/15 SRE NEXT 2022 Sohei Iwahori (GREE, Inc.)

  2. Agenda » Introduction ؍ଌ͸௿ίετʁ » case1 ؂ࢹSaaSαʔϏεো֐͕ϓϩμΫγϣϯαʔϏεো֐ʹͭͳ͕ͬͨ࿩ » case2 ϩάΤʔδΣϯτෛՙ͕ϓϩμΫγϣϯো֐ΛҾ͖ى͜͢࿩

    » case3 Ұ෦ͷ؀ڥͷ໰୊͕γεςϜશମʹӨڹͯ͠͠·͏࿩ » Recap
  3. Introduction: ؍ଌ͸௿ίετʁ

  4. ؍ଌίετ͸ແࢹͯ͠Α͍ʁ ؍࡯ऀޮՌ͸ؾʹ͠ͳ͍ ෛՙ͸ඇৗʹখ͍͞ʢ͸ͣʣ » ͱʮೖ໳؂ࢹʯͷίϥϜʹ΋ॻ͔Ε͓ͯΓ » ओʹϝτϦΫεͷจ຺ͰಛʹΤʔδΣϯτΛಋೖ͢Δ͜ͱΛؾʹ͢Δ΂͖Ͱ ͸ͳ͍ͱड़΂ΒΕ͍ͯ·͢ » ͜Ε͸ଟ͘ͷ৔߹࣮ࡍʹͦͷͱ͓Γ

  5. ؍ଌͷίετ » ͬ͘͟ΓͱΠϕϯτͷස౓ɺॲཧ͢Δσʔλͷྔʹґଘ͢Δ » Metrics » ҰൠʹҰఆͷίϯτϩʔϧ͞ΕִͨؒͰऩू͞ΕΔ » ྔ͕໰୊ʹͳΔ͜ͱ͸͋·Γͳ͍ʢΧʔσΟφϦςΟ͕ߴ͗͢Δ৔߹͸ແࢹͰ͖ͳ͍͜ͱ΋͋Δʣ »

    Logging » Πϕϯτͷස౓ʹґଘ͢ΔʢΠϕϯτࣗମ͸ίϯτϩʔϥϒϧͰ͸ͳ͍͜ͱ͕ଟ͍ʣ » ڊେͳߏ଄ԽϩάɺελοΫτϨʔεͳͲ͸΍΍ίετ͕ߴ͘ͳΔ » Tracing » ֬཰ʹΑΔස౓ͷίϯτϩʔϧ
  6. ؍ଌίετ͕ແࢹͰ͖ͳ͘ͳΔ࣌ » ऩूͷʮաఔʯͰ໰୊͕ൃੜ͢Δέʔε » Πϕϯτස౓͕૝ఆ͍ͯ͠ΔॲཧྔΛΦʔόʔͯ͠͠·͏έʔε » ର৅γεςϜҎ֎͔ΒͷӨڹΛड͚ͯ͠·͏έʔε » Ҏ্ͷέʔεʹ͍ͭͯͷ໰୊ͷ࣮ྫͱߟྀ͢΂͖͜ͱʹ͍͓ͭͯ࿩͠·͢

  7. case1 ؂ࢹSaaSαʔϏεো֐͕ ϓϩμΫγϣϯαʔϏεো֐ʹ ͭͳ͕ͬͨ࿩

  8. ൃੜͨ͠ࣄ৅ » 1000୆Ҏ্ͷαʔόͰGrafana Agent͕Քಇ͍ͯ͠ΔΦϯϓϨ؀ڥ » Grafana CloudͰো֐͕ൃੜʢ2hఔ౓ͷμ΢ϯʣ » ͠͹Βͯ͘͠GrafanaCloudΛར༻͍ͯ͠ΔΦϯϓϨͷϓϩμΫγϣϯ؀ڥͰ ো֐͕ൃੜ

    » ֎෦΁ͷ௨৴Ͱ࠶ૹɺλΠϜΞ΢τ͕ൃੜ » Կ͕͓͖ͨͷ͔ʁ
  9. Կ͕͓͖ͨͷ͔

  10. Կ͕͓͖ͨͷ͔

  11. Կ͕͓͖ͨͷ͔

  12. Կ͕͓͖ͨͷ͔

  13. Կ͕͓͖ͨͷ͔

  14. Կ͕͓͖ͨͷ͔

  15. Grafana AgentͷRemoteWrite » σϑΥϧτͷϦτϥΠڍಈ͕͔ͳΓϔϏʔ » ͍ΘΏΔexponential backoff্͕ͩݶ͕100msʢPrometheus͸ݱࡏ͸5secʹʣ » https://github.com/prometheus/prometheus/pull/9634 »

    γϟʔυ͸࠷େͰ200·Ͱ૿͑Δ » 1/4ͱͯ͠΋ো֐ͷى͖͍ͯΔRemoteWriteઌʹඵؒ50 * 10 * 1000ϦΫΤετ͢ Δ͜ͱʹ » ্هissueͰ͸DDOSͱݴΘΕ͍ͯΔɺෛՙࢼݧฒͷϦΫΤετ͕ඈΜͰ͠·͏
  16. ઃఆ஋ͷݟ௚͠ͷͨΊͷݕূ » ঢ়گ͸Θ͔ͬͨͷͰϦτϥΠΛ཈͑ΔͨΊͷઃఆ஋Λfixͤ͞ΔͨΊ࠶ݱࢼݧΛ࣮ࢪ » ͔ͭͯ͸Retry্ݶͷઃఆ͕͕͋ͬͨ࡟আ͞Εͯ͠·ͬͨ » backoffͱshard਺ͷదਖ਼஋Λݕ౼ » ݕূ؀ڥʹPrometheusΛߏங࣮ͯ͠ࡍͷΦϯϓϨ؀ڥ͔ΒϦϞʔτϥΠτͰ࠶ݱݕূ »

    ΦϯϓϨαʔό -> ALB -> ݕূEC2Πϯελϯε » --enable-feature=remote-write-receiver ͕ͪΐ͏Ͳ࢖͑ͨͷͰศར » ઃఆΛม͑ɺALBϨΠϠʔͰݻఆͰ503Λฦ͢ɺ໭͢Λ܁Γฦ͢͜ͱͰঢ়گΛ࠶ݱ͠ςετ
  17. ઃఆ஋ͷݟ௚͠ͷͨΊͷݕূ » ύϥϝʔλΛม͑ͯো֐࣌ͷ1ϊʔυͷڍಈΛ࠶ݱ » ϦτϥΠ࣌ʹτϥϑΟοΫΛ཈͑ͭͭαʔϏε෮چʹͦΕͳΓʹૣ͘ରԠͰ ͖Δͱ͍͏͜ͱͰҎԼͷઃఆʹ min_shards: 1 max_shards: 5

    (default 200) min_backo : 100ms (default 30ms) max_backo : 1m (default 100ms)
  18. Lesson Learned » ϝτϦΫεͷऔಘ͸Ұൠʹ௿ෛՙ͕ͩpushڍಈʹ͸ؾΛ͚ͭͨํ͕ྑ͍ » ಛʹ࠶ૹ·ΘΓͷڍಈ͸೺Ѳ͓ͯ͘͠ͱྑ͍ » backoffͷΞϧΰϦζϜɺlimitͳͲ » ͜ΕΒͷڍಈʹؔΘΔϝτϦΫε΋औಘ͓ͯ͘͠

    » ՄೳͰ͋Ε͹࣮ࡍʹμ΢ϯ࣌ͷڍಈΛࣄલʹςετ͓ͯ͘͠΂͖ » ݱ୅͸͜ͷ͋ͨΓ΍Γ΍͘͢ͳ͍ͬͯΔͷͰ݁ߏ΍ΓΑ͏͕͋Δ » ALBͰͷݻఆͷΤϥʔϨεϙϯεͷ੾Γସ͑ͳͲ
  19. case2 ϩάΤʔδΣϯτෛՙ͕ ϓϩμΫγϣϯো֐ΛҾ͖ى͜͢࿩

  20. ൃੜͨ͠ࣄ৅ » AWSͰՔಇ͍ͯ͠ΔKVSͷΠϯελϯε͕ߴෛՙͰ઀ଓΤϥʔ » CPUෛՙ͕ߴෛՙʹͳ͓ͬͯΓ઀ଓ͕ॲཧͰ͖͍ͯͳ͍ » ର৅αʔό಺Ͱ͸cronͰىಈ͍ͯ͠ΔϩάνΣοΫΤʔδΣϯτ͕଺ཹͯ͠ େྔͷϓϩηε͕ىಈ͍ͯͨ͠

  21. ͳʹ͕ى͖ͨͷ͔ʁ » ผىҼʹΑΓ·ͱ·ͬͨΤϥʔϩά͕ు͔ΕΔ » 5෼୯ҐͰىಈ͍ͯ͠ΔcronͷϩάνΣοΫ͕ऴΘΒͣϓϩηε͕଺ཹ » ϩάνΣοΫʹΑΔIO/CPUෛՙͱϚονߦͷऔΓࠐΈʹΑΔϝϞϦ࢖༻্ঢ » αʔόϦιʔεΛṧഭ͠Քಇ͍ͯ͠ΔKVSαʔϏεͷύϑΥʔϚϯε͕ѱԽ ͠ɺো֐ʹ

  22. ରԠ » Ұ࣍ରԠ » ϩάͷϙδγϣϯϑΝΠϧΛඈ͹ͯ͠εΩοϓ » ελοΫ͍ͯ͠ΔϓϩηεͷkillͰҰ࣍ରԠ » ೋ࣍ରԠͱͯ͠ΤʔδΣϯτमਖ਼ »

    จࣈྻ݁߹͕஗͘Ϛονߦ͕ଟ͍৔߹ʹ໰୊ͱͳΔͨΊमਖ਼ » εΩοϓॲཧͷ࣮૷
  23. Lesson Learned » Τϥʔϩά͸جຊతʹ௿ස౓Πϕϯτ͕ͩΠϯϑϥʹ໰୊͕͋Δ৔߹ͳͲ͸ਖ਼ৗܥΑΓେ ྔʹग़ྗ͞ΕΔ » Ξϥʔτͷ௨஌ͱ͍͏໨తʹ͓͍ͯ͸ϩάΛ࢒Βͣಧ͚ΔΑΓՄ༻ੑɺ଎ใੑΛ༏ઌ͢Δ » େྔͷ௨஌͸ͦ΋ͦ΋ਓؒ΋ಡΉ͜ͱ͕Ͱ͖ͳ͍ »

    ෳ਺݅ى͖͍ͯΔͷ͔ʁ1ϊʔυͰى͖͍ͯΔͷ͔ʁͳͲͷ৘ใ͕෼͔Ε͹े෼ » cgroupͳͲʹΑΔϦιʔε੍ݶ͸༗ޮ͕ͩॲཧ͸ελοΫͯ͠͠·͏ͷͰ෮چखॱ΋ runbookʹ༻ҙ͓ͯ͘͠ʢಡΈඈ͹ͯ͠࠶ىಈ͢ΔखॱͳͲʣ
  24. +ΤʔδΣϯτͷߟྀࣄ߲ » xxx-agent͕ϝϞϦΛେྔʹফඅͯ͠͠·͍ͬͯΔέʔε͸͋Δ » ྫ͑͹td-agent͸pluginଆͰϦʔΫ͕ൃੜͯ͠͠·͏έʔεͳͲ͕Α͋͘Δ » ఆظతʹ࠶ىಈ͕͔͔ΔɺೖΕସΘΔΑ͏ͳ࡞ΓͳΒͦΕ·Ͱ࣋ͯ͹͍͍ͷͰϚΠφʔͳ΋ͷ͸ແࢹͰ͖Δ » ϦʔΫͷ܏޲͸ྫ͑͹process-exporterͳͲͰϢʔβʔ͝ͱͷϝϞϦ࢖༻ྔΛτϥοΫ͓ͯ͘͠ͱݕ஌Ͱ ͖ͯศར

    » ϩάΤʔδΣϯτʹؔͯ͠͸ѻ͏ϩάͷछྨʹԠͯ͡ΤʔδΣϯτΛ෼͚͓ͯ͘ͱྑ͍ » Ϗδωε෼ੳ༻ͷϩάͱγεςϜϩάͷΤʔδΣϯτ͸ཁٻ͕ҟͳΔ » ͦΕͧΕ͕ӨڹΛ༩͑ͣʹૢ࡞Ͱ͖Δͱѻ͍΍͍͢
  25. ϦʔΫՄࢹԽͷྫ

  26. case3 Ұ෦ͷ؀ڥͷ໰୊͕γεςϜશମʹӨ ڹͯ͠͠·͏࿩

  27. ൃੜͨ͠ࣄ৅ » େྔͷϩάΞϥʔτ͕ಛఆͷϓϩμΫτͰൃੜ » ϓϩμΫτϩʔϯνͷλΠϛϯά » ΞϥʔτΛ༗ޮԽͯ͠ͷෛՙࢼݧͳͲ » ΞϥʔτΛॲཧ͢ΔͨΊͷΩϡʔ͕٧·ΓϓϩμΫγϣϯ؀ڥͷΞϥʔτʹ ஗Ԇ͕ൃੜ

    » ഑ૹ஗ԆͷSLO͸10෼·Ͱͱ͍ͯ͠Δ͕͜ΕΛ௒͑ͯ͠·͏
  28. Ωϡʔͷͭ·Γͱ͸ » AWS/GCPͰ͸಺੡ͷyusuraͱ͍͏ruby੡ͷαʔϏε͕ΞϥʔτΛॲཧ » ໾ׂతʹ͸Alertmanagerʹ͍ۙ΋ͷ » Ωϡʔ͸୯ҰͷAmazon SQSΩϡʔʹੵ·ΕΔ » Ωϡʔ͕ੵ·ΕΔͱॲཧ͢ΔϫʔΧʔ΋εέʔϧ͢ΔΑ͏ʹͳ͍ͬͯΔ͕ɺ

    େྔͷϩάϕʔεͷΞϥʔτͳͲʹΑΓ٧·ͬͯ͠·͏͜ͱ͕͋Δ » Ωϡʔ͕େྔʹੵ·ΕΞϥʔτ͕஗Ԇ͢Δ͜ͱ͕ෳ਺ճൃੜ
  29. Կ͕͓͖ͨͷ͔

  30. Կ͕͓͖ͨͷ͔

  31. Կ͕͓͖ͨͷ͔

  32. Կ͕͓͖ͨͷ͔

  33. ࣮૷໘ͰͷվળରԠ » ֤छηʔϑςΟͷ࣮૷ » ֤छ੍ݶػೳͷ࣮૷ » rate limitͷ࣮૷ » ಉҰΞϥʔτͷsuppressɺsummarize

    » ϩδοΫ͕୯७Ͱෛՙ͕௿͘ػೳ͢Δ΋ͷ͔Βॱʹࢪߦ » ۓٸ࣌ͷϓϩμΫτ͝ͱͷ࡟আػೳΛఏڙ͢ΔlambdaϑΝϯΫγϣϯ
  34. ঢ়گͷՄࢹԽ » Ωϡʔͷॲཧɺ஗Ԇঢ়گΛՄࢹԽ » ֤ϓϩμΫτ͝ͱͷॲཧ਺ͳͲ͸ϫʔ Χʔࣗ਎͕exportͯ͠ՄࢹԽ » ಛఆͷϓϩμΫτىҼͰ͋Δ͜ͱ͕Θ ͔ͬͨΒରԠґཔ

  35. Lesson Learned » جຊతʹ͸Ωϡʔ͸٧·ΒͤͨΒΞ΢τ » ڞ༻γεςϜ͸ಛఆͷ؀ڥ͔Βͷෛՙ͕શମʹӨڹΛٴ΅͞ͳ͍Α͏ઃܭ͢ Δ » ਓ͕ؒΈΔ͜ͱͷͰ͖Δ௨஌͸ݶΒΕΔͷͰɺಉҰɺࣅ͍ͯΔ௨஌͸ੵۃత ʹdrop͍ͯͬͯ͠Α͍

    » શମͷՄ༻ੑɺ଎ใੑΛ༏ઌ͢Δ
  36. Recap

  37. Recap » ؍ଌίετ͸جຊతʹ͸ແࢹͰ͖Δ͕ɺ૝ఆ֎ͷίετ͕͔͔Δ͜ͱ͕͋Δ » γεςϜͷڥք෦෼͸ಛʹؾʹ͓ͯ͘͠ͱྑ͍ » ૹ৴ઌͷμ΢ϯͳͲ͸ࣄલʹ૝ఆɺݕূͰ͖͍ͯΔͱΑ͍ » ࠶ૹ͕ͲͷΑ͏ͳස౓ɺΞϧΰϦζϜͰߦΘΕΔ͔ »

    ਓؒ΁ͷ௨஌Λ໨తͱͨ͠ΤʔδΣϯτ͸଎ใੑɺՄ༻ੑΛ༏ઌ͢Δ » ݹ͘ͳͬͨ৘ใΛ࣌ؒΛ͔͚ͯ௨஌͢Δ͜ͱʹ͸͋·Γҙຯ͸ͳ͍ » ڞ༻ج൫Ͱ͸ಛఆ؀ڥͷ໰୊͕શମʹӨڹΛٴ΅͠ʹ͍͘Α͏ʹઃܭ͢Δ » ؍ଌͷͨΊͷ࢓૊Έͦͷ΋ͷ΋؍ଌ͢Δ
  38. thank you for listening

  39. who? » Sohei Iwahori (@egmc) » GREE, Inc. » Πϯϑϥ

    / Monitoring Unit Leader » ήʔϜͷΠϯϑϥͱαʔό؂ࢹɺओʹ AWS
  40. Appendix » How to troubleshoot remote write issues in Prometheus

    » https://grafana.com/blog/2021/04/12/how-to-troubleshoot-remote- write-issues-in-prometheus/ » REMOTE WRITE TUNING » https://prometheus.io/docs/practices/remote_write/ » Remote write not honoring max_retries setting #5636 » https://github.com/prometheus/prometheus/issues/5636
  41. Appendix » 10೥΋ͷͷϝτϦΫεऩूػߏΛϦϓϨʔεͨ͠࿩ » https://labs.gree.jp/blog/2021/10/21408/