mysqlをdatabaseとして設定したgrafanaをdocker composeで立ち上げる

mysqlをdatabaseとして設定したgrafanaをdocker composeで立ち上げる

Clock Icon2024.07.26

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_oncondition: 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を使った環境を簡単に立ち上げることができます。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.