サービスメトリクスを可視化するために Redash を導入しようと考えていて,可視化の部分だけじゃなく,運用面の調査もしていた.
まず Redash をどうやってバックアップするんだろう?と思って調べてみたら,公式ドキュメントに手順がまとまっていた.一言で言うと,Redash の内部で使っている PostgreSQL のバックアップを取得しておけば良いとのことだった.ただし,公式ドキュメントの手順だとバックアップを保管する部分の記載がなかったため,今回は S3 で保管できるように追加で対応をした.
Re:dash → Redash
余談で,正式名称は Re:dash → Redash に変更されているんだけど,案外知らない人が多いように思う.覚えておきましょ!
構成
シンプルに以下の構成にした.AWS の場合は AMI 経由でインスタンスを立ててしまうのが最も簡単だと思う.
1. Redash Backup
まず,redash
データベースのサイズを確認する.PostgreSQL の pg_database
テーブルから取得できる.以下は Redash を起動して少し設定をした状態で確認した.
postgres=# select t1.datname AS db_name, pg_size_pretty(pg_database_size(t1.datname)) as db_size postgres-# from pg_database t1 postgres-# where t1.datname = 'redash'; db_name | db_size ---------+--------- redash | 7794 kB (1 row)
次に pg_dump
でバックアップを取得する.
$ sudo -u redash pg_dump redash | gzip > redash_backup.gz
簡単!
2. S3 Upload
日次バックアップを取得して S3 に保管するために,少し追加で準備をする.
まず Redash インスタンスに AWS CLI をインストールする.Amazon Linux ではなく Ubuntu だからインストールする必要がある.
$ sudo pip install --upgrade awscli
次に S3 バケットを作成して,IAM Role を EC2 にアタッチする.Action
はもっと絞っても良いと思う.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567890123", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::xxx", "arn:aws:s3:::xxx/*" ] } ] }
先月の新機能リリースで,既存の EC2 に IAM Role をアタッチできるようになったのは最高に便利だと思う.既に何度も助けられてる!
- Easily Replace or Attach an IAM Role to an Existing EC2 Instance by Using the EC2 Console | AWS Security Blog
次に以下のようなスクリプトを用意して,crontab でスケジュール実行をすれば S3 に定期的に保管できる.ハウスキーピングなどは別途考える必要があると思う.
#!/bin/sh sudo pip install --upgrade awscli sudo -u redash pg_dump redash | gzip > redash_backup_$(date +%Y%m%d_%H%M%S).gz backup="$(ls -1t | grep redash_backup | head -n 1)" S3_BUCKET_NAME='xxx' aws s3 cp ${backup} s3://${S3_BUCKET_NAME}/
3. Redash Restore
公式ドキュメントの手順通りにコマンドを実行したら正常にリストアすることができた.バックアップファイル名とパスワードは適宜変更してもらえればと!
$ sudo -u postgres -i $ dropdb redash $ createdb -T template0 redash $ gunzip -c redash_backup_xxx_yyy.gz | psql redash $ psql -c "ALTER ROLE redash_reader WITH PASSWORD 'xxx';" $ psql -c "grant select(id,name,type) ON data_sources to redash_reader;" redash $ psql -c "grant select(id,name) ON users to redash_reader;" redash $ psql -c "grant select on events, queries, dashboards, widgets, visualizations, query_results to redash_reader;" redash
まとめ
- 正式名称は Re:dash ではなく Redash に変更されている
- Redash を運用するときは定期的にバックアップを取得しよう
- リストアも一度は確認しておこう