Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( その25 )( Docker で PostreSQL+pgAdmin4+ Flyway の環境を構築する2 )
概要
記事一覧はこちらです。
- 今回の手順で確認できるのは以下の内容です。
- Spring Boot の Web アプリケーションにも Flyway を導入します。
- PostgreSQL のメトリックスを Prometheus+Grafana で見られるようにします。
参照したサイト・書籍
Spring Boot Reference Guide - 82.5.1 Execute Flyway Database Migrations on Startup
https://docs.spring.io/spring-boot/docs/2.0.7.RELEASE/reference/htmlsingle/#howto-execute-flyway-database-migrations-on-startupPostgreSQL Statistics
https://grafana.com/dashboards/6742wrouesnel/postgres_exporter
https://github.com/wrouesnel/postgres_exporter
目次
手順
Spring Boot の Web アプリケーションに Flyway を導入する
build.gradle の以下の点を変更します。
dependencies { .......... // dependency-management-plugin によりバージョン番号が自動で設定されないもの、あるいは最新バージョンを指定したいもの .......... implementation("com.google.guava:guava:27.0-jre") implementation("org.flywaydb:flyway-core:5.2.4") testImplementation("org.dbunit:dbunit:2.6.0") ..........
- dependencies block に
implementation("org.flywaydb:flyway-core:5.2.4")
を追加します。
変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。
動作確認します。docker-compose.yml の flyway コンテナの設定をコメントアウトしてから、
# flyway: # image: boxfuse/flyway:${FLYWAY_VERSION}-alpine # container_name: flyway # volumes: # - ./src/main/resources/db/migration:/flyway/sql # command: -url=${FLYWAY_URL} -user=${FLYWAY_USER} -password=${FLYWAY_PASSWORD} -connectRetries=60 migrate # depends_on: # - postgresql
docker-compose up -d
コマンドを実行した後 Tomcat を起動すると flyway_schema_history テーブルの create table 文が実行されており、
pgAdmin4 で接続してみるとテーブルが作成されてデータも登録されていました。
tomcat を停止して docker-compose down
コマンドを実行した後、docker-compose.yml を元に戻します。
今度は docker で flyway コンテナを起動した後、SQL ファイルを追加して Tomcat 起動時に実行されるか確認します。
docker-compose up -d
コマンドを実行します。
src/main/resources/db/migration の下に V2__create_table.sql を新規作成した後、以下の内容を記述します。
create table test_table ( test_id bigserial primary key , test_data text );
tomcat を起動すると V2__create_table.sql が実行されて test_table が作成されていました。
問題なさそうです。
また Tomcat を起動時に Direct configuration of the Flyway object has been deprecated and will be removed in Flyway 6.0. Use Flyway.configure() instead.
等の WARN ログが出力されていました。おそらく Flyway の AutoConfiguration だと思いますが、Spring Boot の対応バージョンが 6.0 になる前に独自に Flyway のバージョンを 6.0 系に上げようとしても上がらないかもしれません。
PostgreSQL のメトリックスを Prometheus+Grafana で見られるようにする
PostgreSQL のメトリックスを PostgreSQL Statistics で Grafana で表示させてみます。
PostgreSQL → Prometheus への exporter は wrouesnel/postgres_exporter を Docker で起動して利用します。
https://github.com/wrouesnel/postgres_exporter#running-as-non-superuser を参考にして src/main/resources/db/init/create_database.sql に以下の SQL 文を追加して postgres_exporter 用のユーザを作成します。
-- postgres_exporter user CREATE USER postgres_exporter PASSWORD 'zzzzzzzz'; ALTER USER postgres_exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog; -- If deploying as non-superuser (for example in AWS RDS), uncomment the GRANT -- line below and replace <MASTER_USER> with your root user. -- GRANT postgres_exporter TO <MASTER_USER> CREATE SCHEMA postgres_exporter AUTHORIZATION postgres_exporter; CREATE VIEW postgres_exporter.pg_stat_activity AS SELECT * from pg_catalog.pg_stat_activity; GRANT SELECT ON postgres_exporter.pg_stat_activity TO postgres_exporter; CREATE VIEW postgres_exporter.pg_stat_replication AS SELECT * from pg_catalog.pg_stat_replication; GRANT SELECT ON postgres_exporter.pg_stat_replication TO postgres_exporter;
.env を以下のように変更します。
........ FLYWAY_PASSWORD=xxxxxxxx POSTGRES_EXPORTER_USER=postgres_exporter POSTGRES_EXPORTER_PASSWORD=zzzzzzzz
- 以下の2行を追加します。
POSTGRES_EXPORTER_USER=postgres_exporter
POSTGRES_EXPORTER_PASSWORD=zzzzzzzz
docker-compose.yml に postgres_exporter の設定を追加します。
flyway: .......... postgres_exporter: image: wrouesnel/postgres_exporter container_name: postgres_exporter environment: - DATA_SOURCE_NAME=postgresql://${POSTGRES_EXPORTER_USER}:${POSTGRES_EXPORTER_PASSWORD}@postgresql:5432/ksbylending?sslmode=disable depends_on: - postgresql
docker/prometheus/prometheus.yml を以下のように変更します。
- job_name: 'postgres_exporter' static_configs: - targets: ['postgres_exporter:9187']
docker-compose up -d
コマンドを実行します。
Grafana に PostgreSQL Statistics の Dashboard を追加します。http://localhost:3000/ にアクセスした後、画面左側のメニューから「Create」-「Import」を選択します。
「Import」画面が表示されますので 6742
の ID を入力します。
「Prometheus」で「spring-actuator」を選択した後、「Import」ボタンをクリックします。
PostgreSQL Statistics の Dashboard が表示されます(画面右上の表示間隔の設定を Last 30 minutes → Last 15 minutes Refresh every 5s に変更しています)。
履歴
2019/01/03
初版発行。