2018年12月01日 に開催された 第25回中国地方DB勉強会 in 鳥取でのLTセッションの資料です。
株式会社オミカレ ( https://party-calendar.net/ ) で実践している DBのエラーをなるべく早く検知する為の仕組みについて 発表します。
DBͷোΛͳΔૣͰݕ͢Δٕज़2018-12-01 தࠃํDBษڧձ in ௗऔ(٢)JPUG தࠃࢧ෦ ߴڮ Ұٍ
View Slide
ઌͷ PG Conference Japan 2018 ɻɻɻʮ͜Μͳख๏͕͋ͬͨͷ͔ʂʯʮ݄༵͔Βਅࣅ͢Δʂʯʮ͜͜ࠔͬͯͨΜͩʂʯ
ࣗͷఆҎ্ʹڹͷ͋ͬͨRDSͷোݕͷख๏Λ͝հ
͓͠ͳ͕͖1. DBোݕΛͳͥΔͷ͔2. DBোΛͲ͏ͬͯࢹ͢Δͷ͔3. ·ͱΊ
1. DBোݕΛͳͥΔͷ͔
1. DBোݕΛԿނΔͷ͔.• ݱࡏΦϛΧϨDBϦϑΝΫλϦϯάΛ͍ͬͯΔɻ• DMSͰσʔλҠߦ => τϦΨʔͰσʔλΛมͯ͠৽εΩʔϚొ ͱ͍͏ྲྀΕɻ※ ৄ͘͠ PGconf2018ͷεϥΠυΛɻh-ps://speakerdeck.com/takahashiikki/postgresqljapan2018
1. DBোݕΛԿނΔͷ͔.• ΞʔΩςΫνϟͷੑ্࣭ɺτϦΨʔ͕ίέΔͱDBҠߦ͕ࢭ·ΔɻDBҠߦ͕ࢭ·ΔͱAPI͕ίέΔɻAPI͕ίέΔͱɾɾαʔϏε͕ࢭ·Δɻ• τϦΨʔͷΤϥʔΛݕͯ͠োʹͳΔલʹରԠ͢Δࣄ͕ඞਢ• ݱࡏɺϲ݄ͷӡ༻ܦݧ্ɺఆ֎ͷσʔλ͕ೖΔ͜ͱʹΑΔτϦΨʔͦΕͳΓʹ͋Δɻ
αʔϏεΛࢭΊͳ͍ҝʹΤϥʔΛݕ͢Δɻ
2. DBোΛͲ͏ͬͯݕ͢Δͷ͔ɻ
AWS (RDS)ͷϩάͱ͍͑ɻɻɻ• AWS CloudWatch LogsʂRDSͰɺDBϩάΛCloudWatch Logsʹు͖ग़͢͜ͱ͕ग़དྷΔɻ=> ͜Ε͕͋Ε SNSͱ͔৭ΜͳࣄͰࢹग़དྷͦ͏ʂ
AWS (RDS)ͷϩάͱ͍͑ɻɻɻ• AWS CloudWatch LogsʂRDSͰɺDBϩάΛCloudWatch Logsʹు͖ग़͢͜ͱ͕ग़དྷΔɻ=> ͜Ε͕͋Ε SNSͱ͔৭ΜͳࣄͰࢹग़དྷͦ͏ʂ※ RDS for MySQL ͰͷΈରԠ.
h"ps://dev.classmethod.jp/cloud/aws/amazon-rds-logs-download-9ps/
ཁ͢Δͱ...• RDSͷϩά AWS SDKͷؔΛͬͯશߦऔಘग़དྷΔ.• ؔʹऔಘ։࢝ҐஔΛࢦఆग़དྷΔ.ͭ·ΓɺطʹಡΜͩҐஔΛඈͨ͠ঢ়ଶͰॲཧग़དྷΔɻ
ඞཁͳཁ݅• ఆظతʹSDKΛୟ͍ͯϩάΛϙʔϦϯά͢Δɻ• લճͷੳҐஔΛ͓͍֮͑ͯͯલճͷੳඈ͢ɻ• ΤϥʔΛݟ͚ͭͨ࣌ʹ௨͢Δɻ
ఆظతʹSDKΛୟ͘ฐࣾʹͱͯৄ͍͠ํ͕ډͨͷͰMackerelΛར༻
ఆظతʹSDKΛୟ͘--------------------------------------------------[plugin.checks.ҙͷ໊લ]command = "php /path/to/check_rds_log.php"check_interval = 5--------------------------------------------------• MackerelͷઃఆʹΑͬͯɺ5ʹҰճࢦఆͨ͠ίϚϯυΛ࣮ߦͯ͘͠ΕΔɻ
طʹಡΜͩඈ͢ɻ• Ґஔ Marker ͱݺΕɺ Ͱཧ͞Ε͍ͯ·͢ɻ• JPUGͷཧࣄͳͷͰɺ.jsonϑΝΠϧͰཧ͢Δࣄʹ͠·ͨ͠ɻ
ΤϥʔΛݟ͚ͭͨ࣌ʹ௨Λඈ͢ɻ--------------------------------------------------[plugin.checks.ҙͷ໊લ]command = "php /path/to/check_rds_log.php"check_interval = 5--------------------------------------------------• MackerelͷcheckϓϥάΠϯʹ࣮ͯݱ͍ͯ͠·͢ɻ• ίϚϯυͰҎԼͰऴྃͤ͞ΔࣄͰ checkϓϥάΠϯʹҟৗݕͤ͞Δࣄ͕ग़དྷ·͢ɻexit(1) ... WARNINGexit(2) ... CRITICAL• MackerelଆͷઃఆͰ WARNINGͷ࣌ͷৼΔ͍ͱͯ͠Slackʹ௨͢Δ ΛࠐΜͰରԠɻ
ΤϥʔͷఆϩδοΫ• :ERROR: ͱ͍͏จࣈྻ͕͋Δ͔Ͳ͏͔ɻ (ײ֒ਂ͍)• :ERROR: ͕͋Ε1~2ߦԼΛߋʹௐࠪͯ͠:DETAIL: ͱ͔ :CONTEXT: ͕͋ΕҰॹʹरͬͯ͘Δɻ
ΞʔΩςΫνϟ ·ͱΊ• PHPͰॻ͔ΕͨϓϩάϥϜΛMackerelͰ5͓͖ʹ࣮ߦ͢Δɻ• ϓϩάϥϜͰɺΤϥʔߦΛఆͯ͠ௐࠪʹཱͭใΛ௨͢Δɻ• طʹௐࠪͨ͠෦ .jsonϑΝΠϧʹు͖ग़ͯ͠ skip͢Δɻ
3. ·ͱΊ
͜ͷΞʔΩςΫνϟͰ5ϲ݄ͬͨ.• Τϥʔ͕͙͢ʹ௨͞ΕΔͷͰຊɺศརɻ• ΞʔΩςΫνϟճΞοϓσʔτͯͯ͠ɺ:DETAIL: ͳͲͷΤϥʔৄࡉΛऔΔΑ͏ʹͳͬͨͷ࠷ۙɻ• SQLྲྀͦ͏ͱͨ࣌͠ͷ syntax error ௨͞ΕΔͷͰΧδϡΞϧʹSQLΛ͛ΔͱౖΒΕΔɻʮ͢Έ·ͤΜɺ͕SQLؒҧ͑·ͨ͠ʯͬͯSlackʹߘ͢Δɻ
ศརͳ෦.• :ERROR: Ͱ௨͞ΕΔࣄ͕͔͍ͬͯΔͷͰɺτϦΨʔͰϩάʹ :ERROR: ͬͯॻ͍ͯσόοάϝοηʔδΛॻ͘ࣄͰ௨͍ͨ͠༰ΛϋοΫग़དྷΔɻ• ༻ྫɿ :ERROR: delete_flag return 1 to 0• MackerelͷػೳͰ CRITICAL ͔Β NORMAL ʹͬͨλΠϛϯάͰ௨͞ΕΔͷͰɺରԠྃΛϩάਫ਼ࠪʹΑͬͯΔࣄ͕ग़དྷΔɻ
՝ͷ෦.• SQLྲྀͦ͏ͱͨ࣌͠ͷ syntax error ௨͞ΕΔͷͰΧδϡΞϧʹSQLΛ͛ΔͱౖΒΕΔɻ※ʮ͢Έ·ͤΜɺ͕SQLؒҧ͑·ͨ͠ʯͬͯSlackʹߘ• (ઃఆͷ) ϝοηʔδͰຊޠΛॻ͘ͱจࣈԽ͚͢ΔͷͰɺ͑ͳ͍ɻ• ͦͷҝɺσόοάϝοηʔδΛӳޠͰॻ͔͟ΔΛಘͳͯ͘ଐਓԽ͕ͪ͠ɻ
૯ׅ• ૯ׅͱͯ͠ΊͪΌͪ͘Όָʹͳͬͨɻ• ઈ͑ͣಈ͘ͷͰ ʮΞϥʔτ͕དྷͯͳ͍ʯ=> ʮτϦΨʔΤϥʔ͕ແ͍ʯ͕୲อग़དྷΔͷͰ҆৺ײ͕͋Δɻ• ࢥͬͯΔΑΓఆ֎ͷσʔλ͕ೖΔɻ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ