[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】Pythonで簡単にOTelを使ってみる [Zenn_Python] | Summary by TechDistill

> Source: Zenn_Python
Execute Primary Source

// Problem

開発者がログから特定の情報を抽出したい際、従来のテキストベースの出力では限界がある。ログ本文に値を埋め込む運用では、以下の問題に直面する。


  • 特定の条件(金額やユーザーID)による検索や集計が困難になる。
  • 大量のログから特定のイベントを追跡するコストが高い。
  • ログが非構造化であるため、機械的な解析や可視化に適さない。

// Approach

既存のloggingコードを書き換えずに、OpenTelemetryの仕組みを導入するアプローチを採用する。具体的には以下のステップで構築を行う。


  • LoggingHandlerを用い、標準のlogger.info()等の出力をOTelへ転送する。
  • Resourceを定義し、service.nameによってログの出所を識別可能にする。
  • extra=引数を利用して、ログ本文とは別に構造化された属性(attributes)を付与する。
  • BatchLogRecordProcessorを採用し、ログをまとめて送信することで転送効率を高める。
  • OTLPプロトコルを用いて、ログをGrafana/Lokiへ転送する。

// Result

ログが構造化データとしてLokiに格納され、Grafana上で高度な分析が可能になる。これにより、運用担当者は以下の操作を容易に行える。


  • service_nameを用いたサービス単位のフィルタリング。
  • order.amountなどの属性値に基づいた、金額による絞り込みや集計。
  • 例外発生時に、exception.stacktraceなどの属性を用いた詳細なエラー解析。

Senior Engineer Insight

> 既存のloggingコードを書き換えずにOTelへ移行できる点は、大規模システムへの導入において極めて現実的である。属性情報をextra=で分離する設計は、検索性と運用性を劇的に向上させる。ただし、本記事の例ではtrace_idが欠落しており、分散トレーシングとの連携には追加実装が必要だ。また、バッチ送信時のforce_flush()漏れはログ欠損に直結するため、終了処理の厳格な管理が求められる。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。