AWS上にObservability検証環境を構築してみた(AMG + CloudWatch + X-Ray)
こんにちは、ゲームソリューション部のsoraです。
今回は、AWSのマネージドサービスを活用してObservability検証環境を構築してみたことについて書いていきます。
構成
今回構築したのは以下の構成です。
Fargateで動くサンプルアプリで、ADOT Collector + FluentBitをサイドカーとして配置し、トレースとログを収集します。
可視化にはAmazon Managed Grafana(AMG)を使用しています。
サンプルアプリがあるECSへはALB経由で接続します。

| 主なコンポーネント | 役割 |
|---|---|
| Amazon Managed Grafana (AMG) | ダッシュボード・可視化 |
| CloudWatch Logs | アプリログの保存 |
| X-Ray | 分散トレーシング |
| ECS(Fargate) | サンプルアプリ + ADOT Collector + FluentBit |
| ALB | サンプルアプリへのHTTPアクセス |
データのフローについては以下です。
- トレース:アプリ → ADOT Collector → X-Ray
- ログ:アプリ → FluentBit(FireLens)→ CloudWatch Logs
- メトリクス:アプリ → CloudWatch Metrics(標準メトリクス)
また、以前EC2上にGrafana・Tempo・Lokiを構築する構成の記事も書いていますので、興味のある方はこちらもご覧ください。
構築
今回はTerraformで構築しました。
基本的なリソースが多いのでコードは割愛しますが、ポイントだけ解説します。
Amazon Managed Grafana(AMG)
AMGはフルマネージドなGrafanaサービスです。
インフラの管理不要でGrafanaのダッシュボードを利用でき、CloudWatchやX-Rayなど各種AWSサービスをデータソースとして接続できます。
AWSコンソールからワークスペースを作成すると、以下のような画面が表示されます。

- 認証方式
- SAML認証を使用して、外部IdPにOktaを使用します。
- IAM Identity Center(旧AWS SSO)を使う方法もありますが、Organizationsがない環境だったため使用していません。
- データソース
- CloudWatchとX-Rayを選択すると、必要なIAM権限が自動的に設定されます。
Terraformでは以下のように定義しています。
resource "aws_grafana_workspace" "main" {
name = "observability-demo"
account_access_type = "CURRENT_ACCOUNT"
authentication_providers = ["SAML"]
permission_type = "SERVICE_MANAGED"
role_arn = aws_iam_role.grafana.arn
data_sources = ["CLOUDWATCH", "XRAY"]
grafana_version = "10.4"
configuration = jsonencode({
plugins = {
pluginAdminEnabled = true
}
})
}
pluginAdminEnabledを有効にしておくことで、Grafana UI上からX-Rayなどのプラグインをインストールできるようになります。
Oktaの設定
AMGの認証にはSAML 2.0対応のIdPが必要です。
今回はOktaの無料開発者アカウントを使用しました。

Oktaにはあらかじめ「Amazon Managed Grafana」のカタログアプリが用意されているため、こちらを利用します。
まず、Oktaの管理画面で アプリケーション → アプリカタログを参照から「Amazon Managed Grafana」を検索して追加します。


サインオンタブ → 編集 → 高度なサインオン設定に以下を入力します。
- Name Space:AMGワークスペースID(例:
g-xxxxxxx) - Region:
ap-northeast-1

同じ画面の属性セクションで、Admin権限の付与に使う属性を追加します。
role属性の値がAMG側の「adminのアサーション属性ロール」と一致するユーザーにGrafanaのAdmin権限が付与されます。
割り当てタブでGrafanaを使うユーザーをアサインします。

サインオンタブのSAML署名証明書セクション → アクティブな証明書のアクション → IdPメタデータを表示でメタデータURLを取得します。
動作確認
サンプルアプリ
ALBのDNS名にブラウザでアクセスして、サンプルのアプリにアクセスします。

各ボタンで異なる特性のAPIを呼び出せるようにしています。
これらをそれぞれ実行して、出てきたログ・トレース・メトリクスを収集します。
| ボタン | 動作 |
|---|---|
| Hello API | 即時レスポンス |
| Slow API | 2〜5秒遅延 |
| Error API | 500エラー |
| Chain API | 複数API呼び出し |
X-Rayでトレース確認
AWSコンソールでCloudWatch → Trace Mapを開くと、サービス間の依存関係とレイテンシ・エラー率が可視化されます。

Amazon Managed Grafana(AMG)
AMGのワークスペースURLにブラウザでアクセスすると、SAMLのログイン画面が表示されます。

Sign in with SAML をクリックするとOktaのログイン画面にリダイレクトされます。




認証が完了するとGrafanaの画面が表示されます。

データソースの設定
ワークスペース作成時にdata_sourcesでCloudWatchとX-Rayを指定していますが、これはIAM権限の自動設定です。
Grafana上でデータソースとして使うには、別途追加が必要です。
CloudWatchはデフォルトでインストール済みのため、Data sources からそのまま追加できます。
X-Rayはプラグインのインストールが必要です。
Administration → Plugins → 「X-Ray」を検索してインストールした後、Data sources から追加します。
(先ほどのpluginAdminEnabled = trueの設定により、Grafana UI上からプラグインをインストールできます)
いずれもDefault Regionにap-northeast-1を設定するだけで、認証情報はワークスペースのIAMロールが自動的に使われます。


CloudWatchでログとメトリクスを可視化
Exploreからデータソースに「CloudWatch」を選択します。
ログを見る場合は「CloudWatch Logs」モードに切り替え、ロググループを指定してクエリを実行します。

メトリクスを見る場合は「CloudWatch Metrics」モードで、標準メトリクスを確認できます。

X-Rayでトレースを可視化
データソースに「X-Ray」を選択し、トレースを検索します。

最後に
今回は、AWSマネージドサービスを活用してObservability検証環境を構築してみました。
この記事がどなたかの参考になれば幸いです。









