What's this?
Redash9.0(beta)でデータソースとしてCloudWatch Logs Insightsが新規追加されたので、Redash9.0の構築からデータ取得までの手順をまとめた記事です。
Redashとは
Redashは、(主に)SQLの分析結果をわかりやすく可視化し共有するオープンソースBIツールです。
「RDS」「Redshift」「BigQuery」「Google Spreadsheet」など50種類以上の様々なデータソースと連携が可能で、複数のデータソースのデータを結合させることも可能です。
Redash9.0で追加されたデータソース
New Data Sources: Amazon Cloudwatch, Amazon CloudWatch Logs Insights, Azure Kusto, Exasol.
Redash公式のchange logを見るとまだbeta版ですが、9.0から下記データソースが新規で追加されています。
- Amazon Cloudwatch
- Amazon CloudWatch Logs Insights
- Azure Kusto
- Exasol
構築手順
前提
- ローカル環境はmacOS + iTerm2
- AWSアカウントは既に作成済
- CloudWatch Logsにデータが存在している
【手順1】Redash8.0セットアップ
EC2インスタンス作成
Docker on EC2のAMIがRedashの公式から提供されているので、こちらを利用します。
今回は東京リージョンでのインスタンス作成をしたいので、「ap-northeast-1」を選択
次にインスタンスタイプを選択します。
Launch the instance with the pre-baked AMI we create (for small deployments t2.small should be enough):
Redash公式ページでは小規模の開発環境であればt2.small
で十分とありましたが、9.0については、t2.small
ではメモリが不十分で上手く動作しなかったため、t2.medium
を選択しました。
どちらのインスタンスタイプも無料枠ではないので注意してください。
インスタンスタイプを選択したら、「確認と作成」ボタンを押します。
インスタンス起動前に下記画面が表示されるので、キーペアを作成していない場合は、
任意のキーペア名をつけてキーペアの作成をします。
このとき発行されるキーペアはインスタンスにSSH接続する際に必要になるため安全な場所に保存しておきます。
これでインスタンスの作成は完了です。
今回利用したAMIにインストールされているRedashのバージョンは8.0になるので、後ほど9.0へのバージョンアップを行います。
セキュリティグループの作成
次にセキュリティグループの作成をします。
下記ポートをインバウンドルールに追加します。
- SSH接続のための22番ポート
- HTTP接続のための80ポート
- HTTPS接続のための443ポート
この際、検証用に利用する方は自宅や職場など特定のIPアドレスのみを許可する設定にしておいた方が安全です。
セキュリティグループの作成が完了したら、先ほど作成したEC2インスタンスとの関連付けを行います。
インスタンス一覧画面に戻り、セキュリティグループを変更します。
作成したセキュリティグループを選択し保存します。
もし余分なセキュリティグループがインスタンスに関連付けされている場合は削除します。
これでセキュリティグループの関連付けは完了です。
Elastic IPの作成
今回検証用に有料のインスタンスタイプを利用しているため、利用しない時はインスタンスを停止し費用を抑えたいです。
EC2にデフォルトで付与されるパブリックIPアドレスは停止、再起動の度に変わってしまうため固定IPアドレスを設定します。
Elastic IPの新規作成をします。
作成したElastic IPをEC2インスタンスに関連付けます。
これで固定IPの作成とインスタンスへの関連付けの完了です。
この時点でブラウザに発行されたElasticIPアドレスでアクセスするとRedashの管理画面が表示されるはずです。
EC2インスタンスへSSH接続確認
作成したインスタンスにSSH接続できるか確認します。
ここからはローカル環境での作業となります。
<Home Directory>/.ssh/config
に下記を追記します。
<ホスト名>
,<Elastic IP>
,<キーペアファイルのパス>
は適宜各自の環境に置き換えてください。
Host <ホスト名>
HostName <Elastic IP>
User ubuntu
Port 22
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile <キーペアファイルのパス>
IdentitiesOnly yes
コマンドラインツールからssh <ホスト名>
でサーバ接続できればOKです。
【手順2】Redash9.0へのバージョンアップ
Redash8.0→9.0へのバージョンアップを行います。
ssh <ホスト名>
でRedashサーバに接続
- コンテナの起動確認
# redashディレクトリに移動
cd /opt/redash/
# コンテナの起動確認
sudo docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------
redash_adhoc_worker_1 /app/bin/docker-entrypoint ... Up 5000/tcp
redash_nginx_1 nginx -g daemon off; Up 443/tcp, 0.0.0.0:80->80/tcp
redash_postgres_1 docker-entrypoint.sh postgres Up 5432/tcp
redash_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
redash_scheduled_worker_1 /app/bin/docker-entrypoint ... Up 5000/tcp
redash_scheduler_1 /app/bin/docker-entrypoint ... Up 5000/tcp
redash_server_1 /app/bin/docker-entrypoint ... Up 0.0.0.0:5000->5000/tcp
redash_worker_1 /app/bin/docker-entrypoint ... Up 5000/tcp
- コンテナの停止
sudo docker-compose down
- docker-compose.ymlの変更
redash/CHANGELOG.mdのUpgradingを参考に下記を変更します。
- imageをredash/redash:8.0.0.b32245→redash/redash:previewに変更
- services/schedulerのenvironmentを削除
- services 配下にworkerを追加
sudo vi docker-compose.yml
修正後のdocker-compose.yml
version: "2"
x-redash-service: &redash-service
#最新のimageに変更
image: redash/redash:preview
depends_on:
- postgres
- redis
env_file: /opt/redash/env
restart: always
services:
#workerを追加
worker:
<<: *redash-service
command: worker
environment:
QUEUES: "periodic emails default"
WORKERS_COUNT: 1
server:
<<: *redash-service
command: server
ports:
- "5000:5000"
environment:
REDASH_WEB_WORKERS: 4
scheduler:
<<: *redash-service
command: scheduler
#schedulerのenvironment を削除
scheduled_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "scheduled_queries,schemas"
WORKERS_COUNT: 1
adhoc_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "queries"
WORKERS_COUNT: 2
redis:
image: redis:5.0-alpine
restart: always
postgres:
image: postgres:9.6-alpine
env_file: /opt/redash/env
volumes:
- /opt/redash/postgres-data:/var/lib/postgresql/data
restart: always
nginx:
image: redash/nginx:latest
ports:
- "80:80"
depends_on:
- server
links:
- server:redash
restart: always
- コンテナのビルド
docker-compose up --force-recreate --build
- Redashにログインしversion9.0になっていることを確認
画面左下のユーザー名をクリックするとRedashの現在のバージョンが表示されます。
9.0.0-betaになっていればバージョンアップ完了です。
【手順3】CloudWatch Logs Insightsデータの取得
最後に作成したRedashでCloudWatch Logs Insightsのデータ取得を行います。
IAMでRedashユーザーの作成
RedashからAWSリソースにアクセスするためにIAMにRedashユーザーを作成します。
AWS IAMから ユーザー > [ユーザーを追加]
プログラムによるアクセスにチェックを付けます
アクセス権限から既存のポリシーをアタッチを選択します。
今回はLambdaのCloudWatch Logs Insightsデータを取得したいためAWSLambdaFullAccess
にチェックを入れます。
ユーザーの作成が完了すると、アクセスキーが発行されるためダウンロードし安全な場所に保管します。
データソースの追加
Setting > Data Sources > [New Data Data Source] からAmazon CloudWatch Logs Insightsを選択します。
データソース追加に必要な情報を設定します。
- Name:任意
- AWS Region:東京リージョンなら「ap-northeast-1」
- AWS Access Key:IAMで発行したもの
- AWS Secret Key:IAMで発行したもの
Create後、[Test Connection]が成功すればデータソースの追加完了です。
指定のロググループのデータを取得
最後です。
Queriesからデータ取得のクエリを作成します。
左上のプルダウンから先ほど追加したデータソースを選択
記法についてはCloud Watch Logs Insightsの記法と変わりません。
今回はTwitter APIのログデータを取得しました。
無事取得できました。
{
logGroupName: '/aws/lambda/rep_Tweet',
startTime: 1590926139,
queryString: '
fields @timestamp,@message |
filter @message like /event/ |
sort @timestamp desc |
display @timestamp,follow_events.0.target.name,follow_events.0.type,follow_events.0.target.screen_name,follow_events.0.target.description |
limit 1
'
}