SQL Server の各種メトリクスを時系列でする確認する必要があり、それを Windows 環境を使用したシンプルな構成で簡易に実行したかったため、Zaiba2 (ざいばつ) というツールを作成しました。
現時点のモジュールは Github で公開していますので、セットアップの際には、このリポジトリのファイルをダウンロードしておいてください。
Zaiba2 は、SQL Server 2008 以降 / SQL Database に対応しており、次のようなダッシュボードにより、各種メトリクスを可視化することが可能となります。
ブラウザについては Edge ではなく、Chrome を使った方が良いかと。
(Edge だと、期間を変更した場合のリロードが遅い気がするのですよね)
Zaiba2 は次のソフトウェアを利用しています。
- InfluxDB
- Chronograf
- PowerShell
構成としては次のようになります。
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 にデータを送ってみて、可視化を検討しても良いのではと、最近は思っています。
Contents
セットアップ方法
まだ、セットアップスクリプトを作っていないため、以下を手動で実行してください。
セットアップスクリプトを作成しました。
Windows 10 であれば実行できると思いますが、うまく実行できない場合には、次の手順で、手動でのセットアップを実行してください。
ファイルのダウンロードと展開
- https://portal.influxdata.com/downloads にアクセスします。
- InfluxDB の Windows 版のバイナリ をダウンロードします。
- Chronograf の Windows 版のバイナリ をダウンロードします。
- ダウンロードしたファイルを「C:\TickStack」に展開します。
今回は、「C:\TickStack\influxdb-1.7.1-1」「C:\TickStack\chronograf-1.7.3-1」として展開されている想定で手順を記載しています。
InfluxDB のセットアップ
- 「C:\TickStack\influxdb-1.7.1-1\influxdb.conf」をテキストエディタで開きます。
- 次の置換を行います。
「/var/lib/influxdb/」→「C:\\TickStack\\influxdb-1.7.1-1\\」 - コマンドプロンプトで、次のコマンドを実行し、InfluxDB を起動します。
c:\TickStack\influxdb-1.7.1-1\influxd.exe -config C:\TickStack\influxdb-1.7.1-1\influxdb.conf > nul 2>&1
- 新しいコマンドプロンプトを開き、次のコマンドを実行します。
C:\TickStack\influxdb-1.7.1-1\influx.exe
- InfluxDB の CLI で次のクエリを実行し、DB を作成します。
create database zaiba2
Chronograf のセットアップ
- コマンドプロンプトで、次のコマンドを実行し、Chronograf を起動します。
c:\TickStack\chronograf-1.7.3-1\chronograf.exe > nul 2>&1
- ブラウザで「locahost:8888」にアクセスします。
(Chronograf はデフォルトでは TCP:8888 でリスニングします - 「Get Started」をクリックします。
- 「Teregraf Database Name」に「zaiba2」を入力し、「Add Connection」をクリックします。
- 接続が完了したら「Skip」をクリックします。
- 「View All Conections」をクリックします。
- 「Dashboards」の「Import Dashboard」をクリックします。
- Github のリポジトリの「SQL Server Monitoring Dashboard _Zaiba2_.json」をドラッグし、「Continue」をクリックして、インポートします。
- 「Available Sources」から「Influx 1」を選択し、「Done」をクリックします。
- インポートが完了したら「Name」からインポートしたダッシュボードをクリックします。
- 「Variables」をクリックして、ダッシュボードの変数を展開した状態にします。
初期状態では、「:ServerName:」「:DatabaseName:」が「(No values)」となっていますが、これはメトリクスが連携されれば、選択が可能となります。
メトリクスの収集
メトリクスの収集は 「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:」が選択されている状態または、選択可能になり、メトリクスの可視化が行われた状態となります。
「Waiting Task」の情報については、「Variables」の「:SessionID:」「:ElapsedTime:」の設定が必要となります。
Waiting Task は実行中のタスクを表示するものになるのですが、全てを表示するとノイズの多い情報となりますので「対象とするセッション ID」と、何秒待機したものを表示するかを指定します。
(Variables の値より大きいセッション ID が取得されます。SQL Server だと 50 を指定すると、代表的なシステムセッションを除くことができます。)
設定例としては次のようになります。
右上の設定を変更することで、情報の表示期間や、自動更新の頻度も設定できますので、リアルタイムな情報確認と、可視化期間の調整も簡単にできます。
Windows 版の InfluxDB と Chronograf については、インストールが不要で、Zip を展開した EXE が実行できれば起動することができますので、「Local Users」グループのユーザーでも起動させることができます。
PowerShell のスクリプトも、スクリプトの実行ポリシーは許可されていなくても ISE で全選択して、F8 実行等で実行できるかと思いますので、情報の可視化を行う環境に対して、強い権限が付与されていなくても、実行することが可能です。
取得したい情報が増えた場合は、PowerShell のスクリプトを書き換えるだけで増やせますので、テキストエディタベースで、項目の調整やエラー発生時の調整が可能かと。
SQL Server についてはパフォーマンスモニター相当の情報となりますが、SQL Database については、DTU 以外の指標で、サーバーのリソースの使用状況を確認することができますので、今までこのような取得と情報の整形をされたことが無かった方には、新鮮な情報が見えるかもしれませんね。
まだ、簡単な情報の可視化のテストとして作成したレベルですので、色々とぬけがありますが、シンプルなモニタリングツールとして Zaiba2 が使えるケースもあるのではないでしょうか。