ThoughtSpot 6.0.5をEC2インスタンスにインストールする

サーバソフトをOSにインストールする作業、SaaSに慣れてしまった身からすると、ちょっと懐かしかったです。
2021.01.13

はじめに

ThoughtSpotとは、一言で表すなら「BIツール」です。

システム的な視点での特徴は、以下になります。

  • クライアントソフトのインストール不要、分析者はブラウザがあれば利用可能
  • 分析者がブラウザで通信できるネットワーク内に、ThoughtSpotが稼働するサーバが必要
  • ThoughtSpotは、SaaSとインストールベースでサーバを構成する方法のどちらでも選択、利用可能
  • インストールベースのThoughtSpotサーバは、インストール対象のマシンはオンプレ/クラウド両対応
  • ThoughtSpotは、分析データの格納場所を選択可能
    • Falcon: 分析データをThoughtSpotサーバ内蔵のインメモリデータベースに格納する構成
    • Embrace: ThoughtSpotサーバから通信可能な外部のデータウェアハウスやデータベースに格納する構成
  • Falconを利用した場合は、AIによる自動分析が可能(SpotIQ)

今回、検証目的でAWS環境にThoughtSpotをインストールしました。

AWS基盤環境準備

まず、ThoughtSpot検証の為のAWSアカウントを新規に払い出してもらい、主だったところで以下を構成します。

  • リージョン: ap-northeast-1(東京)
  • VPC: 10.100.0.0/16
  • サブネット: 10.100.0.0/24(パブリック), 10.100.1.0/24(プライベート)
  • インターネットゲートウェイを作成し、VPCにアタッチ
  • 各サブネット-S3通信用のエンドポイント追加作成

この時に作成するリソース名にはできる限り"thoughtspot-"の接頭辞を付けます。

ここまでで最低限の設定ができました。AWS側の準備はもう少しありますが、ここからの作業は次節で説明します。

ThoughtSpotサーバ用EC2インスタンス構築

注:今回インストールに使用したバージョンは6.0.5でしたが、他バージョンをインストールする場合は画面右上のドロップダウンリストから対象のバージョンを選択してください(下図参照)。

ThoughtSpot社のドキュメントに、ThoughtSpotをEC2インスタンスにインストールする手順が記載されています。

こちらに従って作業を進めます。

EC2インスタンス構成の検討

EC2インスタンスは検証目的なので最小構成を選択します。
また、EC2インスタンスでThoughtSpotを構成する際に、永続データ格納先の構成として、以下の2つが選択できます。

  • EBSのみの永続ストレージ
  • EBSおよびS3永続ストレージ

今回はEBSのサイズを減らせるS3との併用構成を選択し、EBSの月額利用量を抑えます。
以下設定の場合、EC2インスタンスは毎月10日、8時間稼働させて毎月約100ドル、EBSはEC2インスタンスの動作に関わらず毎月60ドルの料金が発生します。

  • EC2インスタンス: r5.4xlarge
  • EBS: gb2 500GB x1
  • S3バケット: こちらのドキュメント記載内容に従ってバケットを新規作成

データ格納用S3バケット名はcm-thoughtspot-dataとし、それとは別にバケットcm-thoughtspotを作成し、ここにアクセスログを吐くよう設定してみます。

ThoughtSpot AMIイメージのコピー

ThoughtSpotのEC2インスタンス構築にはThoughtSpotが提供する専用のAMIを使用します。元となるThoughtSpotAMIは北カリフォルニア(N.California)リージョンにあるので、インスタンス立ち上げ予定の東京リージョンへコピーします。

AWS管理コンソール、EC2ダッシュボードでリージョンを北カリフォルニアに変更し、左メニューの[イメージ]-[AMI]を選択します。AMIの検索フォームから以下AMIを検索し、[アクション]メニューからAMIのコピーを選択します。

  • AMI Name: thoughtspot-image-20200304-8b8c7b0e56a-prod
  • AMI ID: ami-09079fee8bc0543fc

AMIのコピー画面で東京リージョンを選択し、AMIを東京リージョンにコピーします。

この時にAMIには新しいIDが付与されるので作業完了後に、EC2ダッシュボードの表示リージョンを東京に変更して、マイAMIから確認しておくと良いでしょう。

EC2インスタンスの構築

コピーしたAMIを使用して、下記ドキュメントに従いEC2インスタンスの構築を行います。

EC2インスタンスはパブリックサブネットに配置します。また、事前に用意しておいたEIPとの紐付けも行います。

EBSサイズは、先に決定した通りgp2 500GBを1本と設定します。

セキュリティグループ設定を追加します。最低限開放すべきポートは、sshのための22, httpなどの他通信の為の80, 443, 2201, 2101, 4001, 4251となります。

最後にキーペアの指定があるので、手持ちのキーペアを指定(必要なら新規作成)し、EC2インスタンスを起動させます。

数分でインスタンス起動が確認できるはずです。

ThoughtSpot 6.0.5ソフトウェアインストール

今回の検証に際し、ThoughtSpot社から以下を提供頂きました。

  • EC2インスタンス adminユーザのパスワード
  • ThoughtSpotインストールバイナリファイル(6.0.5.tar.gz)

この情報およびファイルを使用してこの後ThoughtSpotのインストールを行います。

EC2インスタンスログイン〜インストールメディア準備

手元のsshクライアントから、adminユーザでEC2インスタンスにログインできることを確認しておきます。失敗する場合はポート22の通信が使えるかセキュリティグループの設定を確認します。

sshログインが確認できたら、scpコマンドを使ってThoughtSpotインストールバイナリファイル(6.0.5.tar.gz)をadminユーザのホームディレクトリ以下に転送しておきます。

インストーラー起動

主な手順は、以下ThoughtSpotのドキュメントに記載されています。

EC2インスタンスにsshログインした後、あらかじめEC2インスタンスにインストールされているThoughtSpotの管理コマンドtscliを起動して、インストールコマンドの実行を開始します。

$ tscli cluster create 6.0.5.tar.gz --enable_cloud_storage=s3a

今回は、ストレージをEBSとS3組み合わせて構成するので、パラメータ--enable_cloud_storage=s3aを与えます。

Unpacking 6.0.5.tar.gz to /export/release_cache/6ea1067b31f7c2177c876fbab2cd012a

インストーラのアーカイブを展開しているようなのでしばらく待ちます…2分くらいでインストーラからメッセージが表示されます。

以下、1問1答形式で設定情報を入力していきます。

Enter a name for the cluster (alphanumeric characters only): classmethod-nonprod-1
Enter cluster ID: classmethod-nonprod-1
Enter IP addresses of all hosts in the cluster (space separated): xxx.xxx.xxx.xxx
Localhost's IP must be included in list of hosts.
Enter IP addresses of all hosts in the cluster (space separated): 10.100.0.237
Enter email addresses for alerts (space separated, "later" to skip): xxxx.xxxx@xxxx.xx
Enter the Aws S3 bucket to be configured for the cluster: cm-thoughtspot
Please supply an empty bucket.
Enter the Aws S3 bucket to be configured for the cluster: cm-thoughtspot-data
Bucket successfully validated.

全ての質問事項に回答すると、ファイルコピーと設定が行われます。

2020-06-11 14:16:07,390 Pushing /usr/local/scaligent/toolchain/jolokia to localhost
2020-06-11 14:16:07,548 Rsync finished on localhost
2020-06-11 14:16:07,548 Rsync finished to all hosts
2020-06-11 14:16:07,548 Pushing /usr/local/scaligent/toolchain/jvm to localhost
2020-06-11 14:16:07,727 Rsync finished on localhost
2020-06-11 14:16:07,727 Rsync finished to all hosts
2020-06-11 14:16:07,727 Pushing /usr/local/scaligent/toolchain/hadoop to localhost
2020-06-11 14:16:07,907 Rsync finished on localhost
2020-06-11 14:16:07,907 Rsync finished to all hosts
2020-06-11 14:16:07,907 Pushing /usr/local/scaligent/toolchain/zookeeper to localhost
2020-06-11 14:16:08,086 Rsync finished on localhost
2020-06-11 14:16:08,086 Rsync finished to all hosts
################################################################
  Setup Hadoop
################################################################
Installing Zookeeper
First deleting existing Zookeeper service
Deleting Zookeeper
Zookeeper Deleted
Starting Zookeeper servers
Zookeeper Ready
Installing HDFS
First deleting existing HDFS service
Deleting HDFS
HDFS Deleted
Deploying configs
Formatting and starting Primary Name Node
Starting Data Nodes
Setting NFS configs
Waiting for HDFS
HDFS Ready
2020-06-11 14:16:21,797 Starting a secondary namenode for checkpoint...
2020-06-11 14:16:22,044 Cannot disable unknown service: hdfs_secondary_namenode
2020-06-11 14:16:22,044 Failed to disable new service: hdfs_secondary_namenode
2020-06-11 14:16:22,505 HDFS secondary namenode started successfully.
Successfully Created zookeeper znodes
Successfully initialized HDFS files 
Successfully saved hadoop layout proto
Successfully moved the release dir to export partition

インストーラが完了したら、EC2インスタンスは強制的に再起動します。

Broadcast message from root@ip-10-100-0-237 (Thu 2020-06-11 14:19:23 UTC):
The system is going down for reboot at Thu 2020-06-11 14:20:23 UTC!

しばらく待って、再度EC2インスタンスにsshログインして、プロセスを確認します。

ThoughtSpotのプロセスを確認するコマンドを発行します。

$ tscli cluster status

2分ほど待つと、以下レスポンスが返ってきます。

Cluster: RUNNING
Cluster name    : classmethod-nonprod-1
Cluster id      : classmethod-nonprod-1
Number of nodes : 1
Release         : 6.0.5
Last update     = Thu Jan  1 00:00:00 1970
Heterogeneous Cluster : False
Storage Type    : S3A
Bucket name     : cm-thoughtspot-data
Database: READY
Number of tables in READY state: 0
Number of tables in OFFLINE state: 0
Number of tables in INPROGRESS state: 0
Number of tables in STALE state: 0
Number of tables in ERROR state: 0
Search Engine is not available.
Please retry after some time.

Search Engineがまだ起動していないようです。しばらく待って、再度確認します。

$ tscli cluster status

Cluster: RUNNING
Cluster name    : classmethod-nonprod-1
Cluster id      : classmethod-nonprod-1
Number of nodes : 1
Release         : 6.0.5
Last update     = Thu Jan  1 00:00:00 1970
Heterogeneous Cluster : False
Storage Type    : S3A
Bucket name     : cm-thoughtspot-data
Database: READY
Number of tables in READY state: 32
Number of tables in OFFLINE state: 0
Number of tables in INPROGRESS state: 0
Number of tables in STALE state: 0
Number of tables in ERROR state: 0
Search Engine: EMPTY
Number of tables in KNOWN_TABLES state: 0
Number of tables in READY state: 0
Number of tables in WILL_REMOVE state: 0
Number of tables in BUILDING_AND_NOT_SERVING state: 0
Number of tables in BUILDING_AND_SERVING state: 0
Number of tables in WILL_NOT_INDEX state: 0

Search Engineが起動している事が確認できました。インストール直後なので、テーブルは全くありません。

インストール後の動作確認

ThoughtSpotサーバプロセスの起動が確認できたので、ブラウザでアクセス可能になっています。
ローカルマシンでブラウザを開き、EIPを設定したThoughtSpotサーバにアクセスします。デフォルトのThoughtSpot管理者アカウントtsadminでサインインします。

ThoughtSpot管理画面が表示されました。まずはこれで一旦基本的なインストールは完了です。

追加設定

正常動作が確認できたので、日本語対応などの追加設定を行います。

日本語対応化設定

ThoughtSpotサーバにsshログインして、以下のコマンドを実行します。

$ tscli --adv service add-gflag sage_worker.index_server max_substring_length_to_index 90
$ tscli --adv service add-gflag sage.auto_complete ac_max_length_data_match 90
$ tscli --adv service add-gflag sage.auto_complete ac_disable_auto_tokenization_when_substring_matches_present false
$ tscli --adv service add-javaopt tomcat.tomcat D orion.exportConfig.addBOMToCSV true
$ tscli --adv service add-gflag falcon.worker falcon_preserve_case true
$ tscli --adv service add-gflag falcon_manager.falcon_manager falcon_preserve_case true
$ tscli --adv service add-javaopt tomcat.tomcat D orion.enableAggrWsTableJoin true

設定変更が終わったら、ThoughrSpotをクラスタを再起動します。

$ tscli cluster stop
$ tscli cluster start

再びブラウザでThoughtSpotサーバへサインインします。[プロファイル]から[基本設定]-[言語]で日本語を選択します。これで画面表示が日本語に変わります。

Embrace(外部DBへの検索)の有効化

データ格納先を外部のデータウェアハウスにする構成をEmbraceと言いますが、この構成を有効化します。ThoughtSpotサーバ上にsshログインし、以下のコマンドを実行します。

$ tscli service add-javaopt tomcat.tomcat D orion.embraceConfig.enabled true --adv

以下のメッセージが表示され、Embraceが有効になります。

Adding new type D javaopt override orion.embraceConfig.enabled for tomcat.tomcat
New value: true
Override added successfully

以上です。これでThoughtSpotを利用する環境が整いました。