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

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

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

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

Tomokazu Kiyohara

May 16, 2015
Tweet

More Decks by Tomokazu Kiyohara

Other Decks in Technology

Transcript

  1. Web API Λσόοά͢Δͱ͖ʹඞཁͳ

    ͨͬͨͻͱͭͷ͜ͱ
    2015/05/16 - Kanazawa.rb meetup 33

    View Slide

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

    View Slide

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

    View Slide

  4. Web API ͷಛ௃
    • ଟ਺ͷߏ੒ཁૉ
    • ϩʔυόϥϯα, ϦόʔεϓϩΫγ, Ξϓέʔγϣϯαʔόʔ,
    DB ...
    • ϓϩηε, εϨου …
    • ଟ਺ͷฒྻॲཧ
    • ෳ਺ΫϥΠΞϯτ, ଟॏ API ίʔϧ …

    View Slide

  5. client
    A
    client
    B
    RP
    RP
    App
    Server
    App
    Server
    DB
    DB
    Process
    α
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    Process
    β
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    LB
    client A ͔Βͷ
    API ίʔϧ x ͷ
    ॲཧύεΛಛఆͯ͠
    ͦΕͧΕͷ log Λ
    ໨ grep ͯ͠…

    View Slide

  6. ͦΜͳ૷උͰେৎ෉͔ʁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. ͔͜͠͞ͷछ
    • ϩΪϯάશൠ
    • ͍Ζ͍Ζ͋Δɻ͓͓͍ɻ
    • ͓άάΓ͍ͩ͘͞ɻ
    • Web API ʹߜΔͱ
    • ू໿ͱࣝผ

    View Slide

  11. ू໿ͱࣝผ

    View Slide

  12. ू໿ͱࣝผ

    View Slide

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

    View Slide

  14. ू໿ͱࣝผ

    View Slide

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

    View Slide

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

    View Slide

  17. ͩΕ͕ൃߦʁ

    View Slide

  18. client
    A
    client
    B
    RP
    RP
    App
    Server
    App
    Server
    DB
    DB
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    LB
    APIΫϥΠΞϯτʹ
    ΋ͬͱ΋͍ۙߏ੒ཁૉ
    ೖΕ΍͍͢ͷ͸͜ͷล

    View Slide

  19. Ͳ͏΍ͬͯ఻ൖʁ

    View Slide

  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

    View Slide

  21. γϯϓϧͳ࿩

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. client
    A
    client
    B
    RP
    RP
    App
    Server
    App
    Server
    DB
    DB
    ɾ
    ɾ
    ɾ
    LB

    API Call

    ࣝผࢠൃߦ
    LB
    ᶃ'
    API Call ᶄ'
    ࣝผࢠൃߦ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ

    View Slide

  26. client
    A
    client
    B
    RP
    RP
    App
    Server
    App
    Server
    DB
    DB
    ɾ
    ɾ
    ɾ
    LB

    API Call

    ࣝผࢠൃߦ
    LB
    ᶃ'
    API Call ᶄ'
    ࣝผࢠൃߦ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ

    View Slide

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

    View Slide

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

    View Slide

  29. client
    A
    client
    B
    RP
    RP
    App
    Server
    App
    Server
    DB
    DB
    ɾ
    ɾ
    ɾ
    LB

    API Call

    ࣝผࢠൃߦ
    LB
    ᶃ'
    API Call ᶄ'
    ࣝผࢠൃߦ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ

    View Slide

  30. client
    A
    client
    B
    RP
    RP
    App
    Server
    App
    Server
    DB
    DB
    ɾ
    ɾ
    ɾ
    LB

    API Call

    ࣝผࢠൃߦ
    LB
    ᶃ'
    API Call ᶄ'
    ࣝผࢠൃߦ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ɾ
    ࣝผࢠൃߦ
    αʔόʔ
    ×
    The ϘτϧωοΫ

    View Slide

  31. ෼ࢄܕϢχʔΫIDੜ੒໰୊

    View Slide

  32. ෼ࢄܕ࠾൪ख๏
    • ෼ࢄͨ͠࠾൪؀ڥͦΕͧΕͰཱࣗతʹ࠾൪Մೳ

    Ͱ͋Δ͜ͱ
    • ࠾൪݁Ռ͕ઈରʹিಥ͠ͳ͍͜ͱ

    View Slide

  33. ෼ࢄܕ࠾൪ख๏
    • ෼ࢄͨ͠࠾൪؀ڥͦΕͧΕͰཱࣗతʹ࠾൪Մೳ

    Ͱ͋Δ͜ͱ
    • ࠾൪݁Ռ͕ઈରʹিಥ͠ͳ͍͜ͱ

    View Slide

  34. ෼ࢄܕ࠾൪ख๏
    • ෼ࢄͨ͠࠾൪؀ڥͦΕͧΕͰཱࣗతʹ࠾൪Մೳ

    Ͱ͋Δ͜ͱ
    • ࠾൪݁Ռͷিಥ֬཰͕ӡ༻͞ΕΔγεςϜʹ͓͍ͯ

    े෼ʹ௿֬཰Ͱ͋Δ͜ͱ

    View Slide

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

    View Slide

  36. ෼ࢄܕ࠾൪ख๏
    • ԋࢉίετ໰୊
    • Snowflake
    • Twitter ͷ Tweet ID ੜ੒ख๏
    • িಥ֬཰͸্͕Δ
    • Twitter ʹͱͬͯ͸े෼௿֬཰

    View Slide

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

    View Slide

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

    View Slide