Re:dashを社内で使えるようにしてみた

logo

この記事でやること

Mac上のDockerでRe:dashを立ち上げる。
Re:dashの認証としてGoogle OAuthを利用する。
Re:dashのorganizationを使って、ダッシュボードをすっきりさせる。

この記事でやらないこと

Re:dashでクエリ作って、ダッシュボードを作る

背景

データを見えるようにするツールが色々ありますね。商用では
・Tableau
・Google Data Studio
が有名なんでしょうか。

スクリーンショット 2017-03-21 19.29.22

圧倒的Tableau人気ですね。Google Data Studioは最近無償ベータ版が出たのでこれから盛り上がっていくのかなと思います。Tableauが人気なので、導入しようという話があったようなのですが、
・コスト
・見える化するツールが社内にすでにある
ことが理由で導入されませんでした。ただ、昔のツールは改造時の負債が増え、修正や機能改善が難しくなり、別のツールが望まれていました。そこで、今度は商用ツールは諦め、OSSで探してみると
・Re:dash
・superset
がありました。
両者の比較はこちらが詳しいです。
どちらを選ぶかは難しいですが、sqlをぺろっと貼ってグラフ化するRe:dashが社内ツールの作りと似ているので今回はRe:dashを試してみることにしました。

DockerでRe:dashを立ち上げる

Re:dashには権限などを設定できるユーザ管理機能があるのですが、今回はGoogle OAuthを認証に使います。ただし、Google OAuthは使えるようになっている前提で話を進めます。まずは、必要になるものはこちらです。

・docker-compose.yaml


redash:
  image: redash/redash:latest
  ports:
    - "5000:5000"
  links:
    - redis
    - postgres
  environment:
    REDASH_STATIC_ASSETS_PATH: "../rd_ui/dist/"
    REDASH_LOG_LEVEL: "INFO"
    REDASH_REDIS_URL: "redis://redis:6379/0"
    REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
    REDASH_COOKIE_SECRET: veryverysecret
    # 日付のフォーマットを変更
    REDASH_DATE_FORMAT: "YYYY/MM/DD"
    REDASH_GOOGLE_CLIENT_ID: "適切に設定"
    REDASH_GOOGLE_CLIENT_SECRET: "適切に設定"
redis:
  image: redis:2.8
postgres:
  image: postgres:9.3
  ports:
    - 5432:5432
  volumes:
    - ./postgresql/data:/var/lib/postgresql/data
redash-nginx:
  image: redash/nginx:latest
  ports:
    - "80:80"
  links:
    - redash

・create_database.sh
こちらにあります
https://github.com/getredash/redash/blob/release_v0.11.1/setup/docker/create_database.sh

実際の作業は以下になります。

# redash用のDBとしてpostgresを立ち上げます。
docker-compose up -d postgres
# postgresの初期が終了しているか確認する。ログの出力が止まればOK
docker-compose logs -f postgres
# redashで必要なテーブルをpostgresに作成する
source create_database.sh
# redashを立ち上げる
docker-compose up -d
# hoge.comドメインのユーザのログインを許可する.ドメインが複数あれば「,」で繋げることができます.
docker-compose exec redash python manage.py org set_google_apps_domains "hoge.com"

これでhttp://localhostへ飛び、認証ができるようになりました。

Re:dashのorganizationを活用

運用していくと、ダッシュボードとクエリが大量に生成され頭を悩ますことになります。
Re:dashは内部でorganizationという区分けがあり、最初はdefaultというorganizationとなっています。このorganizationを切り分けることでダッシュボードなどを切り分けることができ、見た目がすっきりします。社内ではアプリ単位でorganizationを分けて運用しています。作業は以下の通りです。

# docker-compose.yamlのredashのenvironmentに下を追加
REDASH_MULTI_ORG: "true"

# Re:dashのCLIを立ち上げます
docker-compose exec redash python manage.py shell

org_name = "sample"

from redash.models import Organization
# ログインできるようにしたいドメインを設定します。
org = Organization.create(name=org_name, slug=org_name, settings={"google_apps_domains": ["test.com"]})

from redash.models import Group
Group.create(org=org.id, type="builtin", name="admin", permissions="{admin,super_admin}")
Group.create(org=org.id, type="builtin", name="default")
Group.create(org=org.id, name="reader", permissions="{execute_query,list_dashboards}")
exit()

# CLIを抜けた後、Re:dashを再起動します。
docker-compose restart

以上でorganizationが追加できました。以後、Re:dashにアクセスするhttp://localhost/sampleといった風に、organizationをパスに追加します。こうしておけば、関係のないダッシュボードが目に入らず見通しがよくなります。

感想

半年ぐらい動かしていますが、特に問題なく動いています。定期的なダッシュボードの更新など基本的な機能はあるため、ちょっとしたデータを見れるようにするには良い選択肢だと思います。
後、プルリクを投げると高速で返信があるので、この点も安心感ありますね。以前プルリク投げたところ、数分後に返信がありすぐに取り込まれました(大した修正ではないから…?)。
https://github.com/getredash/redash/pull/1360

注)パスワードやセキュリティ周りはデフォルトになっていますので、本格的に運用する際は気をつけてください。