Tableau Server の監視〜通報〜復旧を自動化する
本日は、Tableau Server の状態監視と、障害通知や自動復旧についてご説明します。
Tableau Serverは社内の情報分析のみならず、DMPサービスの提供プラットフォームとして導入が進んでいます。利用者にサービスを継続して提供するために欠かせないのが監視〜通報〜復旧の自動化です。
はじめに
Tableau Server の状態監視ついて以下の3つの方法と、それぞれの目的と方法についてご説明します。
- tabadminコマンドによるサービス
- httpによるURL監視
- systeminfoによる状態監視
1. tabadminコマンドによるサービス監視
Tableau Serverでは tabadmin というサーバー管理者向けのコマンドが提供されています。Linux の service コマンドや systemctl コマンドのように start / stop / restart / status に利用できます。
tabadmin コマンドで状態(status)を確認して、動いていない(RUNNINGではない)場合を障害発生と判定します。この方式は、内部コマンドによるサービスのプロセス/サービスの状態を監視することが目的です。
下の2つのコメント行は、サービス停止と判定した場合に、アラートメールの送信とサービスの再起動するコードをインクルードします。詳細は後ほど解説します。
service-statuscheck.ps1
$CMD="C:\Program Files\Tableau\Tableau Server\8.3\bin\tabadmin.exe" $isFailed = $True $ret = &$cmd "status" if ($ret -eq 'Status: RUNNING') { Write-Host "Succeed." $isFailed = $False } else { Write-Host "Failed." } #. C:\Users\Administrator\Desktop\alert-mail.ps1 #. C:\Users\Administrator\Desktop\auto-regression.ps1
2. httpによるURL監視
この方式は、URLにHTTP要求を送り、200番台応答が返る事ができるかを判定することで、L7レベルの稼働状態を監視します。
監視の対象として、Tableau Server に対して直接 HTTP 要求を送る場合と、Tableau Server のフロントにあるロードバランサ(ELB)に対して HTTP 要求を送る場合では目的が異なります。前者は各サーバー毎の稼働状態の監視、後者はロードバランサを含めたサービスの監視となります。
以下のような URL に対して HTTP 要求を送ります。(外部からは HTTPS で確認するのが一般的です)
http://<domain-name>/auth
url-statuscheck.ps1
$CMD="C:\Program Files\Tableau\Tableau Server\8.3\bin\tabadmin.exe" $isFailed = $True try { $result = Invoke-WebRequest -Uri http://localhost/auth -MaximumRedirection 0 -TimeoutSec 10 if ($result.StatusCode -eq 200) { Write-Host "Succeed." $isFailed = $False } else { Write-Host "Failed. StatusCode=$result.StatusCode" } } catch { Write-Host "Failed. Could not connect to remote server" } #. C:\Users\Administrator\Desktop\alert-mail.ps1 #. C:\Users\Administrator\Desktop\auto-regression.ps1
3. systeminfo による状態監視
Tableau Server では、指定した URL に HTTP 要求を送ると稼働状況をXML形式で情報を取得できます。この方式では各サーバー毎のより詳細な稼働状態を監視することが目的です。
情報を取得するには、以下のような URL に対して HTTP 要求を送ります。(外部からは HTTPS で確認するのが一般的です)
http://<domain-name>/admin/systeminfo
systeminfoによる状態取得の設定
デフォルトではこのURLへの接続を受け付けません。このURLに対するリクエストを許可するIPアドレスを追加するには、次の操作を行います。
手順1 リクエストを許可するIPアドレスを追加
以下の例では、内部からの状態取得を想定しているので、"127.0.0.1" を登録します。
PS C:\Users\Administrator> cd "C:\Program Files\Tableau\Tableau Server\8.3\bin" PS C:\Users\Administrator> ./tabadmin set wgserver.systeminfo.allow_referrer_ips 127.0.0.1
手順2 設定の反映
PS C:\Program Files\Tableau\Tableau Server\8.3\bin> ./tabadmin config ===== Wrote configuration files to C:/ProgramData/Tableau/Tableau Server/data/tabsvc/config
手順3 Tableau Server の再起動
PS C:\Users\Administrator> ./tabadmin restart ===== Stopping service... -- Service stopped successfully ===== Starting service... -- Service was started successfully
確認
Tableau Server 上の Web ブラウザからhttp://localhost/admin/systeminfo にアクセスします。
この構成では1台構成のローカル認証の場合は上記の情報が表示されます。
以下の例では、server の status 属性のみ監視していますが、更に各 worker の状態(OKやBUSY)を取得できますので、増強計画にも役立てるのではないかと考えられます。
systeminfo-statuscheck.ps1
$CMD="C:\Program Files\Tableau\Tableau Server\8.3\bin\tabadmin.exe" $SYSTEMINFO_URL="http://localhost/admin/systeminfo" $isFailed = $True try { $result = Invoke-WebRequest -Uri $SYSTEMINFO_URL -MaximumRedirection 0 -TimeoutSec 10 if ($result.StatusCode -eq 200) { $xmlDoc = $result.Content $statusCord = $xmlDoc.systeminfo.service.status if ($statusCord -eq 'OK') { Write-Host "Succeed." $isFailed = $False } else { Write-Host "Failed." } } else { Write-Host "Failed." } } catch { Write-Host "Failed. Could not connect to remote server" } #. C:\Users\Administrator\Desktop\alert-mail.ps1 #. C:\Users\Administrator\Desktop\auto-regression.ps1
アラートメールの送信
サービスが停止している場合(isFailed)は、アラートメールの送信します。以下の例ではSNSのパブリッシュ(メール送信)に AccessKey と SecretKey を指定していますが、IAMRole で EC2 インスタンスにSNS の権限が付与されている場合は不要です。
なお、この機能を有効にするためには、各スクリプトの以下の行頭のコメントを削除してください。
#. C:\Users\Administrator\Desktop\alert-mail.ps1
alert-mail.ps1
$topic="arn:aws:sns:ap-northeast-1:123456789012:service-alert" $subject="[Tableau Server] Service Failure" $message="Service AutoRegression Start!" $accessKey="AAAAAAAAAAAAAAAAAA" $secretKey="SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS" if ($isFailed) { # Alert Mail Publish-SNSMessage -TopicArn $topic -Subject "subject" -Message "message" -AccessKey $accessKey -SecretKey $secretKey }
サービスの自動復旧
サービスが停止している場合(isFailed)は、サービスの停止した後、開始します。
単一構成の場合はこれで構いませんが、クラスタを構成するサーバーの種類(Primary、BackupPrimary、Worker)によっては自動復旧の可否や順番を考慮してください。
なお、この機能を有効にするためには、各スクリプトの以下の行頭のコメントを削除してください。
#. C:\Users\Administrator\Desktop\auto-regression.ps1
auto-regression.ps1
if ($isFailed) { ## AutoRegression &$CMD "stop" &$CMD "start" }
まとめ
Tableau Server の状態監視ついて3つの方法をご紹介しました。自己監視をするなら1,2,3いずれの方法も可能です。外部から監視する場合は2と3のいずれかで、内部の worker の状態まで監視したいのなら3となります。2の監視はフロントのロードバランサ(ELB)も含めたサービス監視ができますので、監視方法は目的によって使い分けてください。