Web API 開発の観点からみたロギングのコツについて。 kanazawa.rb meetup 33 発表資料。
Web API Λσόοά͢Δͱ͖ʹඞཁͳ ͨͬͨͻͱͭͷ͜ͱ2015/05/16 - Kanazawa.rb meetup 33
View Slide
͔͍͜͠ϩΪϯάͨ͑͜
Web API ͷಛ• ଟͷߏཁૉ• ϩʔυόϥϯα, ϦόʔεϓϩΫγ, Ξϓέʔγϣϯαʔόʔ,DB ...• ϓϩηε, εϨου …• ଟͷฒྻॲཧ• ෳΫϥΠΞϯτ, ଟॏ API ίʔϧ …
clientAclientBRPRPAppServerAppServerDBDBProcessαɾɾɾɾɾɾɾɾɾɾɾɾProcessβɾɾɾɾɾɾLBclient A ͔ΒͷAPI ίʔϧ x ͷॲཧύεΛಛఆͯͦ͠ΕͧΕͷ log Λ grep ͯ͠…
ͦΜͳඋͰେৎ͔ʁ
–T.K, 2013“։ൃڥͦΜͳෳࡶ͡Όͳ͍ɻෳ Terminal։͍ͯ log Λ tail ͓͚ͯ͠ेɻ”
–T.K, 2014“։ൃڥෳࡶͩͬͨ”
–T.K, 2015“ຊͷόάӡ༻ڥʹͦ͜જΉ”
͔͜͠͞ͷछ• ϩΪϯάશൠ• ͍Ζ͍Ζ͋Δɻ͓͓͍ɻ• ͓άάΓ͍ͩ͘͞ɻ• Web API ʹߜΔͱ• ूͱࣝผ
ूͱࣝผ
ϩάͷू• ͢Ͱʹ༷ʑͳΞϓϩʔν͕͋Δ• ݹ͘ syslog• ΠϚυΩ fluentd
ϩάͷࣝผ• API Call Λࣝผ͢Δ• ߏཁૉԣஅͰࣝผ• αʔόϓϩηεΛ·͍ͨͰࣝผͰ͖Δ͜ͱ͕େࣄ• API Call ຖʹࣝผ• ΫϥΠΞϯτຖͰͳ͘ Call ຖͰ͋Δ͜ͱ͕େࣄ
Ͳ͏ͬͯʁ• ࣝผࢠΛൃߦͯ͠ߏཁૉؒͰൖ• ͩΕ͕ൃߦʁ• Ͳ͏ͬͯൖʁ
ͩΕ͕ൃߦʁ
clientAclientBRPRPAppServerAppServerDBDBɾɾɾɾɾɾɾɾɾɾɾɾLBAPIΫϥΠΞϯτʹͬͱ͍ۙߏཁૉೖΕ͍͢ͷ͜ͷล
Ͳ͏ͬͯൖʁ
ɾɾɾɾɾɾɾɾɾclientAclientBRPRPAppServerAppServerDBDBɾɾɾɾɾɾɾɾɾɾɾɾLBᶃAPI Callᶄࣝผࢠൃߦᶅࣝผࢠ͖Ͱ loggingᶆࣝผࢠ͖ͰIPC(call)ᶇࣝผࢠ͖Ͱ loggingᶈࣝผࢠ͖ͰIPC(call)ᶉࣝผࢠ͖Ͱ loggingᶊࣝผࢠ͖ͰIPC(call)ᶋࣝผࢠ͖Ͱ loggingᶌࣝผࢠ͖ͰIPC(res)ᶎࣝผࢠ͖ͰIPC(res)ᶍࣝผࢠ͖Ͱ loggingᶏࣝผࢠ͖Ͱ loggingᶐࣝผࢠ͖ͰIPC(res)ᶑࣝผࢠ͖Ͱ loggingᶒAPIResponse
γϯϓϧͳ
ԡ͑͞Δ͖ϙΠϯτ͕͏ͻͱͭ
Ͳ͏ͬͯʁ• ࣝผࢠΛൃߦͯ͠ߏཁૉؒͰൖ• ͩΕ͕ൃߦʁ• Ͳ͏ͬͯൃߦʁ• Ͳ͏ͬͯൖʁNew!
clientAclientBRPRPAppServerAppServerDBDBɾɾɾLBᶃAPI CallᶄࣝผࢠൃߦLBᶃ'API Call ᶄ'ࣝผࢠൃߦɾɾɾɾɾɾɾɾɾ
ϩάͷࣝผ• API Call Λࣝผ͢Δ• ߏཁૉԣஅͰࣝผ• αʔόϓϩηεΛ·͍ͨͰࣝผͰ͖Δ͜ͱ͕େࣄ• API Call ຖʹࣝผ• ΫϥΠΞϯτຖͰͳ͘ Call ຖͰ͋Δ͜ͱ͕େࣄҰҙੑ(Uniqueness)
clientAclientBRPRPAppServerAppServerDBDBɾɾɾLBᶃAPI CallᶄࣝผࢠൃߦLBᶃ'API Call ᶄ'ࣝผࢠൃߦɾɾɾɾɾɾɾɾɾࣝผࢠൃߦαʔόʔ×The ϘτϧωοΫ
ࢄܕϢχʔΫIDੜ
ࢄܕ࠾൪ख๏• ࢄͨ͠࠾൪ڥͦΕͧΕͰཱࣗతʹ࠾൪Մೳ Ͱ͋Δ͜ͱ• ࠾൪݁Ռ͕ઈରʹিಥ͠ͳ͍͜ͱ
ࢄܕ࠾൪ख๏• ࢄͨ͠࠾൪ڥͦΕͧΕͰཱࣗతʹ࠾൪Մೳ Ͱ͋Δ͜ͱ• ࠾൪݁Ռͷিಥ͕֬ӡ༻͞ΕΔγεςϜʹ͓͍ͯ ेʹ֬Ͱ͋Δ͜ͱ
ࢄܕ࠾൪ख๏• େ͖ͳܻͷϥϯμϜจࣈྻ• UUID
ࢄܕ࠾൪ख๏• ԋࢉίετ• Snowflake• Twitter ͷ Tweet ID ੜख๏• িಥ্͕֬Δ• Twitter ʹͱͬͯे֬
·ͱΊ• Web API ʹ͓͚Δ͔͍͜͠ϩΪϯά• ऩूͱࣝผΛ࣮ݱ͢Δ• ࣝผࢠʹࢄܕϢχʔΫIDੜख๏Λ͍ͪΔ
Thank youTomokazu Kiyoharahttp://github.com/kiyoharahttp://facebook.com/tomokazu.kiyohara