コンテナ監視の設計(AMP / Managed Grafana / CloudWatch Observability / Fargate の制約)

一言まとめ

EKS の本番はメトリクスを AMP、生ログを CloudWatch Logs に分ける併用が王道。収集エージェントはまず CloudWatch Observability アドオン、脱ロックインなら Grafana Alloy。Fargate は DaemonSet が動かないので node-exporter / cAdvisor は使えず、Container Insights に委ねる。

作成 · 更新 · #aws#eks#prometheus#grafana#soa-c03
目次 10 sections
  1. 01 AMP と CloudWatch の役割分担
  2. 02 AMP ワークスペースと AMG ワークスペース
  3. AMG のデータソース認証
  4. AMG のクロスアカウントとコスト
  5. 03 収集エージェントの選定
  6. CloudWatch Agent と OpenTelemetry(ADOT)
  7. 04 AMP へのメトリクス送信経路
  8. 05 EKS Fargate の制約
  9. 紛らわしい Insights 系の名称
  10. 06 プル型とプッシュ型
  11. 07 PromQL
  12. 08 可視化ツールの選定(Grafana / Superset / QuickSight)
  13. 低頻度・小規模なアクセスログ統計
  14. 09 関連
  15. 10 更新履歴

調査時点: 2026-07。料金・クォータは当時の値。

AMP と CloudWatch の役割分担#

AMP(Amazon Managed Service for Prometheus)はメトリクス(数値)しか扱えず、生ログは保存できない。そのためトラブル調査は 2 段階になる。

  1. 「どこで何が起きているか」を数値で検知する → AMP(PromQL(Prometheus のメトリクスを検索・集計するクエリ言語) で数千コンテナを高速集計・アラート)
  2. 「なぜ起きたか」をログのテキストで突き止める → CloudWatch Logs(Logs Insights で ERROR を検索)
監視対象推奨理由
アプリ・Kubernetes のメトリクスAMP + Managed GrafanaPromQL で大量コンテナを集計
コンテナの生ログCloudWatch Logs確実に保存でき、Logs Insights で検索
ALB / RDS などコンテナ外の AWS リソースCloudWatch 標準手軽で確実

AMP ワークスペースと AMG ワークスペース#

同じ「ワークスペース」でも役割は逆。

比較AMP ワークスペースAMG(Amazon Managed Grafana)ワークスペース
本質時系列データの保管庫(DB)。S3 バケットに近い境界可視化の画面(Web サーバー)。QuickSight に近い
発行される URLremote_write などの API エンドポイント(ワークスペース ID 入り)人間がブラウザで開くサインイン URL
主な設定リテンション、アラート / レコーディングルールデータソース接続、ダッシュボード、プラグイン
認証IAM(プログラム用)IAM Identity Center / SAML 2.0(人間のログイン)
分割の目的データ・請求の分離(prod / dev)運用チーム・閲覧権限の分離

AMP は本番と開発でワークスペースを分ける。開発で誤って大量のメトリクスを出しても本番の監視と請求に影響しない。クロスアカウントの書き込みはワークスペースのリソースベースポリシーで許可できる。アクティブシリーズ上限は変更可能なクォータなので、具体値は都度確認する。

AMG のデータソース認証#

方式評価
AWS SDK Default(ワークスペースの IAM ロール)同一アカウント内の第一候補。ローテーション不要
IAM roles(AssumeRole)複数アカウントを 1 画面で監視するとき。長期クレデンシャルを持たない
アクセスキー + シークレット非推奨。漏洩リスクと手動ローテーション。OSS 版 Grafana からの互換用途のみ

トラブルシュートは「Access Denied / Unauthorized」なら IAM ポリシー・信頼関係(AssumeRole は借りる側のポリシーと貸す側の信頼関係の両方が要る)、「Network Timeout」なら VPC エンドポイント・SG・ルーティングを疑う。必要な読み取り権限の例は CloudWatch なら cloudwatch:GetMetricData / ListMetrics、AMP なら aps:QueryMetrics。

AMG のクロスアカウントとコスト#

  • クロスアカウント監視は、アクセス許可タイプ「サービス管理」+ Organizations 連携で自動プロビジョニングするか、「顧客管理」で各アカウントに AssumeRole 用ロールを手動で作る
  • ライセンス料は「1 ワークスペース × 1 アクティブユーザー」ごとに月額(当時 Editor 9 USD、Viewer 5 USD)。ダッシュボード数は無料。ワークスペースを 1 つに統合し、フォルダ権限でチームを分けるのが最も効くコスト削減。作成者以外は Viewer にする

収集エージェントの選定#

EKS ノード上にデプロイされる点は同じで、同階層の選択肢。基本はどれか 1 つ。

選択肢扱えるデータ特徴選ぶ場面
CloudWatch Observability アドオンメトリクス + ログ(裏で CloudWatch Agent + Fluent Bit)EKS で有効化するだけ。AWS サポート対象まず最初に試す。AWS 完結で手離れ重視
Grafana Alloyメトリクス・ログ・トレース・プロファイル。OTel ベース1 エージェントに集約。クラスタリングで HA脱ロックイン、1 つの OSS で一元管理
Prometheus AgentメトリクスのみTSDB を持たない超軽量モード。HA は苦手ログ収集は既存(Fluent Bit 等)があり、AMP への転送だけ欲しい

アドオンすら不要なのは次の 4 パターン: Datadog / New Relic などの SaaS に全振り(二重収集になる)、マルチクラウド前提で kube-prometheus-stack を自前運用、アプリから OTel SDK で直接送るエージェントレス、ALB ログと EC2 の標準メトリクスで足りる使い捨て環境。

CloudWatch Agent と OpenTelemetry(ADOT)#

比較CloudWatch AgentOTel / ADOT
思想AWS 専用に最適化ベンダー非依存の標準
データメトリクス、ログ(トレース不可)メトリクス、ログ、トレース
送信先CloudWatch のみCloudWatch、AMP、Datadog など自由
計装StatsD / collectd でアプリの数値も吸える(手動計装)自動計装が強い

アプリ監視自体は CloudWatch Agent でも可能。OTel を選ぶ差はトレース対応・自動計装・脱ロックインの 3 点。

AMP へのメトリクス送信経路#

  • Prometheus をエージェントモード + DaemonSet(Kubernetes の各ノードに Pod を 1 つずつ配置する仕組み) で動かし、remote_write で AMP へ直送する。DaemonSet は全ワーカーノードに 1 Pod ずつ常駐させる仕組みで、ノードが増えても監視漏れが起きない
  • オンプレや他社クラウドからは Public エンドポイントへ remote_write
  • プライベートサブネットの EKS からは VPC エンドポイント(PrivateLink)経由にする。NAT Gateway 経由だとデータ処理料金が乗り、経路もインターネットに出る

EKS Fargate の制約#

Fargate のホスト OS は AWS 管理のブラックボックスで、Pod ごとに専用の極小 VM が払い出される。

コンポーネント可否理由
node-exporter不可DaemonSet が配置できない(ノードを複数 Pod で共有しない)
cAdvisor不可kubelet のエンドポイントが非公開
kube-state-metrics可API サーバーに問い合わせる Deployment として動く

したがって Fargate のインフラ監視(CPU / メモリ)は CloudWatch Container Insights に委ねる。Prometheus / AMP に戻すのは、アプリ内部のカスタムメトリクスを PromQL / Grafana で一元化したい要件が出たときだけ。

紛らわしい Insights 系の名称#

名称対象実体Fargate
CloudWatch Container InsightsEKS / ECS / Kubernetesコンテナ監視機能の総称対応
Container Insights主に ECSECS クラスター設定のトグル名対応
CloudWatch Lambda InsightsLambdaLambda レイヤーとして付与対応
Amazon CloudWatch ObservabilityEKSEKS 専用の管理アドオン(DaemonSet 使用)不可

CloudWatch Observability アドオンは EKS Fargate(DaemonSet 不可)、ECS Fargate(クラスターアドオンの概念がない)、Lambda のいずれでも使えない。

プル型とプッシュ型#

  • コンテナは固定 IP を持たないが、Prometheus は Kubernetes API に「今どこで何台動いているか」を問い合わせる Service Discovery でプルを成立させる
  • プッシュ型が必須になるのは、短命なサーバーレス / バッチ(取りに行く前に消える)、閉域網(インバウンドを開けない)、大規模分散 IoT(IP を把握できない)の 3 場面
  • Lambda はプル不可。どうしても Prometheus に乗せるなら Pushgateway を中継させる。EKS Fargate は API サーバー経由のダイレクトスクレイプで技術的に可能だが運用負荷が高い

PromQL#

メトリクス名 + ラベルで系列を特定し、rate / sum で集約する時系列専用言語。SQL が表の JOIN や業務集計を得意とするのに対し、PromQL は「過去 5 分のエラー率の変化」のような計算に向く。

sum(rate(http_requests_total{app="frontend"}[5m]))

時間指定は 3 通り: @ <Unix 秒>(絶対)、offset 1d(相対)、Grafana のタイムピッカー(実務の本命。クエリには時間を書かない)。

CloudWatch は PromQL と OTel メトリクスにネイティブ対応し、Query Studio での実行と PromQL ベースのアラームが使える。提供時期の正確な日付は裏取りが必要。

可視化ツールの選定(Grafana / Superset / QuickSight)#

比較GrafanaApache SupersetAmazon QuickSight
用途システム監視(秒〜分のリアルタイム)BI(バッチ更新の業務分析)BI(マネージド)
得意なデータ時系列、ログ、トレースRDB / DWHAthena / Redshift など AWS 内データ
運用セルフホストか AMG自前(EC2 / EKS)不要
コストAMG はユーザー課金ライセンス無料。サーバー代のみユーザー数 / セッション課金

Superset は Grafana の競合ではなく QuickSight の OSS 版にあたる。閲覧者が数百〜数千人なら Superset、少人数で運用を持ちたくないなら QuickSight が安い。

低頻度・小規模なアクセスログ統計#

本格的な BI は過剰。固定費 0 に近い順に:

  1. Logs Insights のクエリ(stats count_distinct(client_ip) by bin(1w) など)を CloudWatch ダッシュボードにピン留め
  2. Contributor Insights でトップ N ランキングを常時表示
  3. ログが S3 なら Athena で集計し、EventBridge + Lambda で週 1 回 Slack に投稿、またはグラフが要るなら QuickSight を 1 ユーザー分だけ契約

オンプレの余剰リソースで Superset を動かし、AWS からは集計後の小さな CSV だけ落とす構成も、データ転送の無料枠(当時 100GB/月)に収まるなら追加費用ゼロで成立する。

関連#

更新履歴#

  • 2026-07-18: 初版(ローカル調査ノート)
  • 2026-10-17: Wiki へ移植、概念ページとして再構成

同じトピック — AWS