読者です 読者をやめる 読者になる 読者になる

そんな今日この頃の技術ネタ

本家側に書くほどでもない小ネタ用

redash使ってみた

前回に引き続きredashの話題。

blue1st-tech.hateblo.jp

今回は実際にデータソースを接続し、ダッシュボードを作成してみた。


接続先データソースの準備

redashの操作の前に、何がしかサンプルのデータソースがいるということで、ひとまずdockerでmysqlを立ち上げて用意する。

$ docker run -d -e MYSQL_ALLOW_EMPTY_PASSWORD=True --name sample_mysql mysql


docker execコマンドでmysqlクライアントを起動し、サンプル用のデータを用意する。

$ docker exec -it sample_mysql mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.14 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE sample_database;
Query OK, 1 row affected (0.00 sec)

mysql> use sample_database;
Database changed
mysql> CREATE TABLE sample_table ( id int PRIMARY KEY AUTO_INCREMENT, input_date date, input_value int);
Query OK, 0 rows affected (0.41 sec)


mysql> INSERT sample_table(input_date, input_value) VALUES(DATE_ADD('2016-08-01', INTERVAL 31 * RAND() DAY),  CEIL(RAND() * 100));
Query OK, 1 row affected (0.04 sec)

mysql> select * from sample_table;
+----+------------+-------------+
| id | input_date | input_value |
+----+------------+-------------+
|  1 | 2016-08-22 |          18 |
+----+------------+-------------+
1 row in set (0.00 sec)

同じ要領で適当にサンプルデータをインサートしておく。


dockerの接続設定

前回作成していたredashのdocker-compose.ymlにおいて、 redashの部分にexternal_links項を追加し、 先ほど作成したサンプルのデータソースのコンテナを記述しておく。

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
  external_links:
    - sample_mysql

※ 今回は対象がコンテナなのでexternal_linksを使ったが、 多ホストとかならextra_hostsなんかを使うと良い。

設定を有効にするために再起動しよう。

$ docker-compose kill
$ docker-compose up -d

redashのデータソースを設定

立ち上げたredashのウェブページにアクセスし、前回示したように右上のメニューよりデータソースの設定追加していく。

f:id:blue1st:20160814021136p:plain


クエリの作成

データソースの設定が終われば、次はお待ちかねのクエリの記述。

画面上部の「Queries」メニューより「New Query」を選択し、データソースを選択してクエリを記述する。

f:id:blue1st:20160814021404p:plain


先ほど加えたデータソースを選択する。

f:id:blue1st:20160814021819p:plain

左側の一覧に出てくることが確認できる。


目的のデータを得られるようなクエリを記述し、「Execute」ボタンを押して実行すると下部に実行結果が表示される。

f:id:blue1st:20160814022038p:plain


「NEW VISIALIZATION」ボタンより、グラフやワードクラウド、カウンター、ピボットテーブルなどの表現を適用することができる。

f:id:blue1st:20160814022205p:plain

f:id:blue1st:20160814022306p:plain

f:id:blue1st:20160814022345p:plain

f:id:blue1st:20160814022428p:plain


また、クエリの実行を画面表示時だけでなく、スケジューラを用いて定期更新とすることも可能だ。

f:id:blue1st:20160814022639p:plain

f:id:blue1st:20160814022644p:plain

即時性が不要で重いクエリを投げる場合はこれらが有効だろう。


ここで意図したものが出来上がったら、「Save」ボタンで保存しよう。


ダッシュボードの作成

redashでは、先ほど作成したグラフや表をダッシュボードとして並べることができる。

画面左上の「Dashboards」メニューより「New Dashboard」をクリックし、新規に作成を行うことができる。

f:id:blue1st:20160814022904p:plain

f:id:blue1st:20160814022916p:plain


「add widget」より先ほど作成したクエリの表現を並べていけば良い。

f:id:blue1st:20160814023252p:plain

対象とするクエリを選び

f:id:blue1st:20160814023322p:plain

表現やサイズを選んで追加していく。

f:id:blue1st:20160814023348p:plain

こうやってダッシュボードを構築していく。

f:id:blue1st:20160814023426p:plain


また、各ウィジェットのメニューからデータをファイル保存したり、クエリを確認したりといったことが可能だ。

f:id:blue1st:20160814023538p:plain


ちなみにログイン時のトップ画面にもダッシュボードやクエリは並んで表示される。

f:id:blue1st:20160814023442p:plain


そんなわけで、直感的に高度なデータの閲覧画面を作成できた。

過去の自分の仕事を振り返ると、作ってきた多くの画面がこれで置き換えられそうな気がする。

個人レベルでいえば、管理画面をたくさん実装するのは良い勉強になるし、 ゲスな話になるけど社内営業的にも有効だったりする。

だが、それより一歩進んだ地点からいえば、「作らないで済むものはできるだけ作らない」という姿勢を持つことが運用上の安定に繋がるように思う。

これだけ簡単なものならば、意識の低い現場でも十分運用できるのではないだろうか。


画面作成の簡単化という面だけではなく、 テーマごとに一覧性ある形でデータを示せるということも、 日々の運用の中では効いてくると思う。