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

OpenTelemetryを活用したObservability入門 / Introductio...

OpenTelemetryを活用したObservability入門 / Introduction to Observability with OpenTelemetry

PHPerKaigi 2025
https://phperkaigi.jp/2025/

shiro seike

March 23, 2025
Tweet

More Decks by shiro seike

Other Decks in Programming

Transcript

  1. ©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
  2. ©Fusic Co., Ltd. 5 Observabilityͷجૅ (Metrics/Traces/Logs) ʮObservability (Մ؍ଌੑ)ʯͱ͸ͳΜͳͷ͔ʁ γεςϜ಺෦ͷঢ়ଶΛ֎෦͔Β؍ଌɾ೺Ѳ͢ΔೳྗΛࢦ͠ɺ ΦϒβʔόϏϦςΟͷࡾຊபͱͯ͠Α͘஌ΒΕΔͷ͕ϩάɾϝτϦΫεɾτϨʔεͱ͍ͬͨςϨϝτϦͰ͢

    • ϩά (Logs) • ྫ֎΍Πϕϯτͷৄࡉͳه࿥ • ϝτϦΫε (Metrics) • CPU࢖༻཰΍ϦΫΤετ਺ɺϨΠςϯγʔͳͲͷఆྔతࢦඪ • τϨʔε (Traces) • ୯Ұɺ·ͨ͸ϚΠΫϩαʔϏεؒΛ·͙ͨϦΫΤετܦ࿏ΛՄࢹԽ
  3. ©Fusic Co., Ltd. 8 OpenTelemetryͱ͸Կ͔ʁ OpenTelemetry (ҎԼɺOTel) ͸ CNCF (Cloud

    Native Computing Foundation) ͕ओಋ͢Δ ϕϯμʔχϡʔτϥϧͳςϨϝτϦऩूج൫ • ݴޠ΍ϑϨʔϜϫʔΫΛ໰Θͳ͍౷Ұ & SDK • PHPؚΉओཁݴޠ޲͚ʹAPIΛఏڙ • ଟ༷ͳΤΫεϙʔτઌ • CloudWatch, X-Ray, Datadog, Jaeger, Prometheus ౳΁ૹ৴Մೳ • ϕϯμʔχϡʔτϥϧ • ޙ͔Βผͷ؂ࢹπʔϧʹม͑ͯ΋ɺΞϓϦܭଌ෦෼͸ͦͷ·· ݩʑ͸GoogleͷOpenCensusͱOpenTracing͕౷߹ͯ͠஀ੜ͠ɺ ݱࡏͰ͸ Ϋϥ΢υωΠςΟϒͳՄ؍ଌੑͷඪ४ ʹͳΓͭͭ͋Δ AWS΋ADOT (AWS Distro for OpenTelemetry) Λ༻ҙ͢ΔͳͲڧྗʹαϙʔτ
  4. ©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 • σʔλΛՄࢹԽɾ෼ੳ͢ΔͨΊͷϓϥοτϑΥʔϜ (Grafana΍DatadogɺNew RelicɺAWS X-Ray/CloudWatch) ΞϓϦ → (OTel SDK) → Exporter → (OTel Collector) → ϞχλϦϯάπʔϧ ͱ͍͏ྲྀΕ ϕϯμʔϩοΫΠϯΛආ͚ͳ͕Βɺ෼ࢄτϨʔε΍ϝτϦΫεɺϩάΛ౷߹؅ཧ͕Մೳʹ ࢀߟURLɿhttps://opentelemetry.io/docs/demo/architecture/
  5. ©Fusic Co., Ltd. 11 ͳͥOpenTelemetryΛ࢖͏ͷ͔ʁ • Ұ౓ܭ૷Λߦ͏͜ͱͰΞʔΩςΫνϟͷมߋ͕Մೳ • Datadog, New

    Relic, Jaeger, CloudWatchͳͲɺޙ͔Βࣗ༝ʹ੾Γସ͑Մೳ [OTLP -> ϓϩτίϧϨϕϧ] • ෳ਺γάφϧͷҰݩతऩू • τϨʔεɾϝτϦΫεɾϩάΛڞ௨ϑΥʔϚοτͰѻ͑ΔͨΊɺ؍ଌσʔλΛ༰қʹؔ࿈෇͚ • ίϛϡχςΟͱΤίγεςϜ • CNCFࡿԼϓϩδΣΫτͱͯ͠ਐԽ͕ૣ͘ɺϕϯμʔ΋ੵۃతʹରԠɻAWS, GCP, Azure͢΂ͯαϙʔτ • Ϋϥ΢υωΠςΟϒͱͷ਌࿨ੑ • Kubernetes΍ECS/FargateͳͲ෼ࢄ؀ڥͰͷҰׅ؅ཧ (Collector) ͕༰қ • ίετͱӡ༻ෛՙͷίϯτϩʔϧ • αϯϓϦϯά΍CollectorઃఆͰແବͳσʔλΛૹΒͣɺίετ࠷దԽΛਤΕΔ ୯ͳΔ؂ࢹπʔϧͱ͸ҧ͍ɺʮܭଌͷඪ४తͳԼ஍ʯͱͯ͠ͷ໾ׂΛ୲͍ͬͯΔ఺͕େ͖͍
  6. ©Fusic Co., Ltd. 12 OpenTelemetryʹ Profilling͕…! • ओཁγάφϧ͕Stable • τϨʔεɺϝτϦΫεɺϩάͷ࢓༷͕҆ఆ൛ͱཱͯ֬͠

    • ϓϩϑΝΠϦϯάରԠਐߦத • CPU/ϝϞϦϓϩϑΝΠϦϯάͳͲͷγάφϧ௥Ճ͕ݕ౼͞Ε͍ͯΔ • ύϑΥʔϚϯε࠷దԽ • Auto-Instrumentation࣌ͷΦʔόʔϔου࡟ݮ͕ਐΈɺେن໛ӡ༻Ͱ΋ಋೖࣄྫଟ਺ ͜Ε͕࣮ݱ͢Δͱؔ਺ϨϕϧͰͷύϑΥʔϚϯεϞχλϦϯά͕Մೳʹ…ʂʁ ࢀߟURLɿhttps://opentelemetry.io/blog/2024/state-profiling/
  7. ©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౳͕ඞཁ
  8. ©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දࣔ
  9. ©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
  10. ©Fusic Co., Ltd. 21 ෼ࢄτϨʔεͷ఻ൖ ϚΠΫϩαʔϏεؒͷϦΫΤετʹτϨʔεIDΛҾ͖ܧ͙ʹ͸ɺ HTTPϔομ traceparent (W3C Trace

    Context) Λར༻ • Laravel͕֎෦αʔϏεʹGuzzle౳ͰϦΫΤετΛૹΔࡍɺtraceparentΛࣗಈ෇༩ • ड͚औΔαʔϏεଆͰ΋OTel͕༗ޮͳΒɺͦͷIDͰεύϯΛ։࢝ • ݁ՌɺΤϯυπʔΤϯυͰ1ͭͷτϨʔεID͕ྲྀΕɺো֐ՕॴΛૉૣ͘ಛఆͰ͖Δ PSR-15/18౳ͷAuto-Instrumentationύοέʔδ͕ɺड৴࣌ & ૹ৴࣌ͷHTTPϔομૢ࡞ΛࣗಈԽ
  11. ©Fusic Co., Ltd. 25 ϩάͷू໿ͱτϨʔεIDͷඥ෇͚ • Monolog༻ϋϯυϥ (opentelemetry-logger-monolog) Λར༻ →

    ϩάΛOTLPܦ༝Ͱૹ৴͠τϨʔεIDΛ෇༩ • ·ͨ͸ Laravelඪ४ϩάΛΧελϚΠζ͠ɺ"[%datetime%] %trace_id% %message%" ͷܗͰϑΝΠϧग़ྗ ͜ΕʹΑΓɺޙͰτϨʔεIDΛखֻ͔ΓʹৄࡉϩάΛ௥͑ΔΑ͏ʹͳΓ·͢ τϨʔε + ϩάͷ࿈ܞ͸τϥϒϧγϡʔςΟϯάΛܶతʹޮ཰Խ͠·͢
  12. ©Fusic Co., Ltd. 26 AWS΁ͷOpenTelemetryσʔλૹ৴ (Collector) AWSͰར༻͢Δ৔߹AWS Distro for OpenTelemetryΛར༻͢Δ

    ʢOpenTelemetry Collector Λϕʔεʹͨ͠ ίϯςφΠϝʔδ ΍ Lambda ϨΠϠʔʣ • ECS(Fargate) + ADOT CollectorαΠυΧʔ • Laravelίϯςφ → 4317΁OTLPૹ৴ → Collector → X-Ray & CloudWatch Logs/Metrics • Lambda༻OTel Extension • LambdaͰࣗಈτϨʔεΛߦ͏ϨΠϠʔ CollectorΛ࢖͏ͱτϨʔεΛX-RayʹɺϝτϦΫεΛCloudWatch MetricsʹͳͲॊೈʹৼΓ෼͚Մೳ Amazon Managed Service for PrometheusɺAmazon Managed GrafanaͳͲ΋͋Γ
  13. ©Fusic Co., Ltd. 27 αϯϓϦϯά & σʔλ؅ཧ • αϯϓϦϯάઓུ •

    Head-based sampling • ϦΫΤετ։࢝࣌ʹ֬཰ͰαϯϓϦϯά -> ॏཁͳτϨʔεΛݟಀ͢Մೳੑ • Tail-based sampling • CollectorͰશσʔλΛड͚औ͔ͬͯΒΤϥʔ౳ͷॏཁτϨʔεͷΈอଘ • ίετ΍ύϑΥʔϚϯεʹԠͯ͡ɺຊ౰ʹඞཁͳ৘ใ͕ൈ͚མͪΔՄೳੑ͸࣮֬ʹݕ౼ ίετΛແ੍ݶʹར༻ͯ͠Α͍༁Ͱ͸ແ͍͕ɺ αϯϓϦϯάΑΓ΋σΟεΫͷอଘظؒΛௐઅ͢ΔͳͲผͷΞϓϩʔνͰίετ࠷దԽͨ͠΄͏͕ྑͦ͞͏ ࣮ӡ༻Ͱ࠷దͳObservabilityΛ࣮ݱ͠·͠ΐ͏