mysqlをdatabaseとして設定したgrafanaをdocker composeで立ち上げる
grafanaはユーザー、セッション、datasource、ダッシュボードなど設定した内容をデータベースに保存します。
デフォルトではsqlite3をデータベースとして使いますが、mysqlを使うこともできます。
docker-compose.yml
以下のdocker-compose.yml
を使うことで、grafanaのデータベースとしてmysqlが使われるようになります。
services:
grafana:
image: grafana/grafana:11.1.0
ports:
- 3000:3000
environment:
GF_SECURITY_ADMIN_USER: admin
GF_SECURITY_ADMIN_PASSWORD: this-password-will-be-enough-long-and-random
GF_DATABASE_TYPE: mysql
GF_DATABASE_HOST: grafana-config:3306
GF_DATABASE_NAME: grafana
GF_DATABASE_USER: grafana-user
GF_DATABASE_PASSWORD: grafana-pass
GF_DATABASE_SSL_MODE: disable
depends_on:
grafana-config:
condition: service_healthy
grafana-config:
image: mysql:8.0
environment:
MYSQL_RANDOM_ROOT_PASSWORD: yes
MYSQL_DATABASE: grafana
MYSQL_USER: grafana-user
MYSQL_PASSWORD: grafana-pass
expose:
- "3306"
volumes:
- grafana-config-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 1s
timeout: 1s
retries: 10
volumes:
grafana-config-data:
以降ではこの設定内容について説明します。
grafanaのdatabase設定
以下の設定により、grafanaはmysqlをデータベースとして使います。
environment:
GF_DATABASE_TYPE: mysql
GF_DATABASE_HOST: grafana-config:3306
GF_DATABASE_NAME: grafana
GF_DATABASE_USER: grafana-user
GF_DATABASE_PASSWORD: grafana-pass
GF_DATABASE_SSL_MODE: disable
ref: https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#database
healthcheck
grafanaは起動時に設定を読み込むためにデータベースにアクセスします。
このとき、データベースが立ち上がっていないとエラーにより起動に失敗します。
grafana-1 | logger=sqlstore t=2024-07-26T04:09:37.706149653Z level=info msg="Connecting to DB" dbtype=mysql
grafana-1 | Error: ✗ failed to connect to database: dial tcp 172.18.0.3:3306: connect: connection refused
grafana-1 exited with code 1
docker composeでは、depends_on
のcondition: service_healthy
を使うことで、他のサービス(コンテナではなく、その中のサービス)が立ち上がるのを待ってから起動するように設定できます。
以下の設定により、grafana-config
のDBが立ち上がるのを待ってからgrafanaを起動します。
depends_on:
grafana-config:
condition: service_healthy
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 1s
timeout: 1s
retries: 10
まとめ
本番環境のgrafanaの設定永続化にmysqlなどを使う場合、ローカル環境も併せてmysqlを使いたくなると思います。
今回の設定により、docker composeでgrafanaとmysqlを使った環境を簡単に立ち上げることができます。