Share
Embed
OpenTelemetryを活用したObservability入門 / Introduction to Observability with OpenTelemetry
PHPerKaigi 2025
https://phperkaigi.jp/2025/
shiro seike PRO
March 23, 2025
Transcript
29 slides
-
©Fusic Co., Ltd. 2 ࣗݾհ ͡Ίʹ ਗ਼Ո ࢙ (@seike460) S
H I R O S E I K E גࣜձࣾFusicɹϓϦϯγύϧΤϯδχΞ/ΤόϯδΣϦετ AWS User Group Leaders AWS Community Builder Serverless - ίϛϡχςΟ - JAWS-UG Fukuoka - Fukuoka.php - Fukuoka.go - Serverless Meetup Fukuoka - Cloudflare Meetup Fukuoka - JP_Stripes Fukuoka - JBUG Fukuoka -
©Fusic Co., Ltd. 3 CONTENTS ࣍ 1. Observability 2. OpenTelemetry
3. PHP/LaravelͰͷOpenTelemetryಋೖ -
©Fusic Co., Ltd. 5 Observabilityͷجૅ (Metrics/Traces/Logs) ʮObservability (Մ؍ଌੑ)ʯͱͳΜͳͷ͔ʁ γεςϜ෦ͷঢ়ଶΛ֎෦͔Β؍ଌɾѲ͢ΔೳྗΛࢦ͠ɺ ΦϒβʔόϏϦςΟͷࡾຊபͱͯ͠Α͘ΒΕΔͷ͕ϩάɾϝτϦΫεɾτϨʔεͱ͍ͬͨςϨϝτϦͰ͢
• ϩά (Logs) • ྫ֎Πϕϯτͷৄࡉͳه • ϝτϦΫε (Metrics) • CPU༻ϦΫΤετɺϨΠςϯγʔͳͲͷఆྔతࢦඪ • τϨʔε (Traces) • ୯Ұɺ·ͨϚΠΫϩαʔϏεؒΛ·͙ͨϦΫΤετܦ࿏ΛՄࢹԽ -
©Fusic Co., Ltd. 6 MonitoringͱObservability ैདྷͷࢹʢMonitoringʣࢮ׆ࢹϦιʔεࢹ͕த৺ ͔͠͠ϚΠΫϩαʔϏεαʔόʔϨεԽ͕ਐΉதͰݪҼಛఆ͕ࠔ ʹ Observability͕ॏཁͳͷɺ୯ʹʮނো͍ͯ͠Δ͜ͱʯΛΔͷͰͳ͘ɺ ʮͲ͜ͰԿ͕ى͖͍ͯΔ͔ɺͲ͏ͤΔ͔ʯ·ͰਝʹѲ͢Δ͜ͱ
ઌ΄Ͳͷ3ͭͷγάφϧΛ૬ޓʹؔ࿈͚ͯ׆༻͢Δ͜ͱͰ؍ଌྗΛൃش͢Δ ࢀߟURLɿhttps://opentelemetry.io/docs/ -
©Fusic Co., Ltd. 8 OpenTelemetryͱԿ͔ʁ OpenTelemetry (ҎԼɺOTel) CNCF (Cloud
Native Computing Foundation) ͕ओಋ͢Δ ϕϯμʔχϡʔτϥϧͳςϨϝτϦऩूج൫ • ݴޠϑϨʔϜϫʔΫΛΘͳ͍౷Ұ & SDK • PHPؚΉओཁݴޠ͚ʹAPIΛఏڙ • ଟ༷ͳΤΫεϙʔτઌ • CloudWatch, X-Ray, Datadog, Jaeger, Prometheus ૹ৴Մೳ • ϕϯμʔχϡʔτϥϧ • ޙ͔Βผͷࢹπʔϧʹม͑ͯɺΞϓϦܭଌ෦ͦͷ·· ݩʑGoogleͷOpenCensusͱOpenTracing͕౷߹ͯ͠ੜ͠ɺ ݱࡏͰ ΫϥυωΠςΟϒͳՄ؍ଌੑͷඪ४ ʹͳΓͭͭ͋Δ AWSADOT (AWS Distro for OpenTelemetry) Λ༻ҙ͢ΔͳͲڧྗʹαϙʔτ -
©Fusic Co., Ltd. 9 OpenTelemetryͷશମΞʔΩςΫνϟ OpenTelemetryҎԼͷཁૉͰߏ͞Ε·͢ 1. Instrumentation Libraries •
֤ϑϨʔϜϫʔΫ/ϥΠϒϥϦʹର͢Δܭଌίʔυ 2. OpenTelemetry API/SDKʢReceiverɺProcessor͜͜ʹʣ • ܭଌݺͼग़͠εύϯੜɺϝτϦΫεૹ৴ͳͲͷ࣮ 3. Exporter • ऩूσʔλΛ֎෦αʔϏεૹΔػೳ (OTLP, Jaeger, Prometheus ͳͲ) 4. Collector • OTelσʔλΛड͚औΓɺόονॲཧϑΟϧλɺΤΫεϙʔτΛߦ͏ 5. Backend • σʔλΛՄࢹԽɾੳ͢ΔͨΊͷϓϥοτϑΥʔϜ (GrafanaDatadogɺNew RelicɺAWS X-Ray/CloudWatch) ΞϓϦ → (OTel SDK) → Exporter → (OTel Collector) → ϞχλϦϯάπʔϧ ͱ͍͏ྲྀΕ ϕϯμʔϩοΫΠϯΛආ͚ͳ͕ΒɺࢄτϨʔεϝτϦΫεɺϩάΛ౷߹ཧ͕Մೳʹ ࢀߟURLɿhttps://opentelemetry.io/docs/demo/architecture/ -
©Fusic Co., Ltd. 10 ܭʢΠϯετϧϝϯςʔγϣϯʣ ܭʢ͚͍ͦ͏ʣͱγεςϜΞϓϦέʔγϣϯͷʮ෦Ͱى͖͍ͯΔ͜ͱʯΛ ଌఆɾऩू͢ΔͨΊͷΈΛಋೖ͢Δ͜ͱ ࣗಈܭ ΞϓϦέʔγϣϯʹ࠷খݶͷมߋΛՃ͑Δ͚ͩͰɺ πʔϧϥΠϒϥϦ͕ࣗಈతʹτϨʔεϝτϦΫεΛऩूͯ͘͠ΕΔΈ
खಈܭ ։ൃऀ͕ΞϓϦέʔγϣϯͷίʔυʹରͯ͠໌ࣔతʹܭଌͷͨΊͷॲཧΛຒΊࠐΉํ๏ ࣗಈܭ͢Δ͜ͱͰɺOpenTelemetryͷΤίγεςϜΛ؆୯ʹར༻͢Δ͜ͱ͕Մೳ -
©Fusic Co., Ltd. 11 ͳͥOpenTelemetryΛ͏ͷ͔ʁ • ҰܭΛߦ͏͜ͱͰΞʔΩςΫνϟͷมߋ͕Մೳ • Datadog, New
Relic, Jaeger, CloudWatchͳͲɺޙ͔Βࣗ༝ʹΓସ͑Մೳ [OTLP -> ϓϩτίϧϨϕϧ] • ෳγάφϧͷҰݩతऩू • τϨʔεɾϝτϦΫεɾϩάΛڞ௨ϑΥʔϚοτͰѻ͑ΔͨΊɺ؍ଌσʔλΛ༰қʹؔ࿈͚ • ίϛϡχςΟͱΤίγεςϜ • CNCFࡿԼϓϩδΣΫτͱͯ͠ਐԽ͕ૣ͘ɺϕϯμʔੵۃతʹରԠɻAWS, GCP, Azureͯ͢αϙʔτ • ΫϥυωΠςΟϒͱͷੑ • KubernetesECS/FargateͳͲࢄڥͰͷҰׅཧ (Collector) ͕༰қ • ίετͱӡ༻ෛՙͷίϯτϩʔϧ • αϯϓϦϯάCollectorઃఆͰແବͳσʔλΛૹΒͣɺίετ࠷దԽΛਤΕΔ ୯ͳΔࢹπʔϧͱҧ͍ɺʮܭଌͷඪ४తͳԼʯͱͯ͠ͷׂΛ୲͍ͬͯΔ͕େ͖͍ -
©Fusic Co., Ltd. 12 OpenTelemetryʹ Profilling͕…! • ओཁγάφϧ͕Stable • τϨʔεɺϝτϦΫεɺϩάͷ༷͕҆ఆ൛ͱཱͯ֬͠
• ϓϩϑΝΠϦϯάରԠਐߦத • CPU/ϝϞϦϓϩϑΝΠϦϯάͳͲͷγάφϧՃ͕ݕ౼͞Ε͍ͯΔ • ύϑΥʔϚϯε࠷దԽ • Auto-Instrumentation࣌ͷΦʔόʔϔουݮ͕ਐΈɺେنӡ༻Ͱಋೖࣄྫଟ ͜Ε͕࣮ݱ͢ΔͱؔϨϕϧͰͷύϑΥʔϚϯεϞχλϦϯά͕Մೳʹ…ʂʁ ࢀߟURLɿhttps://opentelemetry.io/blog/2024/state-profiling/ -
©Fusic Co., Ltd. 14 PHPͰOpenTelemetryΛ͏ཁ݅ • PHP 8.0Ҏ্ • OTel
PHP֦ுͱࣗಈܭଌ͕ඞཁ • OTel֦ு (pecl install opentelemetry) • ࣗಈܭଌΛ༗ޮʹ͢ΔC֦ு • Composerύοέʔδ • open-telemetry/sdk, open-telemetry/exporter-otlp, open-telemetry/opentelemetry-auto-laravel ͳͲ • पลϥΠϒϥϦ • gRPC௨৴ͳΒgrpc֦ுGuzzle͕ඞཁ -
©Fusic Co., Ltd. 15 LaravelͷOpenTelemetryࣗಈܭ • ୯ҰΞϓϦέʔγϣϯͳΒ #2·ͰͰOK • ෳΞϓϦέʔγϣϯ࣌ͷࢄτϨʔεͷ߹#3
• ϩάͱTraceΛؔ࿈͚Δ߹ #4·Ͱ -
©Fusic Co., Ltd. 17 Jaeger - a Distributed Tracing System
L L L L LL L LL L L LL L LL L L L L L L L L LL L LL L L L L L LL L L L LLL L LLL L L • JaegerɺࢄτϨʔγϯάͷͨΊͷOSS • ෳͷϚΠΫϩαʔϏεؒͷϦΫΤετΛ͠ɺॲཧͷྲྀΕԆՕॴΛՄࢹԽ • OpenTelemetryͱ࿈ܞͯ͠ɺτϨʔεσʔλͷऩूɾอଘɾUIදࣔ -
©Fusic Co., Ltd. 18 Jaeger <-> Laravel L L L
L LL L LL L L LL L LL L L L L L L L L LL L LL L L L L L LL L L L LLL L LLL L L main-otel-demo other-service-laravel ࠓճࢄτϨʔεͷΈΛମݧ͢ΔͨΊʹ ̎ͭͷLaravelΛ࡞͍ͯ͠·͢ɻ - main-otel-demo - other-service-caravel -
©Fusic Co., Ltd. 20 Traceͷৄࡉ ϧʔτεύϯ -> εύϯͱ͍ܗͰ ॲཧΠϕϯτ୯ҐͰঢ়گ͕ݟΕΔ ࣮ࡍͲͷΑ͏ʹॲཧ͕ߦΘΕ͍ͯΔ͔ͳͲ
SQLͷ࣮ߦͳͲؚΊͨग़ྗΛߦͬͯ͘ΕΔ ͍ΫΤϦ͕ͳΜͳͷ͔ ͱ͍͏ใҰྎવ -
©Fusic Co., Ltd. 21 ࢄτϨʔεͷൖ ϚΠΫϩαʔϏεؒͷϦΫΤετʹτϨʔεIDΛҾ͖ܧ͙ʹɺ HTTPϔομ traceparent (W3C Trace
Context) Λར༻ • Laravel͕֎෦αʔϏεʹGuzzleͰϦΫΤετΛૹΔࡍɺtraceparentΛࣗಈ༩ • ड͚औΔαʔϏεଆͰOTel͕༗ޮͳΒɺͦͷIDͰεύϯΛ։࢝ • ݁ՌɺΤϯυπʔΤϯυͰ1ͭͷτϨʔεID͕ྲྀΕɺোՕॴΛૉૣ͘ಛఆͰ͖Δ PSR-15/18ͷAuto-Instrumentationύοέʔδ͕ɺड৴࣌ & ૹ৴࣌ͷHTTPϔομૢ࡞ΛࣗಈԽ -
©Fusic Co., Ltd. 25 ϩάͷूͱτϨʔεIDͷඥ͚ • Monolog༻ϋϯυϥ (opentelemetry-logger-monolog) Λར༻ →
ϩάΛOTLPܦ༝Ͱૹ৴͠τϨʔεIDΛ༩ • ·ͨ Laravelඪ४ϩάΛΧελϚΠζ͠ɺ"[%datetime%] %trace_id% %message%" ͷܗͰϑΝΠϧग़ྗ ͜ΕʹΑΓɺޙͰτϨʔεIDΛखֻ͔ΓʹৄࡉϩάΛ͑ΔΑ͏ʹͳΓ·͢ τϨʔε + ϩάͷ࿈ܞτϥϒϧγϡʔςΟϯάΛܶతʹޮԽ͠·͢ -
©Fusic Co., Ltd. 26 AWSͷOpenTelemetryσʔλૹ৴ (Collector) AWSͰར༻͢Δ߹AWS Distro for OpenTelemetryΛར༻͢Δ
ʢOpenTelemetry Collector Λϕʔεʹͨ͠ ίϯςφΠϝʔδ Lambda ϨΠϠʔʣ • ECS(Fargate) + ADOT CollectorαΠυΧʔ • Laravelίϯςφ → 4317OTLPૹ৴ → Collector → X-Ray & CloudWatch Logs/Metrics • Lambda༻OTel Extension • LambdaͰࣗಈτϨʔεΛߦ͏ϨΠϠʔ CollectorΛ͏ͱτϨʔεΛX-RayʹɺϝτϦΫεΛCloudWatch MetricsʹͳͲॊೈʹৼΓ͚Մೳ Amazon Managed Service for PrometheusɺAmazon Managed GrafanaͳͲ͋Γ -
©Fusic Co., Ltd. 27 αϯϓϦϯά & σʔλཧ • αϯϓϦϯάઓུ •
Head-based sampling • ϦΫΤετ։࢝࣌ʹ֬ͰαϯϓϦϯά -> ॏཁͳτϨʔεΛݟಀ͢Մೳੑ • Tail-based sampling • CollectorͰશσʔλΛड͚औ͔ͬͯΒΤϥʔͷॏཁτϨʔεͷΈอଘ • ίετύϑΥʔϚϯεʹԠͯ͡ɺຊʹඞཁͳใ͕ൈ͚མͪΔՄೳੑ࣮֬ʹݕ౼ ίετΛແ੍ݶʹར༻ͯ͠Α͍༁Ͱແ͍͕ɺ αϯϓϦϯάΑΓσΟεΫͷอଘظؒΛௐઅ͢ΔͳͲผͷΞϓϩʔνͰίετ࠷దԽͨ͠΄͏͕ྑͦ͞͏ ࣮ӡ༻Ͱ࠷దͳObservabilityΛ࣮ݱ͠·͠ΐ͏ -
©Fusic Co., Ltd. 28 ·ͱΊ OpenTelemetry؍ଌͷͨΊͷඪ४ج൫ Point 01 FrameworkΛհ͢Δ͜ͱͰࣗಈܭ͕ՄೳɺΤίγεςϜʹ͔ͬΕΔ Point
02 Մ؍ଌੑΛγεςϜʹऔΓೖΕΔ͜ͱͰɺରԠೳྗͷ্ΛਤΓ·͠ΐ͏ Point 03 -
©Fusic Co., Ltd. 29 Thank You We are Hiring! https://recruit.fusic.co.jp/
͝ਗ਼ௌ͍͖ͨͩ͋Γ͕ͱ͏͍͟͝·ͨ͠