SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server の簡易モニタリングツール Zaiba2 のプロトタイプを公開しました

leave a comment

SQL Server の各種メトリクスを時系列でする確認する必要があり、それを Windows 環境を使用したシンプルな構成で簡易に実行したかったため、Zaiba2 (ざいばつ) というツールを作成しました。

現時点のモジュールは Github で公開していますので、セットアップの際には、このリポジトリのファイルをダウンロードしておいてください。

Zaiba2 は、SQL Server 2008 以降 / SQL Database に対応しており、次のようなダッシュボードにより、各種メトリクスを可視化することが可能となります。

ブラウザについては Edge ではなく、Chrome を使った方が良いかと。
(Edge だと、期間を変更した場合のリロードが遅い気がするのですよね)

image

Zaiba2 は次のソフトウェアを利用しています。

構成としては次のようになります。

image

InfluxData のTICK Stack をベースに構築しており、メトリクスを取得する部分については、現時点では Telegraf ではなく、PowerShell を利用しています。

Zaiba2 で公開しているのは、メトリクス取得のための PowerShell と、可視化をするための Chronograf のダッシュボードの JSON ファイルとなります。

Zaiba2.ps1 により、ターゲットとなる SQL Server / SQL Database の情報を、定期的 (既定では 5 秒間隔) に、Transact-SQL (T-SQL) を実行することで取得し、それを時系列データベースの InfluxDB に格納して、Chronograf を使用して可視化しています。
T-SQL ベースでメトリクスの取得を実装していますので、SQL Server ベースの環境であれば、基本的には情報の取得はできるかと。
(SQL Server on Linux でも問題なくターゲットとして、指定できるはずです)

TICK Stack については Windows でも動作させることができますが、現状は実験的なリリースとなっており、サービスでの開始を標準ではサポートしていないものもありますので、本番環境で使用したい場合は Linux 環境を使用してください。

 

最終的には Telegraf の Input Plugin として組み込みたいのですが、現時点ではプロトタイプであり、情報を取得するためのクエリがまだ固まり切っていないのと、環境によってはエラーになるケースがあるため、Windows 標準機能で簡単に編集ができる PowerShell をメトリクスのコレクターとして利用しています。

何かしらのスクリプト言語で、InfluxDB にデータが送れると、Telegraf での実装をする前に、どのようなデータの取り扱いができるかの確認ができるので、最初は簡単な方法で InfluxDB にデータを送ってみて、可視化を検討しても良いのではと、最近は思っています。

 

セットアップ方法

まだ、セットアップスクリプトを作っていないため、以下を手動で実行してください。

セットアップスクリプトを作成しました。

Windows 10 であれば実行できると思いますが、うまく実行できない場合には、次の手順で、手動でのセットアップを実行してください。

ファイルのダウンロードと展開

  1. https://portal.influxdata.com/downloads にアクセスします。
  2. InfluxDB の Windows 版のバイナリ をダウンロードします。
    image
  3. Chronograf の Windows 版のバイナリ をダウンロードします。
    image
  4. ダウンロードしたファイルを「C:\TickStack」に展開します。
    image
    今回は、「C:\TickStack\influxdb-1.7.1-1」「C:\TickStack\chronograf-1.7.3-1」として展開されている想定で手順を記載しています。

 

InfluxDB のセットアップ

  1. 「C:\TickStack\influxdb-1.7.1-1\influxdb.conf」をテキストエディタで開きます。
  2. 次の置換を行います。
    「/var/lib/influxdb/」→「C:\\TickStack\\influxdb-1.7.1-1\\」
  3. コマンドプロンプトで、次のコマンドを実行し、InfluxDB を起動します。
    c:\TickStack\influxdb-1.7.1-1\influxd.exe -config C:\TickStack\influxdb-1.7.1-1\influxdb.conf > nul 2>&1
    
  4. 新しいコマンドプロンプトを開き、次のコマンドを実行します。

    C:\TickStack\influxdb-1.7.1-1\influx.exe
    
  5. InfluxDB の CLI で次のクエリを実行し、DB を作成します。

    create database zaiba2
    

    image

Chronograf のセットアップ

  1. コマンドプロンプトで、次のコマンドを実行し、Chronograf を起動します。

    c:\TickStack\chronograf-1.7.3-1\chronograf.exe > nul 2>&1
    
  2. ブラウザで「locahost:8888」にアクセスします。

    (Chronograf はデフォルトでは TCP:8888 でリスニングします
  3. 「Get Started」をクリックします。
  4. 「Teregraf Database Name」に「zaiba2」を入力し、「Add Connection」をクリックします。

    image
  5. 接続が完了したら「Skip」をクリックします。
  6. 「View All Conections」をクリックします。
  7. 「Dashboards」の「Import Dashboard」をクリックします。

    image
  8. Github のリポジトリの「SQL Server Monitoring Dashboard _Zaiba2_.json」をドラッグし、「Continue」をクリックして、インポートします。

    image
  9. 「Available Sources」から「Influx 1」を選択し、「Done」をクリックします。

    image
  10. インポートが完了したら「Name」からインポートしたダッシュボードをクリックします。

    image
  11. 「Variables」をクリックして、ダッシュボードの変数を展開した状態にします。

    初期状態では、「:ServerName:」「:DatabaseName:」が「(No values)」となっていますが、これはメトリクスが連携されれば、選択が可能となります。

    image

メトリクスの収集

メトリクスの収集は 「Zaiba2.ps1」の PowerShell のスクリプトを実行することで実施します。。

SQL Server に対して、メトリクスを取得する場合、次のオプションを指定して実行してください。

.\Zaiba2.ps1 -mssql_datasource "<Server Name or IP>" -mssql_userid "<SQL Login>" -mssql_password "<Login Password>"

SQL Database に対して、メトリクスを取得する場合、次のオプションを指定して実行してください。

SQL Database の場合、DB 名の指定と、「-AzureSQLDB」というスイッチを有効にしてください。

.\Zaiba2.ps1 -mssql_datasource "<Server Name>" -mssql_userid "<SQL Login>" -mssql_password "<Login Password>" -mssql_initialcatalog "<Database Name>" -AzureSQLDB

 

ここまでの作業で、Zaiba2 を使用した環境の設定は完了です。

 

メトリクスの確認

ダッシュボードを開いていた場合、一度ブラウザで再読み込みしてみてください。

そうすると Variablesの「:ServerName:」「:DatabaseName:」が選択されている状態または、選択可能になり、メトリクスの可視化が行われた状態となります。

image

「Waiting Task」の情報については、「Variables」の「:SessionID:」「:ElapsedTime:」の設定が必要となります。

Waiting Task は実行中のタスクを表示するものになるのですが、全てを表示するとノイズの多い情報となりますので「対象とするセッション ID」と、何秒待機したものを表示するかを指定します。

(Variables の値より大きいセッション ID が取得されます。SQL Server だと 50 を指定すると、代表的なシステムセッションを除くことができます。)

設定例としては次のようになります。

image

右上の設定を変更することで、情報の表示期間や、自動更新の頻度も設定できますので、リアルタイムな情報確認と、可視化期間の調整も簡単にできます。

image

 

Windows 版の InfluxDB と Chronograf については、インストールが不要で、Zip を展開した EXE が実行できれば起動することができますので、「Local Users」グループのユーザーでも起動させることができます。

PowerShell のスクリプトも、スクリプトの実行ポリシーは許可されていなくても ISE で全選択して、F8 実行等で実行できるかと思いますので、情報の可視化を行う環境に対して、強い権限が付与されていなくても、実行することが可能です。

取得したい情報が増えた場合は、PowerShell のスクリプトを書き換えるだけで増やせますので、テキストエディタベースで、項目の調整やエラー発生時の調整が可能かと。

SQL Server についてはパフォーマンスモニター相当の情報となりますが、SQL Database については、DTU 以外の指標で、サーバーのリソースの使用状況を確認することができますので、今までこのような取得と情報の整形をされたことが無かった方には、新鮮な情報が見えるかもしれませんね。

まだ、簡単な情報の可視化のテストとして作成したレベルですので、色々とぬけがありますが、シンプルなモニタリングツールとして Zaiba2 が使えるケースもあるのではないでしょうか。

Written by masayuki.ozawa

12月 1st, 2018 at 9:34 pm

Posted in SQL Server

Tagged with ,

Leave a Reply

*