Tableau Server のディスクフル対策

Tableau Serverのインストール後は、終わりではなく始まりです。インストールした後に運用の手間を省くためにやっておいたほうが良いディスクフル対策について解説します。

なお、Tableau Server インストールについては、以下のブログを参考にしてください。

インストール後そのまま使い続けるとどうなるか

データディスクのサイズやアクセス頻度によって様々ですが、ログを削除しなければ徐々にディスク容量が少なくなり、場合によってはディスクの空き領域不足によるサービスが停止が発生します。

Tableau Serverが自動でログローテーションしない理由は、恐らく、内部動作しているApache WebServer のアクセスログなど、誰がいつどのURLにアクセスしたかなどの情報の管理について利用者の判断に委ねられているのではないかと考えられます。しかしながら、ログがディスクを圧迫してサービス停止に陥るのは避けたいものです。

ディスク使用率を監視する方法

監視サービス(弊社のサービスだと フートモニタリング 等)や Tableau Serverのサブスクリプション機能(ディスク容量低下の監視)などを利用する2つの方法が考えられます。開発・検証、PoC目的でない限り何かの監視は必須と考えたほうが良いでしょう。

ディスクフルが発生した場合の対処

Tableauでは安全にログ削除する方法をコマンドを提供しています。利用可能なディスク領域を増やすには、『tabadmin cleanup』コマンドを実行してログファイル、一時ファイル、および不必要なエントリーを削除します。

クリーンアップを行うには次のコマンドを使用します:

tabadmin cleanup

restart オプションを追加できます。これは、『tabadmin stop』、『tabadmin cleanup』、および 『tabadmin start』 を実行するのと同等です:

tabadmin cleanup --restart

tabadmin cleanup』コマンドによって削除されるファイルやデータベースのエントリーは、Tableau Serverが実行中か停止中かによって異なります。そのため、可能性のあるすべてのファイルとデータベース エントリをクリーンアップするには、『tabadmin cleanup』を 2 回実行することをお勧めします。1 回は Tableau Server の実行中、もう 1 回は停止中です。

2回(というか2種類)、、、どうするか迷うところでしょう。

ログのクリーンナップの方針

Tableau Serverが実行中に『tabadmin cleanup』を実行することで、概ねディスク領域が開放されますので、運用中はこのコマンドを定期的に実行することをおすすめします。Tableau Serverが停止して『tabadmin cleanup』を実行するのは、バージョンアップ作業などの計画停止のタイミングで実行するので良いでしょう。

Tableau Server が停止した状態で『tabadmin cleanup』 を実行すると、以下のとおりになります。 すべてのログ ファイルが ProgramData\Tableau\Tableau Server\data\tabsvc\logs から削除されます(ProgramData\Tableau\Tableau Server\logs からのログ ファイルは削除されません)。

一時ファイルは ProgramData\Tableau\Tableau Server\temp および ProgramData\Tableau\Tableau Server\data\tabsvc\temp から削除されます。

Tableau Server PostgreSQL データベースでは、サーバーが停止中はデータベースにアクセスできないため、http_requests表から HTTP 要求の列は削除されません。

Tableau Server が実行している状態で『tabadmin cleanup』 を実行すると、以下のとおりになります。 ログ ファイルのローテーション間隔より古いログ ファイルは、ProgramData\Tableau\Tableau Server\data\tabsvc\logsから削除されます。(デフォルトで、ローテーション間隔は 1 日です。) ProgramData\Tableau\Tableau Server\logs からのアクティブなログとログ ファイルは削除されません。

一時ファイルは削除されません。

使用中 (つまり、オペレーティング システムによってロックされている) ファイルは削除されません。

7 日より古い HTTP 要求の列は、Tableau Server PostgreSQL データベースの http_requests 表から削除されます。

上記引用:不必要なファイルの削除

なお、ログを削除するということは削除したログが参照できなくなるということを意味しますので、その点はご理解ください。ログを定期的に保存したい場合は『tabadmin ziplogs』コマンドで事前にアーカイブを作成して、S3など別のストレージに保存するように実装が必要です。

定期的なログのクリーンナップ

Tableau Serverが実行中にのみ『tabadmin cleanup』を実行するPowerShellスクリプトを実装して、タスクスケジューラへの登録します。なお、tabadminコマンドはバージョンごとにインストールパスが異なりますのでご注意ください。

サンプル:tabhotcleanup.ps1

$tabadmin = "D:\Tableau\Tableau Server\10.1\bin\tabadmin.exe"
$ret = & $tabadmin "status"
if ( $ret -eq 'Status: RUNNING') {
  & $tabadmin "cleanup"
}

上記はあくまでもv10.1用のサンプルです。Tableau Serverのインストーラは環境変数PATHにbinのパスを追加しないことに加えて、あまり気軽に実行してほしくないという思いもあり、イケていませんがコードの中にtabadminコマンドのパスを含めています。

Windows Serverのタスクスケジューラーに登録する方法は、こちらをご参考にしてください。

  • プログラム:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  • 引数:-c "D:\tableau_claenup\tabhotcleanup.ps1"

その他の定期的なログのクリーンナップ方法:バックアップ

tabadmin backup』コマンドを定期的に実行することで過去ログを掃除する役目も持っており、ストレージ容量とログファイルを扱うメモリ量を減らすと言う意味でもメリットがあります。

バックアップを実行すると、7 日を経過したログ ファイルは削除されます。バックアップ前にログを保存する場合は、バックアップを開始する前に次のコマンドを実行します。

上記引用:Tableau Server データのバックアップ

バックアップについては以下のブログを御覧ください。

最後に

一般的なサーバーアプリケーションと異なり、ログが自動的にローテーションしませんので、ログの定期的な削除や定期バックアップによって、ログの削除を実施することをおすすめします。