DBの障害をなる早で検知する技術/chugokudb_25_lt1

 DBの障害をなる早で検知する技術/chugokudb_25_lt1

2018年12月01日 に開催された
第25回中国地方DB勉強会 in 鳥取でのLTセッションの資料です。

株式会社オミカレ ( https://party-calendar.net/ ) で実践している
DBのエラーをなるべく早く検知する為の仕組みについて
発表します。

F891bc57aad1b6bdbf344358e7fec3cc?s=128

Takahashi Ikki

November 30, 2018
Tweet

Transcript

  1. DBͷো֐Λ ͳΔૣͰݕ஌͢Δٕज़ 2018-12-01 தࠃ஍ํDBษڧձ in ௗऔ(૔٢) JPUG தࠃࢧ෦௕ ߴڮ Ұٍ

  2. ઌ೔ͷ PG Conference Japan 2018 ɻɻɻ ʮ͜Μͳख๏͕͋ͬͨͷ͔ʂʯ ʮ݄༵͔Βਅࣅ͢Δʂʯ ʮ͜͜ࠔͬͯͨΜͩʂʯ

  3. ࣗ෼ͷ૝ఆҎ্ʹ൓ڹͷ͋ͬͨ RDSͷো֐ݕ஌ͷख๏Λ͝঺հ

  4. ͓͠ͳ͕͖ 1. DBো֐ݕ஌Λͳͥ΍Δͷ͔ 2. DBো֐ΛͲ͏΍ͬͯ؂ࢹ͢Δͷ͔ 3. ·ͱΊ

  5. 1. DBো֐ݕ஌Λͳͥ΍Δͷ͔

  6. 1. DBো֐ݕ஌ΛԿނ΍Δͷ͔. • ݱࡏΦϛΧϨ͸DBϦϑΝΫλϦϯάΛ ΍͍ͬͯΔɻ • DMSͰσʔλҠߦ => τϦΨʔͰσʔ λΛม׵ͯ͠৽εΩʔϚ΁ొ࿥

    ͱ͍͏ ྲྀΕɻ ※ ৄ͘͠͸ PGconf2018ͷεϥΠυΛɻ h-ps:/ /speakerdeck.com/takahashiikki/ postgresqljapan2018
  7. 1. DBো֐ݕ஌ΛԿނ΍Δͷ͔. • ΞʔΩςΫνϟͷੑ্࣭ɺ τϦΨʔ͕ίέΔͱDBҠߦ͕ࢭ·Δɻ DBҠߦ͕ࢭ·ΔͱAPI͕ίέΔɻ API͕ίέΔͱɾɾαʔϏε͕ࢭ·Δɻ • τϦΨʔͷΤϥʔΛݕ஌ͯ͠ো֐ʹͳΔલʹରԠ͢Δࣄ͕ඞਢ •

    ݱࡏɺ਺ϲ݄ͷӡ༻ܦݧ্ɺ૝ఆ֎ͷσʔλ͕ೖΔ͜ͱʹΑΔ τϦΨʔ͸ͦΕͳΓʹ͋Δɻ
  8. αʔϏεΛࢭΊͳ͍ҝʹ ΤϥʔΛݕ஌͢Δɻ

  9. 2. DBো֐ΛͲ͏΍ͬͯݕ஌͢Δͷ͔ɻ

  10. AWS (RDS)ͷϩάͱ͍͑͹ɻɻɻ • AWS CloudWatch Logsʂ RDSͰ͸ɺDBϩάΛCloudWatch Logsʹు͖ग़͢͜ͱ͕ग़དྷΔɻ => ͜Ε͕͋Ε͹

    SNSͱ͔৭ΜͳࣄͰ؂ࢹग़དྷͦ͏ʂ
  11. AWS (RDS)ͷϩάͱ͍͑͹ɻɻɻ • AWS CloudWatch Logsʂ RDSͰ͸ɺDBϩάΛCloudWatch Logsʹు͖ग़͢͜ͱ͕ग़དྷΔɻ => ͜Ε͕͋Ε͹

    SNSͱ͔৭ΜͳࣄͰ؂ࢹग़དྷͦ͏ʂ ※ RDS for MySQL ͰͷΈରԠ.
  12. h"ps:/ /dev.classmethod.jp/cloud/aws/amazon-rds-logs-download-9ps/

  13. ཁ໿͢Δͱ... • RDSͷϩά͸ AWS SDKͷؔ਺Λ࢖ͬͯશߦऔಘग़དྷΔ. • ؔ਺ʹ͸औಘ։࢝ҐஔΛࢦఆग़དྷΔ. ͭ·ΓɺطʹಡΜͩҐஔΛඈ͹ͨ͠ঢ়ଶͰॲཧग़དྷΔɻ

  14. ඞཁͳཁ݅ • ఆظతʹSDKΛୟ͍ͯϩάΛϙʔϦϯά͢Δɻ • લճͷ෼ੳҐஔΛ͓͍֮͑ͯͯલճͷ෼ੳ෼͸ඈ͹͢ɻ • ΤϥʔΛݟ͚ͭͨ࣌ʹ௨஌͢Δɻ

  15. ఆظతʹSDKΛୟ͘ ฐࣾʹͱͯ΋ৄ͍͠ํ͕ډͨͷͰMackerelΛར༻

  16. ఆظతʹSDKΛୟ͘ -------------------------------------------------- [plugin.checks.೚ҙͷ໊લ] command = "php /path/to/check_rds_log.php" check_interval = 5

    -------------------------------------------------- • MackerelͷઃఆʹΑͬͯɺ5෼ʹҰճࢦఆͨ͠ίϚϯυΛ࣮ߦ͠ ͯ͘ΕΔɻ
  17. طʹಡΜͩ෼͸ඈ͹͢ɻ • Ґஔ͸ Marker ͱݺ͹Εɺ ਺஋Ͱ؅ཧ͞Ε͍ͯ·͢ɻ • JPUGͷཧࣄͳͷͰɺ.jsonϑΝΠϧͰ؅ཧ͢Δࣄʹ͠·ͨ͠ɻ

  18. ΤϥʔΛݟ͚ͭͨ࣌ʹ௨஌Λඈ͹͢ɻ -------------------------------------------------- [plugin.checks.೚ҙͷ໊લ] command = "php /path/to/check_rds_log.php" check_interval = 5

    -------------------------------------------------- • MackerelͷcheckϓϥάΠϯʹ࣮ͯݱ͍ͯ͠·͢ɻ • ίϚϯυ಺ͰҎԼͰऴྃͤ͞ΔࣄͰ checkϓϥάΠϯʹҟৗݕ஌ͤ͞Δࣄ͕ग़དྷ·͢ɻ exit(1) ... WARNING exit(2) ... CRITICAL • MackerelଆͷઃఆͰ WARNINGͷ࣌ͷৼΔ෣͍ͱͯ͠ Slackʹ௨஌͢Δ Λ࢓ࠐΜͰରԠɻ
  19. Τϥʔͷ൑ఆϩδοΫ • :ERROR: ͱ͍͏จࣈྻ͕͋Δ͔Ͳ͏͔ɻ (ײ֒ਂ͍) • :ERROR: ͕͋Ε͹1~2ߦԼΛߋʹௐࠪͯ͠ :DETAIL: ͱ͔

    :CONTEXT: ͕͋Ε͹Ұॹʹरͬͯ͘Δɻ
  20. ΞʔΩςΫνϟ ·ͱΊ • PHPͰॻ͔ΕͨϓϩάϥϜΛMackerelͰ5෼͓͖ʹ࣮ߦ͢Δɻ • ϓϩάϥϜ಺Ͱ͸ɺΤϥʔߦΛ൑ఆͯ͠ ௐࠪʹ໾ཱͭ৘ใΛ௨஌͢Δɻ • طʹௐࠪͨ͠෦෼͸ .jsonϑΝΠϧʹు͖ग़ͯ͠

    skip͢Δɻ
  21. 3. ·ͱΊ

  22. ͜ͷΞʔΩςΫνϟͰ5ϲ݄૸ͬͨ. • Τϥʔ͕͙͢ʹ௨஌͞ΕΔͷͰຊ౰ɺศརɻ • ΞʔΩςΫνϟ͸਺ճΞοϓσʔτͯͯ͠ɺ :DETAIL: ͳͲͷΤϥʔৄࡉΛऔΔΑ͏ʹͳͬͨͷ΋࠷ۙɻ • SQLྲྀͦ͏ͱͨ࣌͠ͷ syntax

    error ΋௨஌͞ΕΔͷͰΧδϡΞ ϧʹSQLΛ౤͛ΔͱౖΒΕΔɻ ʮ͢Έ·ͤΜɺ๻͕SQLؒҧ͑·ͨ͠ʯͬͯSlackʹ౤ߘ͢Δɻ
  23. ศརͳ෦෼. • :ERROR: Ͱ௨஌͞ΕΔࣄ͕෼͔͍ͬͯΔͷͰɺ τϦΨʔ಺Ͱϩάʹ :ERROR: ͬͯॻ͍ͯσόοάϝοηʔδΛ ॻ͘ࣄͰ௨஌͍ͨ͠಺༰ΛϋοΫग़དྷΔɻ • ࢖༻ྫɿ

    :ERROR: delete_flag return 1 to 0 • MackerelͷػೳͰ CRITICAL ͔Β NORMAL ʹ໭ͬͨλΠϛϯά Ͱ΋ ௨஌͞ΕΔͷͰɺରԠ׬ྃΛϩάਫ਼ࠪʹΑͬͯ஌Δࣄ͕ग़དྷΔɻ
  24. ՝୊ͷ෦෼. • SQLྲྀͦ͏ͱͨ࣌͠ͷ syntax error ΋௨஌͞ΕΔͷͰ ΧδϡΞϧʹSQLΛ౤͛ΔͱౖΒΕΔɻ ※ʮ͢Έ·ͤΜɺ๻͕SQLؒҧ͑·ͨ͠ʯͬͯSlackʹ౤ߘ • (ઃఆͷ໰୊)

    ϝοηʔδͰ೔ຊޠΛॻ͘ͱจࣈԽ͚͢ΔͷͰɺ ࢖͑ͳ͍ɻ • ͦͷҝɺσόοάϝοηʔδΛӳޠͰॻ͔͟ΔΛಘͳͯ͘ ଐਓԽ͕ͪ͠ɻ
  25. ૯ׅ • ૯ׅͱͯ͠͸ΊͪΌͪ͘Όָʹͳͬͨɻ • ઈ͑ͣಈ͘ͷͰ ʮΞϥʔτ͕དྷͯͳ͍ʯ=> ʮτϦΨʔΤϥʔ ͕ແ͍ʯ͕୲อग़དྷΔͷͰ҆৺ײ͕͋Δɻ • ࢥͬͯΔΑΓ΋૝ఆ֎ͷσʔλ͕ೖΔɻ

  26. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ