ZabbixODBC接続がなぜかうまくいかず、UserParamataer調査含めとても苦労したので、同じように苦労されている方の助けになれば幸いです。
ZabbixODBCが解決したので、それは別記事にしました。
環境
-
Zabbix Server
-
OS:CentOS
-
Zabbix:3.2
-
Zabbix-Agent:3.2
-
-
-
OS:WindowsServer2012
-
DB:SQLServer2012
-
設定
ZabbixAgentのUserParameterに以下の値を設定している。
UserParameter=MSSQL.LogSpace[*],"C:Program Files (x86)Microsoft SQL ServerClient SDKODBCXToolsBinnSQLCMD.EXE" -S 【サーバー名】 -U 【ユーザ名】 -P 【パスワード】 -h -1 -W -Q "set nocount on CREATE TABLE #log (DbName varchar(256),Size float,Used float,Status int) INSERT INTO #log EXEC ('DBCC SQLPERF(LOGSPACE)WITH NO_INFOMSGS') SELECT log.Used FROM #log log where log.DbName = '$1' DROP TABLE #log"
-
書式:
-
UserParameter=<key(Zabbixでキーにする値)[引数]>,<command(ZabbixAgentが実行するコマンド>
-
<key[*]>=
MSSQL.LogSpace[*]
<command>=
"C:Program Files (x86)Microsoft SQL ServerClient SDKODBCXToolsBinnSQLCMD.EXE" -S 【サーバー名】 -U 【ユーザ名】 -P 【パスワード】 -h -1 -W -Q "set nocount on CREATE TABLE #log (DbName varchar(256),Size float,Used float,Status int) INSERT INTO #log EXEC ('DBCC SQLPERF(LOGSPACE)WITH NO_INFOMSGS') SELECT log.Used FROM #log log where log.DbName = '$1' DROP TABLE #log"
※今回のコマンドはSQLCMDを使用するため、SQLCMD.EXEの場所をフルパスで指定してある。
※ZabbixAgentの環境変数として登録してあればフルパスは不要かもしれない。
SQLCMDの引数
-
-S : サーバー名
-
-U : ログインユーザ名
-
-P : ログインパスワード
-
-h : -1 でヘッダー非表示
-
-W : 出力結果の余白削除
-
-Q : 実行するクエリを記載
実行するSQLの説明
-
SET NOCOUNT ON
-
出力結果に(1件処理しました。)というような情報を非表示してくれる。
*Zabbixにて取得する際にこれを入れないと数値として受け取れない。
-
-
CREATE TABLE #log (DbName varchar(256),Size float,Used float,Status int)
-
DBCCの結果が素直にSelectすることができないため、一時テーブルを作成し、そこへ格納する必要がある。
-
-
INSERT INTO #log EXEC ('DBCC SQLPERF(LOGSPACE)WITH NO_INFOMSGS')
-
作成した一時テーブルにDBCCの結果を格納している。
-
DBCC SQLPERF(LOGSPACE)
-
LOGSPACEの値を取得するSQL
-
-
WITH NO_INFOMSGS:
-
出力結果にDBCCのメッセージを出力しないようにするオプション → これがないとZabbixに余計な文字列が入ってしまう。
-
-
-
-
SELECT log.Used FROM #log log where log.DbName = '$1'
-
ここでやっと対象のLOGSPASEの値をSELECT可能。 → $1:引数をこれで利用できる。
-
-
DROP TABLE #log
-
一時テーブルなのでドロップは不要なのかもしれないが、念のためドロップしている。
-
ちなみに、Logspace使用率の監視であれば、こちらのテンプレートを適用していただくと、割と簡単アイテムの取得が可能です。