分散トレーシングとイベント
リクエストの流れを追跡する分散トレーシングと、クラスターレベルのシグナルを把握する Kubernetes Events で、オブザーバビリティのツールキットをさらに充実させます。
「分散トレーシングとイベント」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
オブザーバビリティの3本柱
オブザーバビリティは、ログ、メトリクス、トレースという3本の柱で成り立っています。ログとメトリクスについてはすでに学びました。このレッスンでは、トレーシングとKubernetes Eventsを扱います。
分散トレーシングとは
分散トレーシングは、1つのリクエストが複数のサービスを通過する過程を追跡します。どこで時間がかかっているか、どのサービスがエラーの原因になったかを確認できます。
スパンとトレース
トレースは、リクエストの全行程を表します。それぞれのステップは、開始時刻、実行時間、メタデータを持つスパンです。スパンが入れ子になることで、ツリーが形成されます。
# A trace for one checkout request
# trace_id: abc123
# span: api-gateway (40ms)
# span: order-service (25ms)
# span: db-query (15ms)
# span: payment-service (10ms)コンテキストの伝播
トレーシングを機能させるには、サービス間でリクエストヘッダーにトレースコンテキストを渡し、各ホップを同じトレースに関連付ける必要があります。
# W3C Trace Context header
traceparent: 00-abc123def456-00f067aa0ba902b7-01OpenTelemetry
OpenTelemetry (OTel)は、アプリを計装してトレースをエクスポートするための標準です。OTel Collectorをクラスター内で実行し、スパンを受信して転送できます。
トレーシングバックエンド
スパンはJaegerやTempoなどのバックエンドに送信されます。これらはトレースを保存して可視化するため、遅いリクエストを詳しく調査できます。
# deploy a collector that exports to Jaeger
kubectl get pods -n observability -l app=otel-collectorKubernetes Events
アプリのトレースとは別に、Kubernetesはクラスターで起きていることを示すEventsを生成します。スケジューリング、イメージの取得、プローブの失敗などが記録されます。
kubectl get events --sort-by=.lastTimestampリソースのEventsを確認する
kubectl describeを使うと、特定のオブジェクトに関連付けられたEventsが表示されます。Podが停止している理由を確認する最も手早い方法になることがよくあります。
kubectl describe pod my-app
# Events:
# Warning FailedScheduling no nodes available
# Normal Scheduled assigned to node-2
# Warning BackOff restarting failed containerEventsは短期間しか保持されない
Eventsはデフォルトで約1時間後に期限切れになります。クラスターの履歴を長期間保持するには、ログまたはEventsのバックエンドにエクスポートして、重要な情報を失わないようにしてください。
シグナルを関連付ける
本当の威力は、すべての情報源を関連付けることで発揮されます。メトリクスの急増を手がかりにトレースを確認し、トレースからサービスを特定すると、そのサービスのログとEventsによって根本原因を説明できます。
トレーシングを使う場面
- リクエストが遅いものの、どのサービスに原因があるかわからない場合
- マイクロサービスの連鎖の奥深くでエラーが発生している場合
- サービス間の依存関係を把握する必要がある場合
理解度チェック
トレーシングについての知識を確認しましょう。
まとめ
オブザーバビリティの3本目の柱として、分散トレーシングを学びました。分散トレーシングは、スパンとコンテキストの伝播を使ってサービス間のリクエストを追跡し、多くの場合はOpenTelemetryを通じてJaegerやTempoに送信します。また、クラスター全体の診断に短期間しか保持されないKubernetesのEventsを読み取り、ログ、メトリクス、トレース、Eventsを相互に関連付ける方法も学びました。
よくある質問
「分散トレーシングとイベント」レッスンは無料ですか?
はい。「分散トレーシングとイベント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「分散トレーシングとイベント」で何を学びますか?
リクエストの流れを追跡する分散トレーシングと、クラスターレベルのシグナルを把握する Kubernetes Events で、オブザーバビリティのツールキットをさらに充実させます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「分散トレーシングとイベント」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。