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

Golangでリクエストごとのクエリログが見たい!! kamakura.go #4 / go-query-and-request-logger

Golangでリクエストごとのクエリログが見たい!! kamakura.go #4 / go-query-and-request-logger

serinuntius

May 25, 2018
Tweet

More Decks by serinuntius

Other Decks in Technology

Transcript

  1. GolangͰϦΫΤετ͝ͱͷ
    ΫΤϦϩά͕Έ͍ͨʂʂ
    2018-05-25 kamakura.go #4 LT
    ໘ന๏ਓΧϠοΫ
    ۔઒Ѯ @_serinuntius

    View Slide

  2. ஫ҙ

    ⚠ܕ੒෼গͳΊͰ͢⚠

    View Slide

  3. Ξϯέʔτ

    View Slide

  4. ISUCON
    ஌ͬͯΒͬ͠ΌΔํʙ

    View Slide

  5. ISUCON
    ग़ͨ͜ͱ͋ΔΑͬͯํʙ

    View Slide

  6. ISUCONͱ͸ʁ

    View Slide

  7. ͓୊ͱͳΔWebαʔϏεΛ

    ܾΊΒΕͨϨΪϡϨʔγϣϯͷதͰ

    ݶք·Ͱߴ଎ԽΛਤΔ

    νϡʔχϯάότϧɺ

    ͦΕ͕ISUCONͰ͢ɻ
    ISUCONެࣜBlogͷdescriptionΑΓ

    View Slide

  8. ͪͳΈʹ๻͸
    ࣾ಺ISUCON͔͠
    ग़ͨ͜ͱ͋Γ·ͤΜ

    View Slide

  9. ࣾ಺ISUCONͰݟ͑ͨ՝୊
    • ΫΤϦͷൃߦճ਺Λߟྀ͠ͳ͚Ε͹͍͚ͳ͍

    (ൃߦճ਺͕গͳ͍ɺ஗͍͚ͩͷΫΤϦ΋͋Δ)
    w w
    • Ͳ͜ͰΫΤϦ͕ൃߦ͞Ε͍ͯΔ͔΋஌Γ͍ͨ
    • ΋ͬͱݴ͑͹ͲͷϦΫΤετͰ

    ͲΕ͚ͩݺ͹ΕͯΔ͔΋஌Γ͍ͨ
    • GoͰग़͍ͨ(ܕ͕͋ͬͨํ͕ΞϓϦͷϦϑΝΫλ͕͠қ͍)

    View Slide

  10. ࣾ಺ISUCONͰͷ
    ൓লΛ׆͔ͨ͢Ίʹ

    View Slide

  11. ΞΫηεϩΨʔ

    ͱ
    ΫΤϦϩΨʔΛ࡞ͬͨ

    View Slide

  12. github.com/serinuntius/graqt

    ര஀

    View Slide

  13. ࢖͍ํ εςοϓ1~import~
    • 2ͭͷύοέʔδΛimport͢Δ

    View Slide

  14. ࢖͍ํ εςοϓ2

    ~driverΛ؀ڥม਺Ͱ੾Γସ͑Δ~
    • driver੾Γସ͑ͱtraceΛΦϯΦϑ͢Δ

    View Slide

  15. ࢖͍ํ εςοϓ3

    ~middleware௥Ճ~
    • aliceΛ࢖͏

    View Slide

  16. ࢖͍ํ εςοϓ4

    ~SQLݺͼग़͠ݩͷcontextରԠ~
    • http.Request͔ΒcontextऔΓग़ͯ͠ɺ

    ݺͼग़͢ͱ͖ʹ౉͢

    View Slide

  17. ٕज़తͳ͜ͱ

    View Slide

  18. ϦΫΤετʹUUIDΛຒΊࠐΉ
    • middleware.go
    UUID=>ϦΫΤετͱΫΤϦΛඥ෇͚ΔͨΊ

    View Slide

  19. ϦΫΤετʹUUIDΛຒΊࠐΉ
    • middleware.go
    UUID=>ϦΫΤετͱΫΤϦΛඥ෇͚ΔͨΊ
    ίϯςΩετʹೖΕΔཧ༝

    =>ޙͰΫΤϦͱUUIDΛඥ෇͚ΔͨΊ

    View Slide

  20. ϋΠύϑΥʔϚϯεͳ
    ߏ଄ԽϩΨʔ
    • uber-go/zap
    • RLogger͕request༻ͷzapͷLogger
    ࠓճͷਃ͠༁ఔ౓ͷܕཁૉ

    View Slide

  21. ϋΠύϑΥʔϚϯεͳ
    ߏ଄ԽϩΨʔ
    {"level":"info",
    "ts":1525082389.1337767,
    "caller":"graqt/middleware.go:25",
    "msg":"",

    "time":0.011566198,
    "request_id":"5914e629-6746-42c5-
    z342-702f224f48e1",
    "path":"/user",
    "method":"POST"
    }
    • ܕΛࢦఆͯ͠Δ͔Β଎͍

    View Slide

  22. ΫΤϦΛτϨʔε͢Δ
    • shogo82148/go-sql-proxy
    • database/sql͸ͲΜͳDBʹ΋ରԠͰ͖ΔΑ͏ʹͳͬͯ
    ͍Δ
    • database/sql/driverʹ͋ΔinterfaceΛຬͨͯ͠Ε͹OK
    • ϓϩΩγ࡞ͬͯͦͷ··౉ͤ͹ϩάΛు͚ΔͷͰ͸ʁ
    • ͱ͍͏ൃ૝Ͱ࡞ΒΕͨΒ͍͠Ͱ͢*1
    *1GoݴޠͰSQLͷτϨʔεΛ͢Δ

    https://shogo82148.github.io/blog/2015/05/13/golang-sql-proxy/

    View Slide

  23. ௒φΠεͳinterfaceͩʂʂ

    (਒͑੠)
    ࠓճͷืूཁ߲ˠ

    View Slide

  24. ΫΤϦΛτϨʔε͢Δ
    • go-sql-proxyʹ͸ඪ४ͰΫΤϦϩΨʔ͕͋Δ
    • ࠓճ͸UUIDΛϩάʹు͖͍ͨؔ܎Ͱ

    ࣗલͰఆٛ

    View Slide

  25. ΫΤϦτϨʔαʔͷ࣮૷
    • tracer.go

    View Slide

  26. ΫΤϦτϨʔαʔͷ࣮૷
    • preܥͰݱࡏ࣌ࠁΛฦ͢
    • cͷcontextʹrequestͷuuid͕ೖ͍ͬͯΔ
    • ctxʹpreܥͷݱࡏ࣌ࠁ͕ೖ͍ͬͯΔ

    View Slide

  27. ࣮ࡍʹు͔ΕΔϩά
    • request.log

    {"level":"info","ts":1525082389.1337767,"caller":"graqt/middleware.go:
    25","msg":"","time":0.011566198,"request_id":"5914e629-6746-42c5-
    b342-702f224f48e1","path":"/user","method":"POST"}
    • query.log

    {"level":"info","ts":1525082389.1336403,"caller":"graqt/tracer.go:
    20","msg":"Exec","query":"INSERT INTO `user` (email,age) VALUES
    (?, ?)","args":[{"Name":"","Ordinal":
    1,"Value":"[email protected]"},
    {"Name":"","Ordinal":2,"Value":57}],"time":
    0.001157627,"request_id":"5914e629-6746-42c5-b342-702f224f48e1"}

    View Slide

  28. ͑ɺϩάు͚ͩ͘ʁ
    • ͪΐͬͱ଴ͬͯͯ
    • alpΈ͍ͨͳϩάΛूܭ͢ΔCLIΛ੡࡞த
    • ϦΫΤετ͝ͱʹΫΤϦ΋ݟΕΔΑ͏ʹ͠·͢
    • tigΛΊͬͪΌγϯϓϧʹͨ͠ૢ࡞ײͷΠϝʔδ

    View Slide

  29. ϩʔυϚοϓ
    ϩά͕ग़ΔΑ͏ʹͳͬͨ
    Kamakura.goͰLT
    (ΠϚίί)

    View Slide

  30. ϩʔυϚοϓ
    ϩά͕ग़ΔΑ͏ʹͳͬͨ
    Kamakura.goͰLT
    (ΠϚίί)
    viewerͷ࡞੒

    View Slide

  31. ϩʔυϚοϓ
    ϩά͕ग़ΔΑ͏ʹͳͬͨ
    Kamakura.goͰLT
    (ΠϚίί)
    viewerͷ࡞੒
    ISUCON༧બ௨աͯ͠

    ϒϩάͰ঺հ͢Δ

    View Slide

  32. ϩʔυϚοϓ
    ϩά͕ग़ΔΑ͏ʹͳͬͨ
    Kamakura.goͰLT
    (ΠϚίί)
    viewerͷ࡞੒
    ISUCON༧બ௨աͯ͠

    ϒϩάͰ঺հ͢Δ
    (୭͔͕graqt࢖ͬͯ)

    ISUCON༏উ͢Δ

    View Slide

  33. ϩʔυϚοϓ
    ϩά͕ग़ΔΑ͏ʹͳͬͨ
    Kamakura.goͰLT
    (ΠϚίί)
    viewerͷ࡞੒
    ISUCON༧બ௨աͯ͠

    ϒϩάͰ঺հ͢Δ
    (୭͔͕graqt࢖ͬͯ)

    ISUCON༏উ͢Δ
    100ສͰ๻ʹ

    ম೑ᇋͬͯ͘ΕΔ

    View Slide

  34. ·ͱΊ
    • serinuntius/graqtΛ࢖͑͹ɺ

    ISUCONʹศརͦ͏ͳϩά͕ు͚Δ
    • ISUCONҎ֎ʹ΋΋ͪΖΜ࢖͑Δ
    • OSSͳͷͰποίϛͱ͔ؾܰʹͲ͏ͧ
    • ISUCON༏উͯ͠ম೑ᇋͬͯ͘Ε

    View Slide