テレメトリー収集ツール@可観測性¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. テレメトリー収集ツールの比較¶
メトリクスの場合¶
▼ 種類¶
メトリクス収集ツールを比較した。
プル型またはプッシュ型でメトリクスのデータポイントを収集するツールに分類できる。
プッシュ型の場合、メトリクスを送信できるエージェントが必要である。
()
内では、各ツールのコンポーネント名を表す。
アクション | AWS CloudWatch | Datadog | Istio (連携しない状態) |
Istio (ビルトインPrometheusと連携した状態) |
OpenTelemetry | Prometheus |
---|---|---|---|---|---|---|
メトリクスのデータポイントの作成 | ✅ (cloudwatchエージェント) |
✅ (datadogエージェント) |
✅ (Envoyによるリクエスト系メトリクスの作成) |
✅ (Envoyによるリクエスト系メトリクスの作成) |
✅ (クライアントパッケージ) |
✅ (Exporter) |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
メトリクスのデータポイントを収集 (プル型またはプッシュ型) |
✅ (cloudwatchエージェント) |
✅ (datadogエージェント) |
✅ (Istiodコントロールプレーンによる収集) |
✅ (Istiodコントロールプレーンによる収集) |
✅ (OpenTelemetry Collector) |
✅ (Exporter) |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
ビルトインローカルストレージへの保管 | ✅ (AWS CloudWatchメトリクス) |
✅ | - | - | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
監視バックエンドとして可視化 | ✅ (AWS CloudWatchメトリクス) |
✅ | - | ✅ (Istiodコントロールプレーンを経由したprometheusサーバーによる収集) |
- | ✅ (prometheusサーバー) |
分析 | ✅ (AWS CloudWatchメトリクス) |
✅ | - | - | - | - |
レポートの作成 | ✅ (AWS CloudWatch Contributor Insights) |
✅ | - | - | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
アラートの作成 | ✅ (AWS CloudWatchアラーム) |
✅ | - | ✅ (prometheusサーバー) |
- | ✅ (prometheusサーバー) |
▼ 組み合わせの例¶
アクション | AWS CloudWatchベース | Datadogベース | Istioベース | Prometheusベース |
---|---|---|---|---|
メトリクスのデータポイントの作成 | AWS CloudWatchエージェント | datadogエージェント | Exporter + Envoyによるリクエスト系メトリクスの作成 |
Exporter |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
メトリクスのデータポイントを収集 (プル型またはプッシュ型) |
AWS CloudWatchエージェント | datadogエージェント | Exporter + Istiodコントロールプレーンによる収集 |
Exporter |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
ビルトインローカルストレージへの保管 | AWS CloudWatchメトリクス | Datadog | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
監視バックエンドとして可視化 | AWS CloudWatchメトリクス | Datadog | prometheusサーバー | prometheusサーバー |
分析 | AWS CloudWatchメトリクス | Datadog | - | - |
レポートの作成 | - | Datadog | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
アラートの作成 | AWS CloudWatchアラーム | Datadog | prometheusサーバー | prometheusサーバー |
ログの場合¶
▼ 種類¶
ログ収集ツールを比較した。
いずれもプッシュ型でログを収集し、ログを監視バックエンドに送信できるエージェントが必要である。
()
内では、各ツールのコンポーネント名を表す。
アクション | AWS CloudWatch | Elasticsearch | Fluentd Fluentbit |
Grafana Loki | Istio (連携しない状態) |
Istio (ビルトインOpenTelemetryと連携した状態) |
OpenTelemetry |
---|---|---|---|---|---|---|---|
実行ログの作成 | - | - | - | - | - | - | - |
アクセスログの作成 | - | - | - | - | ✅ (Envoyによるアクセスログ作成) |
✅ (Envoyによるアクセスログ作成) |
- |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
ログの収集 (いずれもプッシュ型による送信方式) |
✅ (cloudwatchエージェント) |
✅ (Logstach) |
✅ | ✅ (Promtail) |
- | ✅ (EnvoyからOpenTelemetry Collectorへの送信) |
✅ (OpenTelemetry Collector) |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
ビルトインローカルストレージへの保管 | ✅ (AWS CloudWatchログ) |
- | - | ✅ (BoltDB) |
- | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | - | ⬇︎ |
監視バックエンドとして可視化 | ✅ (AWS CloudWatchログ) |
✅ | - | - | - | - | - |
分析 | ✅ (AWS CloudWatchメトリクスのログメトリクス) |
✅ | - | - | - | - | - |
レポートの作成 | ✅ (AWS CloudWatch Contributor Insights) |
- | - | - | - | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
アラートの作成 | ✅ (AWS CloudWatchアラーム) |
- | - | - | - | - | - |
- https://landscape.cncf.io/card-mode?category=logging&grouping=category&sort=stars
- https://qiita.com/kazookie/items/eef3071a0667cb4d5136
- https://www.reddit.com/r/kubernetes/comments/qv6qqx/comment/hkul7kb/?utm_source=share&utm_medium=web2x&context=3
- https://speakerdeck.com/ido_kara_deru/constructing-and-operating-the-observability-platform-using-istio?slide=19
▼ 組み合わせの例¶
アクション | AWS CloudWatchベース | Datadogベース | Istioベース | Prometheusベース |
---|---|---|---|---|
実行ログの作成 | - | - | - | - |
アクセスログの作成 | - | - | Envoyによるアクセスログ作成 | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
ログの収集 (いずれもプッシュ型による送信方式) |
Fluentd Fluentbit |
Fluentd Fluentbit |
Fluentd Fluentbit (OpenTelemetry Collectorでも可) |
Promtail |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
ビルトインローカルストレージへの保管 | AWS CloudWatchログ | Datadog | Grafana Loki | Grafana Loki |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
監視バックエンドとして可視化 | AWS CloudWatchログ | Datadog | Grafana | Grafana |
分析 | AWS CloudWatchログインサイト | Datadog | Grafana | Grafana |
レポートの作成 | - | Datadog | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
アラートの作成 | AWS CloudWatchアラーム | Datadog | prometheusサーバー | prometheusサーバー |
分散トレースの場合¶
▼ 種類¶
分散トレース収集ツールを比較した。
いずれもプッシュ型で分散トレースを収集し、分散トレースを監視バックエンドに送信できるエージェントが必要である。
()
内では、各ツールのコンポーネント名を表す。
アクション | AWS X-Ray | Datadog | Grafana Tempo | Istio (連携しない状態) |
Istio (ビルトインJaegerと連携した状態) |
Jaeger | OpenTelemetry | Zipkin |
---|---|---|---|---|---|---|---|---|
トレースIDとスパンIDの作成 | ✅ (x-rayクライアントパッケージ) |
✅ (datadogクライアントパッケージ) |
- | ✅ (Envoyによる各種IDの作成) |
✅ (Envoyによる各種IDの作成) |
✅ (jaegerエージェント) |
✅ (otelクライアントパッケージ) |
- |
各種IDのアプリ間の伝播 | - | - | - | - | - | - | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
分散トレースの収集 (いずれもプッシュ型による送信方式) |
✅ (x-rayエージェント) |
✅ (datadogエージェント) |
- | - | ✅ (EnvoyからJaeger Collectorへの送信) |
✅ (Jaeger Collector) |
✅ (OpenTelemetry Collector) |
✅ (zipkin Collector) |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
ビルトインローカルストレージへの保管 | ✅ | ✅ | - | - | ✅ (JaegerのビルトインのApache Cassandra、Elasticsearch) |
✅ (Cassandra、Elasticsearch) |
- | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
監視バックエンドとして可視化 | ✅ | ✅ | ✅ | - | ✅ | ✅ | - | ✅ |
分析 | ✅ | ✅ | ✅ | - | ✅ | ✅ | - | ✅ |
レポートの作成 | - | - | - | - | - | - | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
アラートの作成 | - | - | - | - | - | - | - | - |
- https://landscape.cncf.io/card-mode?category=tracing&grouping=category&sort=stars
- https://docs.openshift.com/container-platform/4.7/distr_tracing/distr_tracing_install/distr-tracing-deploying-otel.html#distr-tracing-config-otel-collector_deploying-distr-tracing-data-collection
- https://atmarkit.itmedia.co.jp/ait/articles/2303/07/news009.html#022
- https://speakerdeck.com/ido_kara_deru/constructing-and-operating-the-observability-platform-using-istio?slide=19
▼ 組み合わせの例¶
アクション | Datadogベース | Istioベース | OpenTelemetryベース |
---|---|---|---|
トレースIDとスパンIDの作成 | クライアントパッケージ | Envoyによる各種IDの作成 | クライアントパッケージ |
各種IDのアプリ間の伝播 | - | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
分散トレースの収集 (いずれもプッシュ型による送信方式) |
datadogエージェント | EnvoyからJaeger Collectorへの送信 | OpenTelemtry Collectorへの送信 |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
ビルトインローカルストレージへの保管 | Datadog | JaegerのビルトインのApache Cassandra、Elasticsearch | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
監視バックエンドとして可視化 | Datadog | Jaeger | Grafana Tempo |
分析 | Datadog | Jaeger | Grafana Tempo |
レポートの作成 | - | - | - |
⬇︎ | ⬇︎ | ⬇︎ | ⬇︎ |
アラートの作成 | - | - | - |
テレメトリー間の紐付け¶
テレメトリー間の紐付けツールを比較した。
トレースIDとスパンIDを付与したログ、スパンメトリクス、分散トレース、の間を紐付けられる。
各種ツールで、テレメトリーを保管しておく場所 (データソース) に制限がある。
アクション | AWS CloudWatch | Datadog | Grafana |
---|---|---|---|
ログと分散トレース間の紐付け | ✅ (ログはAWS CloudWatchログに要保管) |
✅ (ログはDatadogに要保管) |
✅ (ログの保管ツールの種類に制限あり) |
メトリクスと分散トレース間の紐付け | ✅ (一部の言語のx-rayクライアントパッケージのみ対応) |
✅ (ログはDatadogに要保管) |
✅ (ログの保管ツールの種類に制限あり) |
- https://atmarkit.itmedia.co.jp/ait/articles/2303/07/news009.html#03
- https://atmarkit.itmedia.co.jp/ait/articles/2303/07/news009.html#04
- https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/deploy_servicelens_CloudWatch_agent_logintegration.html
- https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/deploy_servicelens_CloudWatch_agent_segments.html
02. テレメトリーを利用したデバッグ¶
前提¶
マイクロサービスなシステムにおいて、REDメトリクスに問題があったとする。
ここでいうREDメトリクスとは、Rate (秒当たりのリクエスト数)、Errors (リクエストの失敗数)、Duration (レイテンシー)、のことである。
この時、可観測性を使用してデバッグしていく。
原因の場所の切り分け¶
(1)
メッシュトポロジー¶
メッシュトポロジー (例:Kiali) を使用して、いずれのマイクロサービス間の通信がボトルネックになっているのかを見つける。
(2)
メトリクス¶
メトリクス (例:PrometheusとGrafana) を使用して、いずれのコンポーネント (例:Node、Deployment、Pod、コンテナ) がボトルネックになっているのかを見つける。
コンポーネント単位でフィルタリングできるようなメトリクスダッシュボードがあると、原因を特定しやすい。
(3)
ログ¶
ログ (例:Fluentd) を使用して、いずれのマイクロサービスがボトルネックになっているのかを見つける。
ログにレスポンスタイムやエラーメッセージを出力していると、原因を特定しやすい。
原因の種類の切り分け¶
(4)
ハードウェアリソース系メトリクス¶
ハードウェアリソース系のメトリクスから、いずれのコンポーネント (例:Node、Deployment、Pod、コンテナ) がボトルネックになっているのかを見つける。
ハードウェアリソース系のメトリクスを監視できるようなメトリクスダッシュボードがあると、原因を特定しやすい。
(5)
状態系メトリクス¶
ステータス系のメトリクスから、いずれのコンポーネント (例:Node、Deployment、Pod、コンテナ) がボトルネックになっているのかを見つける。
(6)
ネットワーク系メトリクス¶
ネットワーク系のメトリクスから、いずれのコンポーネント (例:Node、Deployment、Pod、コンテナ) がボトルネックになっているのかを見つける。