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 |