EC2にOSSのGrafanaをインストールしてRDSと接続してみた

2024.06.29

はじめに

EC2にインストールしたOSSのGrafanaでデータソースにRDSを使いたい場面があったのでやってみました。
GrafanaのプラグインにはAWSサービスと接続するためのプラグインがありますが、RDSと接続する場合はDBの種類に合わせて接続を行う必要があります。

EC2

今回はOSSのGrafanaをインストールする環境として以下のEC2を作成しました。

項目
OS Amazon Linux2023
インスタンスタイプ t3.nano

注意点として、Grafanaと通信するためにセキュリティグループはTCP3000番ポートのインバウンドルールを許可する必要があります。

また、インストール作業などを行うためにSession ManagerやSSHで接続ができるようにしておきます。

ミドルウェアのインストール

EC2には

  • Grafana
  • mysqlのクライアントツール

をインストールします。
まずはドキュメントを参考にGrafanaをインストールしていきます。


今回は以下のGrafanaをインストールしました。

項目
エディション Enterprise
バージョン 11.0.1
sudo dnf install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.1-1.x86_64.rpm

Grafanaがインストールできたのでサービスを起動します。

sudo systemctl start grafana-server
sudo systemctl enable grafana-server.service
sudo systemctl status grafana-server

次にRDSの接続用にmysql clientをインストールします。

sudo dnf -y localinstall https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
sudo dnf -y install mysql-community-client

ミドルウェアのインストールはこれで終わりです。

RDSの作成

今回はMySQLを使用したいので、RDS for MySQLを作成します。

項目
エンジンバージョン 8.0.35
インスタンスタイプ db.t3.micro

RDSはEC2と接続できるようにセキュリティグループを設定してください。
作成したRDSのエンドポイントと、DB名はGrafanaの接続時に使うので控えておきます。


Grafanaの接続設定

それではGrafanaを設定してRDSと接続していきましょう。
まずはEC2上のGrafananにログインします。

ブラウザでEC2のパブリックIP:3000にアクセスしてGrafanaに接続します。
初期状態では、IP,PWどちらもadminでログインできます。

ログインするとPW変更が求められるのでPWを変更します。
ログインした後、左メニューより Administration > Plugins and data > Plugins と進みます。
表示されるプラグインの一覧より、MySQLプラグインのinstalledをクリックします。

MySQLの接続設定画面が表示されるため、RDSの情報を入力します。
最低限、以下の設定を行います。

項目
Host URL * RDSのエンドポイント
Database name RDSのDB名(DB識別子ではない)
Username RDSで設定したUsername
Password RDSで設定したPassword

その他のオプション設定は必要に応じて行ってください。
設定が完了したら「Save & test」をクリックして接続の確認を行います。
接続が成功したら以下のように「Database Connection OK」が表示されます。

この時、接続エラーが起きる場合は

  • RDSのエンドポイントやDB名が間違っていないか
  • EC2にログインしてRDSへ直接接続可能か

などを確認してみるとよいでしょう。
エンドポイントとDB名は以下のAWS CLIコマンドで確認することもできます。(RDSの識別子は適宜読み替えて下さい)

# エンドポイント確認
aws rds describe-db-instances --db-instance-identifier <RDSの識別子> --query "DBInstances[0].Endpoint.Address" --output text
# DB名確認
aws rds describe-db-instances --db-instance-identifier <RDSの識別子> --query "DBInstances[0].DBName" --output text

可視化してみる

それでは準備が整ったのでデータを可視化してみましょう。

ダミーデータの用意

まずはEC2よりMySQLに接続してダミーデータを挿入します。
データベースとテーブルを作成します。

CREATE DATABASE demo_data;
USE demo_data;
CREATE TABLE sensor_data (
    id INT AUTO_INCREMENT PRIMARY KEY,
    device_id VARCHAR(50) NOT NULL,
    temperature DECIMAL(5, 2) NOT NULL,
    humidity DECIMAL(5, 2) NOT NULL,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

適当な時系列のダミーデータを入れます。

INSERT INTO sensor_data (device_id, temperature, humidity, timestamp) VALUES
('device_1', 23.5, 45.2, '2023-10-01 00:00:00'),
('device_1', 23.1, 45.3, '2023-10-01 01:00:00'),
('device_1', 22.7, 45.4, '2023-10-01 02:00:00'),
('device_1', 23.8, 45.5, '2023-10-01 03:00:00'),
('device_1', 22.9, 45.6, '2023-10-01 04:00:00');

Grafanaで可視化

Grafanaの画面に戻りGrafanaのダッシュボードを作成します。
左メニューの Dashboards > Create Dashboard をクリックします。

先ほど作成したデータソースのmysqlをクリックします。

画面下側のQueryのCodeでデータを可視化してみます。

Queryの内容に以下のSQLを記載して、Run queryをクリックします。
temperatureの値を時系列で確認することができます。

SELECT
  timestamp AS time,
  temperature
FROM
  demo_data.sensor_data
ORDER BY
  timestamp ASC;

先ほどRDSに登録したデータが時系列で可視化されていますね。

これでRDSへの接続、データ可視化まで確認することができました。

まとめ

EC2上のOSSのGrafanaからRDSへ接続する一連の流れをやってみました。
EC2をECSやFargeteなどコンテナ化したり、Multi-AZにして冗長化することもできるようです。


Multi-AZを行う場合は、Grafanaの設定ファイルの共有や、ユーザー管理など、他にもサービスを組み合わせる必要がありそうです。
また機会があればやってみたいと思います。
ただし、Amazon Managed Grafanaで代替できる場合は、運用の面でもメリットが大きいので代替可能か検討してみるといいかもしれません。