モニタリングツール Redshift Console を試してみた

2015.09.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今回ご紹介する Redshift Console というツールは、Amazon Redshift の スキーマ/テーブルの定義やディスクの利用状態といったクラスタの中の状態についてモニタリングするツールです。

Redshift Console とは

Amazon Redshift は、マネジメントコンソールからクラスタのアクティビティやクエリーをモニタリングする機能が提供されています。このツールは、Redshift クラスターのモニタリングや管理する目的で作られ、執筆時点の最新バージョンは、0.1.2となり、以下の機能が提供されています。

  • Queries … 実行中クエリの参照と停止
  • Schemas … スキーマやテーブルの情報
  • Loads … ロードエラーページ
  • Status … この画面では、Redshiftクラスタからの状態取得状況を表示

導入

このツールは起動すると、ウェブサーバーを5000ポートでリスンしますので、Amazon Linuxにインストールする場合は事前にセキュリティグループで5000ポートからアクセスを許可してください。

EC2にインストールする場合

sudo yum -y install postgresql-devel gcc
sudo pip install --upgrade pip
sudo /usr/local/bin/pip install redshift-console

MACにインストールする場合

インストール前にコマンドラインからccが利用できるようにします。(Xcodeインストール済みの環境です。)

sudo cc

postgresqlのクライアントをインストールします。

brew install postgresql92

redshift-consoleのインストールです。なお、インストールした環境のPythonは、2.7.10です。

sudo /usr/local/bin/pip install redshift-console

ツールの実行

ツールを実行する前に、Redshiftの接続情報を環境変数 REDSHIFT_CONNECTION_STRING に設定して、redshift-consoleを実行するだけです。

export REDSHIFT_CONNECTION_STRING='user=<username> password=<password> host=<endpoint> port=<port> dbname=<database_name>'

redshift-console runserver

以下のようにメッセージが標準出力に表示されたら、Redshiftに接続してクラスタの状態取得が成功しています。

[ec2-user@ip-10-0-0-110 ~]$ redshift-console runserver
Starting server on port 5000 (debug mode: False).
[I 150925 00:50:31 redshift:103] Queries starting refresh
[I 150925 00:50:31 redshift:103] Tables starting refresh
[I 150925 00:50:34 redshift:113] Queries finished refreshing.
[I 150925 00:50:37 redshift:113] Tables finished refreshing.
 :
 :

機能の紹介

ウェブブラウザからこのツールが起動しているサーバーに対して、5000番ポートにHTTPアクセスします。

Queries

このツールにアクセスすると最初に表示されるHomeは、Queries画面の In Flight で、実行中のクエリーを一覧表示し、右の Cancel をボタンを押すだけでクエリーを中断させられます。 redshift_console-queries-inflght

但し、ショートクエリーは表示されない場合があるので、ショートクエリーはマネジメントコンソールのQueriesビューを参照することをおすすめします。 Queriesビューについては、Amazon Redshift Queries ビューで問題のクエリを特定するを参照を御覧ください。

以下のクエリが必ず表示されますが、この画面を表示するためのSQL文なのでこれは無視して構いません。

select query as id, trim(usename) as username, starttime as timestamp, text as query, pid as pid from svv_query_inflight join pg_user on svv_query_inflight.userid=pg_user.usesysid order by id, sequence;

その下の Queries Queue は、WLMのQueueの状態が表示できます。マネジメントコンソールから参照できないキュー毎の実行状態や待ち状態を確認できます。これは便利ですね。

redshift_console-queries-queue

Schemas

スキーマ毎のテーブルの一覧とそのサマリー情報が表示ます。この機能も便利です。

redshift_console-schema

  • Size (MB) … テーブルのデータのサイズです。
  • Sorted Area … ソートされているデータの比率で、値が小さいほど結果は良好です。
  • Dist Key … 分散キー指定の有無です。
  • Sort Key … ソートキー指定の有無です。
  • Column Encodings … 列圧縮指定の有無です。
  • Distribution Skew … データの偏り比率で、値が小さいほど結果は良好です。
  • Slice Populated … スライスの割合は、値が大きいほど結果は良好です。

更にテーブル名をクリックするとテーブル定義を参照できます。

redshift_console-schema-tables

  • Column Name … カラム名です。
  • Type … カラムのデータ型です。文字列系は character varying(n)と表示されます。
  • Encoding … 列圧縮タイプです。
  • Sort key … ソートキー指定の有無です。複合キーに指定すると順番が付けられます。
  • Dist Key … Distkey指定の有無です。

Loads

過去24時間のデータをロード(COPY)の実行エラーを表示します。データの元はSTL_LOAD_ERRORSテーブルなので、このツールのユーザーはSTL_LOAD_ERRORSテーブルに対するSELECT権限が必要になります。

redshift_console-loads

Status

この画面では、Redshiftクラスタからの更新状況を表示します。スキーマやテーブルに関する更新間隔は10分毎、クエリーに関する更新間隔は1分毎です。

redshift_console-status

最後に

これまで調査用のSQLをカットアンドペーストして参照していましたが、このツールを利用することでブラウザからサクっとクラスタ全体を俯瞰して見ることができるのはとても便利です。 このツールはセキュリティのことは考慮されていないので、このツールをパブリックから利用するのは避けたほうが良いでしょう。Redshiftのパブリック通信がSSLで暗号化した環境(ssl_required=trueに設定)であれば、このツールを社内のMacで起動してlocalhost接続するのが扱い易いのではないかと思います。 このツールは、開発が始まったばかりなので今後のバージョンアップも期待したいところです。