Tableau Server向け監視ツール「Tabmon」を使ってみた #tableau

はじめに

※本エントリはTableau Server v2018.3を前提としています。

こんにちは。DI部@大阪オフィスのtamaです。

今回はTabmonというツールをご紹介します。

Tabmonとは

Tableau社が開発したオープンソースのツールで、Tableau Serverのパフォーマンスを監視・分析することができます。また、そのデータを収集・可視化した情報を、Tableauワークブックの形で閲覧することもできます。

Tabmonをインストールするための条件など

インストール要件

下記の環境にインストールすることができます。基本的にはTableau ServerがインストールされているWindows Serverに入れる形になります。

  • Windows OS
  • Tableau Server v9以上
  • Windows Management Framework 3.0
  • Microsoft .NET Framework 4.5以降
    • Tabmonインストール時にインストールされます。
  • VS 2013用のVisual C ++再頒布可能パッケージ
    • Tabmonインストール時にインストールされます。

インストールする前にTableau Serverでやっておくこと

Tableau Server JMXポートを解放しておく

下記のTSMコマンドを実行しておきます(バージョン2018.2以降)

tsm configuration set -k service.jmx_enabled -v true
tsm pending-changes apply

(任意)Tableau Serverリポジトリ設定を有効化する(readonlyユーザーを用意する)

Tabmonのサンプルワークブックを使用する場合のみ必要となります。下記TSMコマンドを実行しておきます。

tsm data-access repository-access enable --repository-username readonly --repository-password <パスワード>

やってることは、下記エントリに書かれていることと同じです。

Tabmonをインストールしてみる

インストーラーをGETする

下記よりダウンロードします(今回は1.3をインストールします)。

インストーラー実行

GETしたインストーラーを実行します。すると、OptionとInstallという2つのボタンが表示されますが、まずはOptionsを選択しましょう。

こちらの画面で、Tabmonのインストール先と、同時にインストールするPostgresのインストール先を設定します。また、Postgresのパスワード等も設定できます。今回はオール初期設定でいきます。OKを押しましょう。

先程の画面に戻るので、Installを選択すると、あれよあれよと言う間にインストールが完了します。

Tabmonを実行する前の事前設定

Tabmon.configの設定を行う

実行する前にTabmon.configというファイルの内容を編集する必要があります(ここを正しくしておかないと、監視結果のワークブックに何も表示されない)。

Tabmon.configは、\Program Files (x86)\TabMon\Config\TabMon.configにあります。

インストール直後の内容は下記のようになっています。

<?xml version="1.0"?>
<!-- TabMon user settings: set these as required -->
<TabMonConfig xmlns="TabMon">
  <!-- Output mode.  "DB" for database, "CSV" for flat-file export -->
  <OutputMode value="db"/>
  <!-- Polling rate, in seconds -->
  <PollInterval value="60"/>
  <!-- Target cluster & host configuration -->
  <Clusters>
    <Cluster name="Primary">
      <Host computerName="YOURCOMPUTERNAME" address="localhost" specifyPorts="false"/>
    </Cluster>
  </Clusters>
  <!-- Results output database Configuration-->
  <Database name="TabMon" type="Postgres">
    <Server host="localhost" port="5432"/>
    <User login="tabmon" password="xxxxxxxx"/>
    <Table name="countersamples"/>
    <!-- Generate indexes on service startup. -->
    <Indexes generate="true">
      <Index column="timestamp" clustered="true"/>
      <Index column="machine" clustered="false"/>
      <Index column="instance" clustered="false"/>
    </Indexes>
    <!-- Automatically drop data rows older than the specified number of days.
         Set enabled="true" to turn this on. -->
    <PurgeOldData enabled="false" thresholdDays="30"/>
  </Database>
</TabMonConfig>

Tabmonを活用するためには、Tableau ServerのJMXプロセスであるvizqlserver、vizportal、dataserver、backgrounderのJMXポートを調べて、このコンフィグファイルに記載する必要があります。Tableau Serverの各プロセスのポートを確認するには tsm topology list-portsコマンドを使用します。…しかし、このコマンドでそれぞれのポートを調べてコンフィグファイルに書くのは結構面倒です。そんな人のために、ポートを調べてくれる上にxml部分まで自動で生成してくれるツールがあるので、それを使用します。

上記よりTabMonConfigBuilder.exeをダウンロードし、解凍します。

コマンドプロンプトを開き、上記で解凍したフォルダに移動します。そして下記コマンドを順に実行します。

  1. tsm login -u [TSMで使用するユーザー名]
  2. tsm topology list-ports > [ポート情報を出力するテキストファイル名]
  3. tabmonconfigbuilder [上記で作成したファイル名] [部分を出力するファイル名]
>cd C:\Users\Administrator\Downloads\TabMonConfigBuilder
>tsm login -u Administrator
>tsm topology list-ports > ports.txt
>tabmonconfigbuilder ports.txt tabmon_config_port.txt
Parsing topology file for process entries..
Building config section..
Writing config section and instructions to tabmon_config_port.txt..
Done writing config section..
Exiting..

最終的に出力されたファイルの中を確認すると、下記のxmlが記述されています。

   <Host computerName="node1" address="node1" specifyPorts="true">
        <ProcessType processName="dataserver">
          <Process portNumber="xxxx" processNumber="x"/>
          <Process portNumber="xxxx" processNumber="x"/>
        </ProcessType>
        <ProcessType processName="vizql">
          <Process portNumber="xxxx" processNumber="x"/>
          <Process portNumber="xxxx" processNumber="x"/>
        </ProcessType>
        <ProcessType processName="background job monitor">
          <Process portNumber="xxxx" processNumber="x"/>
          <Process portNumber="xxxx" processNumber="x"/>
        </ProcessType>
        <ProcessType processName="vizportal">
          <Process portNumber="xxxx" processNumber="x"/>
        </ProcessType>
      </Host>

このxmlのcomputerNameaddressを正しい値に書き換えて、Tabmon.configにペーストしましょう。

<?xml version="1.0"?>
<!-- TabMon user settings: set these as required -->
<TabMonConfig xmlns="TabMon">
  <!-- Output mode.  "DB" for database, "CSV" for flat-file export -->
  <OutputMode value="db"/>
  <!-- Polling rate, in seconds -->
  <PollInterval value="60"/>
  <!-- Target cluster & host configuration -->
  <Clusters>
    <Cluster name="Primary">
      <Host computerName="ec2amaz-xxxxxx" address="localhost" specifyPorts="true">
        <ProcessType processName="dataserver">
          <Process portNumber="xxxx" processNumber="x"/>
          <Process portNumber="xxxx" processNumber="x"/>
        </ProcessType>
        <ProcessType processName="vizql">
          <Process portNumber="xxxx" processNumber="x"/>
          <Process portNumber="xxxx" processNumber="x"/>
        </ProcessType>
        <ProcessType processName="background job monitor">
          <Process portNumber="xxxx" processNumber="x"/>
          <Process portNumber="xxxx" processNumber="x"/>
        </ProcessType>
        <ProcessType processName="vizportal">
          <Process portNumber="xxxx" processNumber="x"/>
        </ProcessType>
      </Host>
    </Cluster>
  </Clusters>
  <!-- Results output database Configuration-->
  <Database name="TabMon" type="Postgres">
    <Server host="localhost" port="5432"/>
    <User login="tabmon" password="xxxxxxxx"/>
    <Table name="countersamples"/>
    <!-- Generate indexes on service startup. -->
    <Indexes generate="true">
      <Index column="timestamp" clustered="true"/>
      <Index column="machine" clustered="false"/>
      <Index column="instance" clustered="false"/>
    </Indexes>
    <!-- Automatically drop data rows older than the specified number of days.
         Set enabled="true" to turn this on. -->
    <PurgeOldData enabled="false" thresholdDays="30"/>
  </Database>
</TabMonConfig>

computerNameについて

こちらを手っ取り早く確認するには、コマンドプロンプトでhostnameコマンドを実行するのが楽です。

>hostname
EC2AMAZ-xxxxxx

Tabmon.configにペーストする際、小文字で入力することをオススメします(大文字の場合、Tabmonの監視結果が正常に出力されなかった)。

addressについて

今回、TabmonはTableau Serverと同じインスタンスにインストールしているのでlocalhostを指定します。

Tabmonの実行

設定ファイルが整ったら、いざ実行します。…といっても、普通にWindowsメニューから実行するだけです。

これで、Tabmonが動き始めて、Tableau Serverの監視をスタートします。

結果の確認

Tabjoltもそうでしたが、Tabmonも一番大事なのはここです。監視した結果を確認するためには、下記のTableauワークブックを開きます。

\Program Files (x86)\TabMon\Resources\Sample Workbooks\2018.2+\Tabmon.twb

※Tabmonインストール直後、「2018.2+」のフォルダが無い場合があります。その時は下記からワークブックだけダウンロードしましょう。

  • https://github.com/tableau/TabMon/files/2678117/TabMonWorkbook.zip

開いてみる

このワークブックは、Tabmonと同時にインストールされるPostgreSQLとTableau Serverリポジトリを参照します。Tabmon側のPostgreSQLのパスワードですが、もし忘れたというかたはTabmon.configをよーく見ましょう(書いてます)。

CPUやメモリ、ディスクI/Oの情報を時系列で確認することができます。Tabjolt同様、このワークブックもそれなりに盛り沢山なので、詳細は別エントリで書いていきたいと思います。

おわりに

Tabmonをインストールすることで、Tableau Serverの利用状況とハードウェア側のリソースがどれだけ使用されているか監視することができます。日常的にこのツールでTableau Serverに目を光らせておくことで、Tableau Serverのスケーリングやサイジングを検討することができます。Tabjoltで負荷テストを行い、それをTabmonでチェックする…みたいな使い方もいいかもしれません。

参考