Web API をデバックするときに必要なたったひとつのこと

Web API をデバックするときに必要なたったひとつのこと

Web API 開発の観点からみたロギングのコツについて。
kanazawa.rb meetup 33 発表資料。

Cb057b585817007ba2a931a81ef9398f?s=128

Tomokazu Kiyohara

May 16, 2015
Tweet

Transcript

  1. Web API Λσόοά͢Δͱ͖ʹඞཁͳ
 ͨͬͨͻͱͭͷ͜ͱ 2015/05/16 - Kanazawa.rb meetup 33

  2. ͔͍͜͠ϩΪϯά ͨ͑͜

  3. ͔͍͜͠ϩΪϯά ͨ͑͜

  4. Web API ͷಛ௃ • ଟ਺ͷߏ੒ཁૉ • ϩʔυόϥϯα, ϦόʔεϓϩΫγ, Ξϓέʔγϣϯαʔόʔ, DB

    ... • ϓϩηε, εϨου … • ଟ਺ͷฒྻॲཧ • ෳ਺ΫϥΠΞϯτ, ଟॏ API ίʔϧ …
  5. client A client B RP RP App Server App Server

    DB DB Process α ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ Process β ɾ ɾ ɾ ɾ ɾ ɾ LB client A ͔Βͷ API ίʔϧ x ͷ ॲཧύεΛಛఆͯ͠ ͦΕͧΕͷ log Λ ໨ grep ͯ͠…
  6. ͦΜͳ૷උͰେৎ෉͔ʁ

  7. –T.K, 2013 “։ൃ؀ڥ͸ͦΜͳෳࡶ͡Όͳ͍ɻෳ਺ Terminal ։͍ͯ log Λ tail ͓͚ͯ͠͹े෼ɻ”

  8. –T.K, 2014 “։ൃ؀ڥ͸ෳࡶͩͬͨ”

  9. –T.K, 2015 “ຊ౰ͷόά͸ӡ༻؀ڥʹͦ͜જΉ”

  10. ͔͜͠͞ͷछ • ϩΪϯάશൠ • ͍Ζ͍Ζ͋Δɻ͓͓͍ɻ • ͓άάΓ͍ͩ͘͞ɻ • Web API

    ʹߜΔͱ • ू໿ͱࣝผ
  11. ू໿ͱࣝผ

  12. ू໿ͱࣝผ

  13. ϩάͷू໿ • ͢Ͱʹ༷ʑͳΞϓϩʔν͕͋Δ • ݹ͘͸ syslog • ΠϚυΩ͸ fluentd

  14. ू໿ͱࣝผ

  15. ϩάͷࣝผ • API Call Λࣝผ͢Δ • ߏ੒ཁૉԣஅͰࣝผ • αʔό΍ϓϩηεΛ·͍ͨͰ΋ࣝผͰ͖Δ͜ͱ͕େࣄ •

    API Call ຖʹࣝผ • ΫϥΠΞϯτຖͰ͸ͳ͘ Call ຖͰ͋Δ͜ͱ͕େࣄ
  16. Ͳ͏΍ͬͯʁ • ࣝผࢠΛൃߦͯ͠ߏ੒ཁૉؒͰ఻ൖ • ͩΕ͕ൃߦʁ • Ͳ͏΍ͬͯ఻ൖʁ

  17. ͩΕ͕ൃߦʁ

  18. client A client B RP RP App Server App Server

    DB DB ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ LB APIΫϥΠΞϯτʹ ΋ͬͱ΋͍ۙߏ੒ཁૉ ೖΕ΍͍͢ͷ͸͜ͷล
  19. Ͳ͏΍ͬͯ఻ൖʁ

  20. ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ client

    A client B RP RP App Server App Server DB DB ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ LB ᶃ API Call ᶄ ࣝผࢠൃߦ ᶅ ࣝผࢠ෇͖ Ͱ logging ᶆ ࣝผࢠ෇͖ ͰIPC(call) ᶇ ࣝผࢠ෇͖ Ͱ logging ᶈ ࣝผࢠ෇͖ ͰIPC(call) ᶉ ࣝผࢠ෇͖ Ͱ logging ᶊ ࣝผࢠ෇͖ ͰIPC(call) ᶋ ࣝผࢠ෇͖ Ͱ logging ᶌ ࣝผࢠ෇͖ ͰIPC(res) ᶎ ࣝผࢠ෇͖ ͰIPC(res) ᶍ ࣝผࢠ෇͖ Ͱ logging ᶏ ࣝผࢠ෇͖ Ͱ logging ᶐ ࣝผࢠ෇͖ ͰIPC(res) ᶑ ࣝผࢠ෇͖ Ͱ logging ᶒ API Response
  21. γϯϓϧͳ࿩

  22. ԡ͑͞Δ΂͖ϙΠϯτ͕ ΋͏ͻͱͭ

  23. Ͳ͏΍ͬͯʁ • ࣝผࢠΛൃߦͯ͠ߏ੒ཁૉؒͰ఻ൖ • ͩΕ͕ൃߦʁ • Ͳ͏΍ͬͯ఻ൖʁ

  24. Ͳ͏΍ͬͯʁ • ࣝผࢠΛൃߦͯ͠ߏ੒ཁૉؒͰ఻ൖ • ͩΕ͕ൃߦʁ • Ͳ͏΍ͬͯൃߦʁ • Ͳ͏΍ͬͯ఻ൖʁ New!

  25. client A client B RP RP App Server App Server

    DB DB ɾ ɾ ɾ LB ᶃ API Call ᶄ ࣝผࢠൃߦ LB ᶃ' API Call ᶄ' ࣝผࢠൃߦ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ
  26. client A client B RP RP App Server App Server

    DB DB ɾ ɾ ɾ LB ᶃ API Call ᶄ ࣝผࢠൃߦ LB ᶃ' API Call ᶄ' ࣝผࢠൃߦ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ
  27. ϩάͷࣝผ • API Call Λࣝผ͢Δ • ߏ੒ཁૉԣஅͰࣝผ • αʔό΍ϓϩηεΛ·͍ͨͰ΋ࣝผͰ͖Δ͜ͱ͕େࣄ •

    API Call ຖʹࣝผ • ΫϥΠΞϯτຖͰ͸ͳ͘ Call ຖͰ͋Δ͜ͱ͕େࣄ
  28. ϩάͷࣝผ • API Call Λࣝผ͢Δ • ߏ੒ཁૉԣஅͰࣝผ • αʔό΍ϓϩηεΛ·͍ͨͰ΋ࣝผͰ͖Δ͜ͱ͕େࣄ •

    API Call ຖʹࣝผ • ΫϥΠΞϯτຖͰ͸ͳ͘ Call ຖͰ͋Δ͜ͱ͕େࣄ Ұҙੑ (Uniqueness)
  29. client A client B RP RP App Server App Server

    DB DB ɾ ɾ ɾ LB ᶃ API Call ᶄ ࣝผࢠൃߦ LB ᶃ' API Call ᶄ' ࣝผࢠൃߦ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ
  30. client A client B RP RP App Server App Server

    DB DB ɾ ɾ ɾ LB ᶃ API Call ᶄ ࣝผࢠൃߦ LB ᶃ' API Call ᶄ' ࣝผࢠൃߦ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ɾ ࣝผࢠൃߦ αʔόʔ × The ϘτϧωοΫ
  31. ෼ࢄܕϢχʔΫIDੜ੒໰୊

  32. ෼ࢄܕ࠾൪ख๏ • ෼ࢄͨ͠࠾൪؀ڥͦΕͧΕͰཱࣗతʹ࠾൪Մೳ
 Ͱ͋Δ͜ͱ • ࠾൪݁Ռ͕ઈରʹিಥ͠ͳ͍͜ͱ

  33. ෼ࢄܕ࠾൪ख๏ • ෼ࢄͨ͠࠾൪؀ڥͦΕͧΕͰཱࣗతʹ࠾൪Մೳ
 Ͱ͋Δ͜ͱ • ࠾൪݁Ռ͕ઈରʹিಥ͠ͳ͍͜ͱ

  34. ෼ࢄܕ࠾൪ख๏ • ෼ࢄͨ͠࠾൪؀ڥͦΕͧΕͰཱࣗతʹ࠾൪Մೳ
 Ͱ͋Δ͜ͱ • ࠾൪݁Ռͷিಥ֬཰͕ӡ༻͞ΕΔγεςϜʹ͓͍ͯ
 े෼ʹ௿֬཰Ͱ͋Δ͜ͱ

  35. ෼ࢄܕ࠾൪ख๏ • େ͖ͳܻ਺ͷϥϯμϜจࣈྻ • UUID

  36. ෼ࢄܕ࠾൪ख๏ • ԋࢉίετ໰୊ • Snowflake • Twitter ͷ Tweet ID

    ੜ੒ख๏ • িಥ֬཰͸্͕Δ • Twitter ʹͱͬͯ͸े෼௿֬཰
  37. ·ͱΊ • Web API ʹ͓͚Δ͔͍͜͠ϩΪϯά • ऩूͱࣝผΛ࣮ݱ͢Δ • ࣝผࢠʹ͸෼ࢄܕϢχʔΫIDੜ੒ख๏Λ΋͍ͪΔ

  38. Thank you Tomokazu Kiyohara http://github.com/kiyohara http://facebook.com/tomokazu.kiyohara