doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

ZabbixによるSQLServerのAlways On 監視

スポンサーリンク

ZabbixによるAlways On 監視

ODBCを用いた監視設定

1. SQLServerの情報をZabbixサーバのODBC.iniへ登録

www.doodle-office.work

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