ZabbixによるAlways On 監視
ODBCを用いた監視設定
1. SQLServerの情報をZabbixサーバのODBC.iniへ登録
2. 監視用アイテムの登録
名前:任意
タイプ:データベースモニタ
キー
db.odbc.select[任意の名前,ServerName]
ユーザ名:SQLServerへのログインユーザID
パスワード:上記ユーザのパスワード
SQLクエリ:
SELECT COUNT (*) as NotHealtyCount
FROM [master].[sys].[dm_hadr_database_replica_states]
WHERE [synchronization_health_desc] != N'HEALTHY'
Union
SELECT Count(*) as NotHealtyCount
FROM sys.database_mirroring
WHERE mirroring_role_desc IN ('PRINCIPAL','MIRROR')
AND mirroring_state_desc NOT IN ('SYNCHRONIZED','SYNCHRONIZING'
データ型:数値(整数)
その他設定:必要に応じて変更してください。
3.トリガーの設定
設定したSQLを実行すると、通常時は「0」異常時はそれ以外が出力されます。
そのため、「0」以外だった場合に障害となるように設定してやります。
名前:任意
深刻度:任意
条件式:
{2.作成キー.last()}>0
その他は適宜設定してください。
4. アクション設定
設定したトリガーでメール等送りたい場合には、適宜アクションを設定してください。
UserParametarによる監視設定
Zabbix_agentがSQLCMDを実行可能であれば、こちらも可能です。
参考:Always On 状態確認
参考:下記SQLを実行すると、Always Onの現在の状態が確認できる。
SELECT ar.replica_server_name,
DB_NAME(dbr.database_id) AS [DBName] ,
dbr.database_state_desc,
dbr.synchronization_state_desc,
dbr.synchronization_health_desc,
ISNULL(CASE dbr.redo_rate
WHEN 0 THEN -1
ELSE CAST(dbr.redo_queue_size AS FLOAT) / dbr.redo_rate
END, -1) AS [LogRedoDelaySeconds] ,
ISNULL(CASE dbr.log_send_rate
WHEN 0 THEN -1
ELSE CAST(dbr.log_send_queue_size AS FLOAT)
/ dbr.log_send_rate
END, -1) AS [LogSendDelaySeconds] ,
dbr.redo_queue_size ,
dbr.redo_rate ,
dbr.log_send_queue_size ,
dbr.log_send_rate
FROM [master].sys.availability_replicas AS AR
INNER JOIN [master].sys.dm_hadr_database_replica_states AS dbr
ON ar.replica_id = dbr.replica_id
--WHERE dbr.redo_queue_size IS NOT NULL
上記SQLを実行すると以下のような結果が出力されます。
| replica_server_name | DBName | database_state_desc | synchronization_state_desc | synchronization_health_desc | LogRedoDelaySeconds | LogSendDelaySeconds | redo_queue_size | redo_rate | log_send_queue_size | log_send_rate |
|---|---|---|---|---|---|---|---|---|---|---|
| server_name | DBName1 | NULL | SYNCHRONIZED | HEALTHY | 0 | 0 | 0 | 3706 | 0 | 144000 |
| server_name | DBName1 | ONLINE | SYNCHRONIZED | HEALTHY | -1 | -1 | NULL | NULL | NULL | NULL |
| server_name | DBName2 | NULL | SYNCHRONIZED | HEALTHY | 0 | 0 | 0 | 12056 | 0 | 46666 |
| server_name | DBName2 | ONLINE | SYNCHRONIZED | HEALTHY | -1 | -1 | NULL | NULL | NULL | NULL |