はじめに
有名なデータ可視化ツールに Grafana があります。
例えば、メトリクス監視ツールの一つである Prometheus の可視化で利用されているのをよく目にしますね。
今回は、CloudWatch を AWS マネージドで提供される Grafana である Amazon Managed Grafana でグラフィカルに確認できる環境をさくっと構築しようというのがテーマです。
利用料金

アクティブな利用者当たりの料金が発生します。当記事執筆時点では管理者とエディタは 9 [$/人]、ビューアーは 5 [$/人] みたいですね。
無料トライアルがあるので、とりあえずはお金をかけずに試すことができます。
利用者アカウント管理について
先にアカウントの管理について言及しておきたいと思います。
Grafana を利用したいのは基本開発者や運営だと思います。そのため Amazon Managed Grafana には専用のログイン口が用意され、アカウントも AWS コンソールで利用するようなそれ (つまり普通の IAM) とは異なる扱いになります。
具体的には IAM Identity Center (AWS の従業員アカウント管理サービス) か SAML 認証になります。
今回の説明では IAM Identity Center でアカウント作成済みであることを前提とします。
作成手順
AWS コンソールでワークスペースを作成
AWS コンソールで Amazon Managed Grafana のページにアクセスし、「ワークスペースを作成」ボタンを押します。
任意のワークスペース名を入力して「次へ」。

認証アクセスで「AWS IAM ID センター」にチェックを入れます。
(ここで IAM Identity Center が利用開始済みであれば有効のマークが表示されます。有効になっていなければ有効にすることを促されますので、有効にしてください。)
アクセス許可タイプは「サービスマネージド」にして「次へ」。

補足的な話になりますが、CloudWatch はどこかの VPC 内に置いてあるとかそういうわけではないみたいで、アウトバウンド VPC 接続は不要です。もし他に VPC 内のリソースへのアクセスが必要になったら改めて設定してください。
IAM アクセス許可アクセス設定は「現在のアカウント」にし、データソースと通知チャネルで「Amazon CloudWatch」を追加して「次へ」。

確認画面になるので、内容を確認したら「ワークスペースを作成」。

ステータスが「作成中」から「アクティブ」になるまで待ちます。


ワークスペース名の部分をクリックし「認証」タブの AWS IAM ID センターにある「新しいユーザーまたはグループの割り当て」を押します。

IAM Identity Center に登録しているユーザーが表示されるので、登録したいユーザーにチェックを入れ「ユーザーとグループを割り当て」。

デフォルトで閲覧者になっていると思うので、管理者に昇格させましょう。
管理者にしたいユーザーにチェックを入れ、アクションから「管理者を作成する」を押します。


Terraform コード
前述の設定を Terraform コードに落とし込むなら、managed-service-grafana モジュールを使って次のような感じになります。
必要に応じて参考にしてみてください。
module "managed_service_grafana" {
source = "terraform-aws-modules/managed-service-grafana/aws"
version = "2.3.0"
name = "example-grafana"
account_access_type = "CURRENT_ACCOUNT"
authentication_providers = ["AWS_SSO"]
permission_type = "SERVICE_MANAGED"
data_sources = ["CLOUDWATCH"]
create_iam_role = true
create_saml_configuration = false
create_security_group = false
associate_license = false
role_associations = {
"ADMIN" = {
"user_ids" = [var.grafana_admin_user_id]
}
}
}
CloudWatch と連携させる
改めて、ワークスペース設定に戻り「データソース」タブから Amazon CloudWatch がアタッチ済みになっていることを確認して、「Grafana で設定」をクリックします。

このようなサインイン画面が表示されるはずですので、ボタンを押し、続く指示に従いサインインします。

AWS Data Sources の画面になるので、Regions で見たい CloudWatch があるリージョンを選び、チェックを入れて「Add 1 data source」を押します。

これで CloudWatch と繋げることができました。
エラーが出る場合
ここで次のようなエラーが返ってくる場合、VPC のセキュリティグループで弾かれてしまっている可能性が高いです。
<html> <head><title>504 Gateway Time-out</title></head> <body> <center><h1>504 Gateway Time-out</h1></center> </body> </html> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page -->
「ネットワークアクセスコントロール」タブから VPC やセキュリティグループを確認し、修正してみてください。
(画像ではアウトバウンド VPC 接続を設定していないのでなにも表示されません。)

メトリクス・ログを可視化してみる
メトリクス
嬉しいことにデフォルトでいくつかダッシュボードが用意されています。試しに Amazon EC2 のメトリクスを見てみましょう。
先ほどデータソースを追加したページから移動していなければ「Go to settings」を押して設定ページに移動しましょう。
もし移動していたら、メニューから Connections > Data sources のページから移動できます。


Dashboards タブから Amazon EC2 の Import ボタンを押します。


メニューから Dashboards のページに行くと Amazon EC2 が追加されていると思うので、クリックしてみましょう。

グラフが表示されます。すっきりしていて見やすいですね!

もちろん Grafana dashboards からサンプルを探すこともできます。
Data Source で「CloudWatch」を選ぶことで CloudWatch 用のサンプルが見つかりますので参考までに。

ログ
ログは Explore から見るのがよいでしょう。
メニューから Explore を開きます。真ん中あたりのドロップボックスから「CloudWatch」に切り替えます。
Select log groups から見たいロググループを選んで追加し、とりあえず右上で「Last 1 hour」のまま「Run query」ボタンを押すと…。

直近 1 時間のログが出てきます。「Prettify JSON」や「Wrap lines」を押してお好みの状態にしましょう。
AWS コンソール上で見るよりもだいぶ見やすいのではないかなと思います。

もちろん、ログのインサイトクエリを記述すれば、より効率的にログの確認が行えますね。
おわりに
ということで、CloudWatch の見やすい環境が構築できました。
有料機能ではありますが、かなり使い勝手がよくなると感じますので検討してみてください。
コメント