OpenTelemetry
🔥 Vibe プロンプト
「PythonアプリをOpenTelemetryでインストルメント:トレース、メトリクス、ログをJaegerとPrometheusにエクスポート。」
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.instrumentation.flask import FlaskInstrumentor
provider = TracerProvider()
provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="otel-collector:4317")))
trace.set_tracer_provider(provider)
app = Flask(__name__)
FlaskInstrumentor().instrument_app(app)
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("process_data") as span:
span.set_attribute("user.id", "123")
span.set_status(trace.Status(trace.StatusCode.OK))
OpenTelemetry Collector
receivers:
otlp:
protocols:
grpc: { endpoint: 0.0.0.0:4317 }
exporters:
jaeger: { endpoint: jaeger:14250 }
prometheus:
endpoint: 0.0.0.0:8889
service:
pipelines:
traces: [receivers: [otlp], exporters: [jaeger]]
metrics: [receivers: [otlp], exporters: [prometheus]]
可観測性の3本柱
| 柱 | ツール | 質問 | |------|-------|------| | メトリクス | Prometheus | 何が起きている? | | ログ | Loki | なぜ起きている? | | トレース | Jaeger | どこで起きている? |
主要概念
- Trace: エンドツーエンドのリクエストパス
- Span: 単一の作業単位(関数呼び出し、DBクエリ)
- コンテキスト伝搬: サービス間でtrace_idをヘッダー経由で伝達
章のまとめ
- コアコンセプトと原理を理解
- 実装方法とテクニックを習得
- 一般的な問題と解決策に精通
- 実際のプロジェクトに適用可能
さらに読む
- 公式ドキュメントとAPIリファレンス
- GitHubのオープンソース例
- 技術書とオンラインコース
- コミュニティディスカッションと技術ブログ
実装例
基本例
# 完全な実装例を提供します
手順
- セットアップ: 開発環境の設定
- データ: 必要なデータの準備
- 実装: コア機能の構築
- テスト: 動作確認
- 最適化: パフォーマンスの向上
よくあるエラー
| エラー種別 | 原因 | 解決方法 | |-----------|------|---------| | コンパイル | 構文 | コードの構文を確認 | | 実行時 | 環境 | 依存パッケージの確認 | | 論理 | アルゴリズム | ステップごとのデバッグ | | パフォーマンス | 効率 | プロファイラーの使用 |
コード例
import sys
def main():
print("Hello, World!")
if __name__ == "__main__":
main()
参考資料
- 公式ドキュメント
- APIリファレンス
- オープンソース例
- コミュニティディスカッション