GrafanaをEC2にインストールしてCloudWatchをみてみる

そうだ Grafana、使おう。
2020.09.10

Grafanaサーバをつくる

  • EC2にGrafanaをインストールしてCloudWatchを可視化するまでの手順です。
  • EC2インスタンスの標準メトリクスをグラフにしてみます。
  • 30分もあればGrafanaで簡単に可視化できます。

Grafanaのグラフ

Grafanaのデモサイトで実際に確認できます。

Grafana Play Home - Grafana

集約してみる

諸々の事情でモニタリングツールが複数ある場合はGrafanaでまとめてみれるので便利です。例えばZabbixで基本的なメトリクスを取得している環境でCloudWatchで取得しているマネージドサービスのメトリクスや、EC2のステータスチェックのメトリクスを合わせて表示できます。

マネジメントコンソール作業

前提: GrafanaをインストールするEC2インスタンスを作成します。

検証環境

項目
OS Amazon Linux2
インスタンスタイプ t3.small
Grafana v7.1.5

IAMロール作成

公式ドキュメント参考に進めます。
AWS CloudWatch | Grafana Labs

IAMポリシーを作成します。上記公式サイトに最小権限のポリシーの例が載っておりますのでコピペします。

最小権限のポリシーの例

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowReadingMetricsFromCloudWatch",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:DescribeAlarmsForMetric",
        "cloudwatch:DescribeAlarmHistory",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:ListMetrics",
        "cloudwatch:GetMetricStatistics",
        "cloudwatch:GetMetricData"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadingLogsFromCloudWatch",
      "Effect": "Allow",
      "Action": [
        "logs:DescribeLogGroups",
        "logs:GetLogGroupFields",
        "logs:StartQuery",
        "logs:StopQuery",
        "logs:GetQueryResults",
        "logs:GetLogEvents"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadingTagsInstancesRegionsFromEC2",
      "Effect": "Allow",
      "Action": ["ec2:DescribeTags", "ec2:DescribeInstances", "ec2:DescribeRegions"],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadingResourcesForTags",
      "Effect": "Allow",
      "Action": "tag:GetResources",
      "Resource": "*"
    }
  ]
}

GrafanaPolicyと名付け作成しました。

次にIAMロールを作成します。先ほど作成したGrafanaPolicyを紐付け、GrafanaRoleと名付け作成しました。

ロール設定

Grafanaインストール対象のインスタンスにロールを設定。

GrafanaRoleをアタッチします。

Grafanaサーバ上での準備

公式ドキュメントを参考に進めます。
Install on RPM-based Linux | Grafana Labs

リポジトリの追加

$ sudo vi /etc/yum.repos.d/grafana.repo

編集内容

[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

完成したファイル

$ sudo cat /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

Grafanaインストール

$ sudo yum install grafana -y
$ sudo systemctl daemon-reload
$ sudo systemctl start grafana-server
$ sudo systemctl status grafana-server
$ sudo systemctl enable grafana-server

バージョン確認

$ grafana-cli -v
Grafana CLI version 7.1.5

Grafanaを使う

WEBアクセス

http://[ip-address]:3000にWEBブラウザからアクセスします。

セキュリティグループは3000ポートを空けます。

初期ログイン画面

admin/adminが初期ユーザ、パスワードです。

ログインするとパスワードを強制的に変更させられます。

データソース設定

Grafanaはグラフを描画してくれるツールなので表示したいグラフの元データ(メトリクス)の保存先を登録します。ここではCloudWatchを登録します。

左側の歯車ボタンをクリック。

Add data sourceをクリック。

cloudwatchで検索し、Selectをクリック。

  • Auth ProviderはCredentials fileを選択。
    • IAMロールを設定している場合、Access & secret keyを選択してもTestは通り問題なく使えます。
  • Default Regionはap-northeast-1を入力。

Save & Testをクリックし、問題なければ緑帯のData source is workingと表示されます。

これだけでGrafanaでCloudWatchで取得したメトリクスを参照することができます。同じ様にその他モニタリングツールをデータソースに登録すればGrafanaで表示できるようになります。

テンプレートインポート

最後にテストでEC2のグラフ表示させます。ダッシュボードのテンプレートをインポートし簡単にグラフを表示させます。

テンプレートは下記サイトで検索します。
Grafana Dashboards - discover and share dashboards for Grafana. | Grafana Labs

EC2で検索しEC2用のダッシュボードを探します。今回はサンプルで一番下のものを使います。

リンクを開きIDをコピーします。

左端の+を選択し、Importをクリック。

コピーしたIDを貼り付けLoadをクリック。

Importをクリック。

ダッシュボードをみてみる

Tag Nameをクリックするとインスタンスの一覧が表示されます。grafana-server自分自身を表示してみます。

変化がなく面白くなかったのでCPUに負荷かけました。

インスタンスに紐づくEBSのメトリクスも確認できます。

自動更新の注意

右上からグラフの自動更新間隔を変更できます。5秒にするとCloudWatchのAPIを叩く回数がそれだけ増えます。課金対象ですので自動更新を使用する場合はほどよい更新間隔を設定するとよろしいかと思います。

おわりに

先日TwitterかなにかでGrafanaからSlackでアラートを飛ばした際にグラフのイメージを添付できることを知り、試したくて久々にサーバたてました。以前はZabbix、Prometheusと、CloudWatchをまとめてGrafanaでモニタリングしていました。Zabbix2.2が現役で諸々の事情により引退も更新もできなく、非常に趣のあるグラフなためGrafanaに頑張ってもらいました。Grafana7.代になってから触る機会がなかったのでいい機会だと思って遊んでみようと思います。

以上、コンサル部大村@網走でした。