#JULFZ*OD$POOFDU1SPEVDU/PSJLJ5BLBIBTIJOpenTelemetryೖGo
View Slide
0VUMJOF1. ࣗݾհ2. OpenTelemetry ͱ3. Go Ͱ OpenTelemetryೖ4. ·ͱΊ
1. ࣗݾհ● OSOSL ͷΓͷΓ͖○ ຊ໊ߴڮయੜ ͔ͨ͠ͷΓ͖○ 5XJUUFS!OPSJOPSJLJ○ (JU)VCOSOSL● גࣜձࣾ#JULFZ○ CJULFZQMBUGPSNͱ͍͏zΧΪzͷϓϥοτϑΥʔϜͷ։ൃ● ओʹ͚ࣾͷΧΪͷϓϥοτϑΥʔϜαʔϏεΛ(PͰఏڙ͍ͯ͠·͢● झຯֶɾཧֶ○ [L4/"3,Tͷֶతͳଆ໘ΛטΈࡅ͘هࣄΛॻ͍ͨΓͯ͠·͢
● #JULFZͷͭͷࣄۀυϝΠϯ○ )PNFʢΒ͠ʣ○ 8PSLTQBDFʢಇ͘ʣ○ &YQFSJFODFʢඇৗͷମݧʣ● CJULFZQMBUGPSN○ ͭͷIVCΞϓϦέʔγϣϯͷج൫1. ࣗݾհςΫϊϩδʔͷྗͰ͋ΒΏΔͷΛ҆શͰศརͰؾ࣋ͪΑ͘ʮͭͳ͛Δʯ
● ࠓͷ͓ͷϞνϕʔγϣϯ○ ͔͍͍͚ͬ͜Ͳͪΐͬͱෑډͷߴ͍0QFO5FMFNFUSZ■ ˡCJULFZQMBUGPSNϚΠΫϩαʔϏεΞʔΩςΫνϟΛ࠾༻͍ͯ͠Δ○ େͷઆ໌ಋೖ࣌ʹཱͭใ 3FHJTUSZͳͲΛڞ༗■ ˠ(PͰͷಋೖͷෑډΛ͍ͨ͘͠○ Α͚Εɺৄ͍͠ਓʹڭ͑ͯΒ͍͍ͨ1. ࣗݾհ
OpenTelemetry ͱ
● 0QFO5FMFNFUSZ○ lςϨϝτϦʔσʔλz ϝτϦΫεɺϩάɺτϨʔεΛܭଌ͠ɺऩू͢ΔͨΊͷπʔϧ܈2. OpenTelemetry ͱhttps://opentelemetry.io/
● 0QFO5FMFNFUSZ○ lςϨϝτϦʔσʔλz ϝτϦΫεɺϩάɺτϨʔεΛܭଌ͠ɺऩू͢ΔͨΊͷπʔϧ܈2. OpenTelemetry ͱhttps://opentelemetry.io/ςϨ(Εͯ)ɾϝτϦʔ(ܭଌ͢Δ)
● 0QFO5FMFNFUSZ͕αϙʔτ͢Δ2. OpenTelemetry ͱ
● 0QFO5FMFNFUSZ͕αϙʔτ͢Δ○ 5SBDFT■ ϢʔβʔϦΫΤετ͕དྷͨͱ͖ͷΞϓϦέʔγϣϯͷશମ૾Λඳը○ .FUSJDT■ ࣮ߦ࣌ͷαʔϏεͷঢ়ଶͷܭଌ○ -PHT■ λΠϜελϯϓΛؚΉϝλσʔλ͖ͷه○ #BHHBHF■ εύϯ ޙड़ؒͷίϯςΩετΛ࣋ͬͨใͷू·Γ2. OpenTelemetry ͱ
● 0QFO5FMFNFUSZ͕αϙʔτ͢Δ○ 5SBDFT■ ϢʔβʔϦΫΤετ͕དྷͨͱ͖ͷΞϓϦέʔγϣϯͷશମ૾Λඳը○ .FUSJDT■ ࣮ߦ࣌ͷαʔϏεͷঢ়ଶͷܭଌ○ -PHT■ λΠϜελϯϓΛؚΉϝλσʔλ͖ͷه○ #BHHBHF■ εύϯ ޙड़ؒͷίϯςΩετΛ࣋ͬͨใͷू·Γ2. OpenTelemetry ͱࠓճͷ͜͜ʹ͍ͭͯ
● ࢄτϨʔγϯάαʔϏεͱͷؔ○ ࢄτϨʔγϯάαʔϏε■ (PPHMF5SBDF"1*■ "8493BZ■ 044+BFHFS ΠΣʔΨʔͳͲ○ ˠ0QFO5FMFNFUSZͷ༷ͰΠϯλʔϑΣΠε͕ڞ௨Խ2. OpenTelemetry ͱ
● ༨ஊ0QFO$FOTVTͱ͔͚͋ͬͨͲ○ 0QFO$FOTVT0QFO5SBDJOH■ 0QFO5FMFNFUSZʹ౷߹○ ͜Ε͔Β͏ͳΒ0QFO5FMFNFUSZͰྑ͍͠ɺ0QFO$FOTVTΛ͍ͬͯΔ߹͍ͣΕ0QFO5FMFNFUSZʹҠߦ͢Δ͜ͱʹͳΓͦ͏■ զʑ0QFO$FOTVT0QFO5FMFNFUSZҠߦத2. OpenTelemetry ͱ
● 0QFO5FMFNFUSZ5SBDFT͕ͳ͍ͱ͖2. OpenTelemetry ͱ
● 0QFO5FMFNFUSZ5SBDFT͕ͳ͍ͱ͖○ ࢄΞʔΩςΫνϟͷҰྫ2. OpenTelemetry ͱgatewayauthpaymentdispatcher search pollpollpoll
● 0QFO5FMFNFUSZ5SBDFT͕ͳ͍ͱ͖○ ࢄΞʔΩςΫνϟͷҰྫ2. OpenTelemetry ͱgatewayauthpaymentdispatcher search pollpollpollᶃ search αʔϏεͰΤϥʔ͕ൃੜʂ͜ΕͷݩʹͳͬͨΤϯυϢʔβʔͷϦΫΤετͲΕͩΖ͏ʁ
● 0QFO5FMFNFUSZ5SBDFT͕ͳ͍ͱ͖○ ࢄΞʔΩςΫνϟͷҰྫ2. OpenTelemetry ͱgatewayauthpaymentdispatcher search pollpollpollᶃ search αʔϏεͰΤϥʔ͕ൃੜʂ͜ΕͷݩʹͳͬͨΤϯυϢʔβʔͷϦΫΤετͲΕͩΖ͏ʁᶄ ΞϓϦέʔγϣϯ͕͍... ݪҼͱͳΔAPIΘ͔͕ͬͨɺ͍͍ͬͨͲ͜ͷϚΠΫϩαʔϏε͕ݪҼͳΜͩΖ͏͔...ʁ
OpenTelemetry ͕͜ΕΛղܾ͢Δ2. OpenTelemetry ͱ
● 0QFO5FMFNFUSZ5SBDFTΛར༻ͨ͠ՄࢹԽ2. OpenTelemetry ͱhttps://opentelemetry.io/docs/concepts/observability-primer/#distributed-traces
● 0QFO5FMFNFUSZ5SBDFTΛར༻ͨ͠ՄࢹԽ2. OpenTelemetry ͱhttps://opentelemetry.io/docs/concepts/observability-primer/#distributed-tracesܦա࣌ؒ
● 0QFO5FMFNFUSZ5SBDFTΛར༻ͨ͠ՄࢹԽ2. OpenTelemetry ͱhttps://opentelemetry.io/docs/concepts/observability-primer/#distributed-tracesܦա࣌ؒࢠؔ
● 0QFO5FMFNFUSZ5SBDFTΛར༻ͨ͠ՄࢹԽ2. OpenTelemetry ͱhttps://opentelemetry.io/docs/concepts/observability-primer/#distributed-tracesܦա࣌ؒࢠؔղܾᶃ search αʔϏεͷΤϥʔࢠؔΛͨͲΔ͜ͱ͕Ͱ͖ΔͷͰରͷΤϯυϢʔβʔͷϦΫΤετ͕ͲΕ͔Θ͔Δʂ
● 0QFO5FMFNFUSZ5SBDFTΛར༻ͨ͠ՄࢹԽ2. OpenTelemetry ͱhttps://opentelemetry.io/docs/concepts/observability-primer/#distributed-tracesܦա࣌ؒࢠؔղܾᶃ search αʔϏεͷΤϥʔࢠؔΛͨͲΔ͜ͱ͕Ͱ͖ΔͷͰରͷΤϯυϢʔβʔͷϦΫΤετ͕ͲΕ͔Θ͔Δʂղܾᶄ ԣͳϒϩοΫ(εύϯͱݺͿ)͕ϘτϧωοΫͱ͙͢Θ͔Δ
● 0QFO5FMFNFUSZ5SBDFTͷجຊ֓೦○ 4QBO■ ࣮ߦλεΫͷ୯Ґ■ τϨʔεεύϯ 4QBOͰߏ͞ΕΔ○ 5SBDFS■ 4QBOΛੜ͢Δ■ ϦΫΤετͳͲͷૢ࡞ͷ୯ҐͰੜ͞ΕΔ○ 5SBDFS1SPWJEFS■ 5SBDFSΛੜ͢Δ■ ΞϓϦέʔγϣϯͷىಈɾఀࢭͷϥΠϑαΠΫϧʹ߹ΘͤΔ͜ͱ͕ଟ͍○ 5SBDFS&YQPSUFS■ 4QBOͷใͳͲΛαʔϏεʹ࿈ܞ͢ΔɻϕϯμґଘʹͳΔͷओʹ͜͜ͷྖҬ2. OpenTelemetry ͱ
● 0QFO5FMFNFUSZ5SBDFTͷجຊ֓೦2. OpenTelemetry ͱ5SBDFS1SPWJEFS ΞϓϦέʔγϣϯ5SBDFS ϢʔβʔϦΫΤετ4QBO ॲཧͷ୯Ґ
Go Ͱ OpenTelemetryೖ
● 5SBDFTར༻ͷྲྀΕᶃ5SBDF&YQPSUFSΛఆٛᶄ5SBDF&YQPSUFS͔Β5SBDF1SPWJEFSΛੜᶅ5SBDF1SPWJEFS͔Β5SBDFSΛ࡞ᶆ5SBDFS͔Β4QBOΛ࡞ ։࢝ᶇ4QBOΛऴྃˠ($1ͷιʔείʔυྫ ެࣜυΩϡϝϯτΑΓ3. Go Ͱ OpenTelemetryೖ
3. Go Ͱ OpenTelemetryೖhttps://cloud.google.com/trace/docs/setup/go-ot?hl=ja#install-client
3. Go Ͱ OpenTelemetryೖhttps://cloud.google.com/trace/docs/setup/go-ot?hl=ja#install-clientᶃ5SBDF&YQPSUFS ͱ3FTPVSDFΛఆٛ
3. Go Ͱ OpenTelemetryೖhttps://cloud.google.com/trace/docs/setup/go-ot?hl=ja#install-clientᶄ5SBDF&YQPSUFSͱ3FTPVSDF͔Β5SBDF1SPWJEFSΛੜ
3. Go Ͱ OpenTelemetryೖhttps://cloud.google.com/trace/docs/setup/go-ot?hl=ja#install-clientᶅ5SBDF1SPWJEFS͔Β5SBDFSΛ࡞
3. Go Ͱ OpenTelemetryೖhttps://cloud.google.com/trace/docs/setup/go-ot?hl=ja#install-clientᶆ5SBDFS͔Β4QBOΛ࡞ ։࢝
3. Go Ͱ OpenTelemetryೖhttps://cloud.google.com/trace/docs/setup/go-ot?hl=ja#install-clientᶇ ରͷૢ࡞͕ऴྃͨ͠Β4QBOΛऴྃ
Span ͷ࡞ΓํΘ͔ͬͨͰ...3. Go Ͱ OpenTelemetryೖ
Ͳ͜Ͱ Span Λ࡞Εྑ͍ʁ3. Go Ͱ OpenTelemetryೖ
● 4QBOͷಋೖϙΠϯτ3. Go Ͱ OpenTelemetryೖ
● 4QBOͷಋೖϙΠϯτ○ ϚΠΫϩαʔϏεͷϘτϧωοΫ͕ؾʹͳΔ■ ˠ)551 H31$αʔόʔͰ4QBOΛ࡞○ ετϨʔδͷΞΫηεͷϘτϧωοΫ͕ؾʹͳΔ■ ˠ3%# 3FEJT ͳͲͷΞΫηεͷࡍͷΫϥΠΞϯτͰ4QBOΛ࡞○ ΞϓϦέʔγϣϯͷಛఆͷϩδοΫͷ͕ؾʹͳΔ■ ˠ4QBOΛ࡞ ͖͞΄Ͳͷྫ3. Go Ͱ OpenTelemetryೖ
ͯ͜ͱ...3. Go Ͱ OpenTelemetryೖ
echo ͷ middleware ͱ͔ॻ͘ͷ͔...zap ʹରԠ͍͚ͤͨ͞Ͳ(େมͦ͏ͩͳ͊)3. Go Ͱ OpenTelemetryೖ
ઌਓͷܙΛ͓͏3. Go Ͱ OpenTelemetryೖ
OpenTelemetry Registry3. Go Ͱ OpenTelemetryೖ
● 0QFO5FMFNFUSZ3FHJTUSZ3. Go Ͱ OpenTelemetryೖhttps://opentelemetry.io/registry/?language=go&component=instrumentationઌਓͨͪͷDPOUSJCVUJPOΛࢀߟʹͰ͖Δʂ
Registry ͷ contrib Λࢀߟʹ͢ΕطଘͷϥΠϒϥϦͷ otel ಋೖ͕ϥΫʂ3. Go Ͱ OpenTelemetryೖ
͞Βʹotel ͷ͍ํͷࢀߟʹͳΔ3. Go Ͱ OpenTelemetryೖ
echo / zap ͷྫΛ֬ೝʂ3. Go Ͱ OpenTelemetryೖ
echo ͷ contrib (Ұ෦ൈਮ)3. Go Ͱ OpenTelemetryೖ
3. Go Ͱ OpenTelemetryೖલఏFDIPNJEEMFXBSFΛ࣮͢Δ͜ͱͰPUFMରԠ͢Δ
3. Go Ͱ OpenTelemetryೖFDIP.JEEMFXBSF'VODલఏFDIPNJEEMFXBSFΛ࣮͢Δ͜ͱͰPUFMରԠ͢Δ
3. Go Ͱ OpenTelemetryೖFDIP.JEEMFXBSF'VODલఏFDIPNJEEMFXBSFΛ࣮͢Δ͜ͱͰPUFMରԠ͢ΔDPOUFYUʹUSBDFSΛೖΕ͍ͯΔ
3. Go Ͱ OpenTelemetryೖFDIP.JEEMFXBSF'VODલఏFDIPNJEEMFXBSFΛ࣮͢Δ͜ͱͰPUFMରԠ͢ΔDPOUFYUʹUSBDFSΛೖΕ͍ͯΔSFRVFTU͕དྷ͔ͯΒฦ͢·ͰͰεύϯΛ࡞
zap ͷ contrib (Ұ෦ൈਮ)3. Go Ͱ OpenTelemetryೖ
3. Go Ͱ OpenTelemetryೖ
3. Go Ͱ OpenTelemetryೖϥΠϒϥϦԽ͞Ε͍ͯΔͷͰ͜Ε͚ͩͰجຊ0,
ͳΜͱ͔͍͚ͬͯͦ͏ʂ3. Go Ͱ OpenTelemetryೖ
ͳΜͱ͔͍͚ͬͯͦ͏ʂgRPC, redis client, GORM ͋Γ·͢3. Go Ͱ OpenTelemetryೖ
·ͱΊ
● ·ͱΊ○ 0QFO5FMFNFUSZࢄγεςϜͷτϨʔγϯάʹཱͭ■ ϘτϧωοΫͷಛఆ͘͢͠ͳΔ○ 0QFO5FMFNFUSZ5SBDFTͷجຊ֓೦■ 5SBDFS1SPWJEFS5SBDFS4QBO■ ΞϓϦέʔγϣϯϢʔβʔϦΫΤετϚΠΫϩαʔϏεͷॲཧ○ ֤छϥΠϒϥϦͷ0QFO5FMFNFUSZରԠ3FHJTUSZΛࢀߟʹ͢Δͱྑ͍■ ͦͷ··͑Δ෦ଟ͍■ 5SBDFS 4QBOͷѻֶ͍Δ4. ·ͱΊ