構造化ログと分散トレーシング
構造化ログ、相関ID、分散トレーシングによってデプロイを可観測にし、CI/CDパイプラインのサービス間にまたがる障害をデバッグできるようにします。
「構造化ログと分散トレーシング」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
可観測性の3本柱
可観測性は、メトリクス、ログ、トレースという3本の柱で成り立ちます。
- メトリクスは、問題が起きていることを示します
- ログは、何が起きたかを示します
- トレースは、リクエストの流れのどこで起きたかを示します
パイプラインの監視は通常メトリクスから始まりますが、このレッスンではログとトレースを掘り下げます。
構造化ログを使う理由
プレーンテキストのログ行は検索しにくいものです。構造化ログは、通常はJSON形式で、名前付きフィールドを持つ機械可読な記録です。
構造化ログは、Loki、Elasticsearch、Datadogなどのツールでフィルタリング、集計、アラート設定を行えます。
プレーンログと構造化ログ
非構造化されたログ行と構造化されたログ行を比較してみましょう。構造化された形式なら、status=500を直接検索できます。
// Unstructured
Deploy failed for service api at 12:01
// Structured (JSON)
{"level":"error","event":"deploy_failed","service":"api","status":500}JSONログを出力する
ほとんどの言語には構造化ロガーがあります。重要なのは、連結した文字列ではなくオブジェクトをログに記録することです。
const log = (level, event, fields) =>
console.log(JSON.stringify({ level, event, ...fields }));
log('info', 'deploy_started', { service: 'api', version: '1.4.2' });相関ID
1回のデプロイでは、多くのステップやサービスが関わります。相関ID(またはトレースID)は、1つの論理的な処理に属するすべてのログ行に付加する一意の値です。
そのIDで検索すると、コンポーネントをまたいだ処理全体の流れを再構成できます。
- name: Set correlation id
run: echo "TRACE_ID=$(uuidgen)" >> $GITHUB_ENVログレベル
詳細度やアラートを調整できるよう、ログレベルを一貫して使用します。
debug— 詳細な診断情報info— 通常のイベントwarn— 回復可能な問題error— 対応が必要な失敗
errorではアラートを発生させ、infoはサンプリングし、本番環境ではdebugを無効にします。
分散トレーシングとは
分散トレーシングは、リクエストが複数のサービスを通過する過程を追跡します。それぞれの処理がスパンであり、スパンがつながってトレースになります。
トレースにはタイムラインと、遅延またはエラーが発生したスパンが表示されるため、マイクロサービスのデプロイで非常に役立ちます。
OpenTelemetry
OpenTelemetry(OTel)は、トレース、メトリクス、ログを生成するためのベンダー中立な標準です。
アプリケーションにOTel SDKを組み込み、Jaeger、Tempo、クラウドAPMなどのバックエンドにエクスポートします。
import { trace } from '@opentelemetry/api';
const tracer = trace.getTracer('deploy-service');
const span = tracer.startSpan('deploy');
// ... do work
span.end();パイプライン自体をトレースする
アプリケーションだけでなく、パイプラインもトレースできます。ツールはジョブとステップごとにスパンを出力するため、CI/CDのどの段階がボトルネックかを確認できます。
これにより、長いワークフローを、時間がどこで費やされているかを示す視覚的なウォーターフォールに変えられます。
集中集約
すべてのジョブとサービスからログとトレースを集中プラットフォームに送ります。CIランナーは一時的な存在であるため、ランナー上に残したログは実行終了後に消えてしまいます。
実行中にログシンクへ転送しておけば、ランナーがなくなった後でも事後分析を行えます。
シグナルをアクションにつなげる
可観測性は、アクションにつながって初めて役立ちます。エラー率や遅いトレースを表面化するダッシュボードを構築し、重要なパターンをすでに設定したアラートに組み込みます。
目標は、1つのアラートから、その原因を説明するトレースと構造化ログの行へ直接移動できることです。
理解度チェック
ログとトレースについての理解度を確認しましょう。
まとめ
ログとトレースによって可観測性をさらに深める方法を学びました。
- 一貫したレベルで構造化(JSON)ログを出力します
- 1つの処理を追跡できるよう相関IDを付加します
- 分散トレーシングとOpenTelemetryを使って、遅いスパンや失敗したスパンを見つけます
- 一時的なランナーが消える前に、すべてを中央で集約します
これにより、メトリクスやアラートを補完し、パイプライン全体を可観測にできます。
よくある質問
「構造化ログと分散トレーシング」レッスンは無料ですか?
はい。「構造化ログと分散トレーシング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「構造化ログと分散トレーシング」で何を学びますか?
構造化ログ、相関ID、分散トレーシングによってデプロイを可観測にし、CI/CDパイプラインのサービス間にまたがる障害をデバッグできるようにします。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「構造化ログと分散トレーシング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- パイプライン監視戦略
- 外部サービスとの統合
- 通知とアラートの設定
- 構造化ログと分散トレーシング