監視ツール@可観測性¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. 監視ツールの比較¶
メトリクスの場合¶
▼ 種類¶
メトリクス収集ツールを比較した。
プル型またはプッシュ型でメトリクスのデータポイントを収集するツールに分類できる。
プッシュ型の場合、メトリクスを送信できるエージェントが必要である。
AWS CloudWatchベース | Datadogベース | Istioベース 連携しない状態 |
Istioベース ビルトインPrometheusと連携した状態 |
OpenTelemetryベース | Prometheusベース | |
---|---|---|---|---|---|---|
メトリクスのデータポイントの作成 | cloudwatchエージェント | datadogエージェント | Envoyによるリクエスト系メトリクスの作成 | Envoyによるリクエスト系メトリクスの作成 | クライアントパッケージ | Exporter |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
メトリクスのデータポイントを収集 プル型またはプッシュ型 |
cloudwatchエージェント | datadogエージェント | Istiodコントロールプレーンによる収集 | Istiodコントロールプレーンによる収集 | OpenTelemetry Collector | Exporter |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
監視バックエンドによるビルトインローカルストレージへの保管 | AWS CloudWatch Metrics | Datadogダッシュボード | - | Istiodコントロールプレーンを経由したprometheusサーバーによる収集 | - | prometheusサーバー |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
監視フロントエンドによる可視化 | AWS CloudWatch Metrics | Datadogダッシュボード | - | Grafanaダッシュボード | - | Grafanaダッシュボード |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
分析とレポートの作成 | AWS CloudWatch Contributor Insights | Datadogダッシュボード | - | - | - | - |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
アラートの作成 | AWS CloudWatchアラーム | Datadogダッシュボード | - | prometheusサーバー | - | prometheusサーバー |
▼ 組み合わせの例¶
AWS CloudWatchベース | Datadogベース | Istioベース | Prometheusベース | |
---|---|---|---|---|
メトリクスのデータポイントの作成 | AWS CloudWatchエージェント | datadogエージェント | Exporter + Envoyによるリクエスト系メトリクスの作成 |
Exporter |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
メトリクスのデータポイントを収集 (プル型またはプッシュ型) |
AWS CloudWatchエージェント | datadogエージェント | Exporter + Istiodコントロールプレーンによる収集 |
Exporter |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
監視バックエンドによるビルトインローカルストレージへの保管 | AWS CloudWatch Metrics | Datadogダッシュボード | prometheusサーバー | prometheusサーバー |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
監視フロントエンドによる可視化 | AWS CloudWatch Metrics | Datadogダッシュボード | Grafanaダッシュボード | Grafanaダッシュボード |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
分析とレポートの作成 | AWS CloudWatch Metrics | Datadogダッシュボード | - | - |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
アラートの作成 | AWS CloudWatchアラーム | Datadogダッシュボード | prometheusサーバー | prometheusサーバー |
ログの場合¶
▼ 種類¶
ログ収集ツールを比較した。
いずれもプッシュ型でログを収集し、ログを監視バックエンドに送信できるエージェントが必要である。
AWS CloudWatchベース | Elasticsearchベース | Fluentd/Fluentbit ベース |
Grafana Lokiベース | Istioベース (連携しない状態) |
Istioベース (ビルトインOpenTelemetryと連携した状態) |
OpenTelemetryベース | |
---|---|---|---|---|---|---|---|
実行ログの作成 | - | - | - | - | - | - | - |
アクセスログの作成 | - | - | - | - | (Envoyによるアクセスログ作成) | (Envoyによるアクセスログ作成) | - |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
ログの収集 (いずれもプッシュ型による送信方式) |
(cloudwatchエージェント) | (Logstach) | Fluentd/Fluentbit | (Grafana Alloy) | - | (EnvoyからOpenTelemetry Collectorへの送信) | (OpenTelemetry Collector) |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
監視バックエンドによるビルトインローカルストレージへの保管 | (AWS CloudWatch Logs) | - | - | (BoltDB) | - | - | - |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | - | ⬇️ |
監視フロントエンドによる可視化 | (AWS CloudWatch Logsダッシュボード) | Elasticsearchダッシュボード | - | - | - | - | - |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ||||
分析とレポートの作成 | (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でも可) |
Grafana Alloy |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
監視バックエンドによるビルトインローカルストレージへの保管 | AWS CloudWatch Logs | Datadogダッシュボード | Grafana Loki | Grafana Loki |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
監視フロントエンドによる可視化 | AWS CloudWatch Logsダッシュボード | Datadogダッシュボード | Grafanaダッシュボード | Grafanaダッシュボード |
⬇️ | ⬇️ | ⬇️ | ⬇️ | |
分析とレポートの作成 | AWS CloudWatch Logsインサイト | Datadogダッシュボード | Grafanaダッシュボード | Grafanaダッシュボード |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
アラートの作成 | AWS CloudWatchアラーム | Datadogダッシュボード | prometheusサーバー | prometheusサーバー |
分散トレースの場合¶
▼ 種類¶
分散トレース収集ツールを比較した。
いずれもプッシュ型で分散トレースを収集し、分散トレースを監視バックエンドに送信できるエージェントが必要である。
AWS X-Ray | Datadog | 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 |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
監視バックエンドによるビルトインローカルストレージへの保管 | AWS X-Rayダッシュボード | Datadogダッシュボード | - | JaegerのビルトインのApache Cassandra、Elasticsearch | Apache Cassandra、Elasticsearch | - | - |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
監視フロントエンドによる可視化 | AWS X-Rayダッシュボード | Datadogダッシュボード | Grafanaダッシュボード | ✅ | ✅ | - | ✅ |
⬇️ | ⬇️ | ⬇️ | |||||
分析とレポートの作成 | - | - | - | - | - | - | - |
⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ |
アラートの作成 | - | - | - | - | - | - | - |
- 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 Logsに要保管) | (ログは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、コンテナ) がボトルネックになっているのかを見つける。