Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

OpenTelemetry PHPで始める!オブザーバビリティ入門

atsu.kg
February 10, 2024

OpenTelemetry PHPで始める!オブザーバビリティ入門

PHPでOpenTelemetryを使ってトレースを収集する:https://blog.wh-plus.co.jp/entry/2023/12/14/090000
PHPでOpenTelemetryを使ってメトリクスを収集する:https://blog.wh-plus.co.jp/entry/2024/01/05/191302
Observability Whitepaper:https://github.com/cncf/tag-observability/blob/whitepaper-v1.0.0/whitepaper.md

atsu.kg

February 10, 2024
Tweet

More Decks by atsu.kg

Other Decks in Programming

Transcript

  1. 12 DB App 10s /get-orders 遅い... product 1. コンポーネントを思い描く 2.

    ボトルネックを推測する 重い処理? slow query? 応答速度改善:シンプルなシステム
  2. 13 DB App 10s /get-orders 遅い... product 1. コンポーネントを思い描く 2.

    ボトルネックを推測する 3. 疑わしい箇所を深掘りする 重い処理? → No 応答速度改善:シンプルなシステム slow query? → Yes
  3. 14 DB App 10s /get-orders 遅い... product 1. コンポーネントを思い描く 2.

    ボトルネックを推測する 3. 疑わしい箇所を深掘りする 重い処理? → No slow query? → Yes このやり方が通用する内は 問題になりづらい 応答速度改善:シンプルなシステム
  4. 16 App 10s /get-orders 遅い... product DB App3 App2 1.

    コンポーネントを思い描く(正確性が課題) DB2 応答速度改善:複雑度が増したシステム
  5. 17 10s /get-orders 遅い... 1. コンポーネントを思い描く(正確性が課題) 2. ボトルネックを推測する(推測が困難) App product

    DB App3 App2 DB2 重い処理? slow query? 重い処理? 重い処理? slow query? 応答速度改善:複雑度が増したシステム
  6. 18 App 10s /get-orders 遅い... product DB App3 App2 1.

    コンポーネントを思い描く(正確性が課題) 2. ボトルネックを推測する(推測が困難) 3. 疑わしい箇所を深掘りする(候補が多く時間がかかりそう) DB2 重い処理? →No slow query?→No 重い処理? →No 重い処理?→No slow query?→Yes 応答速度改善:複雑度が増したシステム
  7. 19 別のやり方が必要 →分散トレース App 10s /get-orders 遅い... product DB App3

    App2 1. コンポーネントを思い描く(正確性が課題) 2. ボトルネックを推測する(推測が困難) 3. 疑わしい箇所を深掘りする(候補が多く時間がかかりそう) DB2 重い処理? →No slow query?→No 重い処理?→No 応答速度改善:複雑度が増したシステム slow query?→Yes 重い処理? →No
  8. 20 App 10s /get-orders 遅い... product DB App3 App2 DB2

    App DB App2 App3 DB2 time 応答速度改善:複雑度が増したシステム
  9. 21 App 10s /get-orders 遅い... product DB App3 App2 DB2

    1. トレースを確認する 応答速度改善:複雑度が増したシステム App DB App2 App3 DB2 time
  10. 22 App 10s /get-orders 遅い... product DB App3 App2 DB2

    1. トレースを確認する 2. ボトルネックを特定する(DB2) 応答速度改善:複雑度が増したシステム App DB App2 App3 DB2 time
  11. 23 App 10s /get-orders 遅い... product DB App3 App2 DB2

    1. トレースを確認する 2. ボトルネックを特定する(DB2) 3. 処理を深掘りする(DB2のクエリ) 応答速度改善:複雑度が増したシステム App DB App2 App3 DB2 time
  12. 24 App 10s /get-orders 遅い... product DB App3 App2 DB2

    Traceを活用することで パフォーマンスチューニングの敷居を下げる 応答速度改善:複雑度が増したシステム App DB App2 App3 DB2 time 1. トレースを確認する 2. ボトルネックを特定する(DB2) 3. 処理を深掘りする(DB2のクエリ)
  13. 27 トレース基盤A (廃止) トレース基盤D (新規) ログ基盤C メトリクス基盤B メトリクス基盤B の計装 ログ基盤C

    の計装 トレース基盤A の計装(廃止) App トレース基盤D の計装(新規) バックエンドが変わると計装を丸々作り替えなければならない 主要テレメトリーの計装 互換性が無い
  14. 30 トレース基盤A (廃止) 既存の計装ロジックを維持できる ログ基盤C メトリクス基盤B メトリクス基盤B の計装 ログ基盤C の計装

    トレースの計装 送信先の設定を変更 トレース基盤D (新規) App 主要テレメトリーの計装
  15. 43 Metricsを記録するまでの流れ 1. MeterProviderの生成 2. MeterProviderの登録 3. Meterの生成 4. Histogramの生成

    5. Histogramで値を記録 1 1. MeterProviderの生成 2. MeterProviderの登録 3. Meterの生成 4. Histogramの生成 5. Histogramで値を記録
  16. 60 トレースの構成 trace_id: 123 span_id: abc trace_id: 123 span_id: hij

    parent_id: def trace_id: 123 span_id: def parent_id: abc get-order get-order-controller query-order time