2024 年 11 月 18 日
Zabbix で ODBC 経由で MS SQL Server を監視する
1. Zabbix / MIRACLE ZBX のデータベース監視用プリインストールテンプレートの整理
Zabbix / MIRACLE ZBX は、データベースを監視するさまざまな方法を提供しています。
表 1 に、Zabbix / MIRACLE ZBX のバージョン 7.0 における、DBaaS 以外のデータベースおよび監視用テンプレートとの関係を簡単にまとめました。テンプレートの命名規則と監視方法の関係は表 2 のようになります。
表 1: データベースと使用可能テンプレート名
データベース | 使用可能テンプレート名 |
---|---|
MariaDB, MySQL | MySQL by ODBC |
MySQL by Zabbix agent | |
MySQL by Zabbix agent 2 | |
PostgreSQL | PostgreSQL by ODBC |
PostgreSQL by Zabbix agent | |
PostgreSQL by Zabbix agent 2 | |
Oracle Database | Oracle by ODBC |
Oracle by Zabbix agent 2 | |
Microsoft SQL Server | MSSQL by ODBC |
MSSQL by Zabbix agent 2 |
表 2: テンプレート名と監視方法
テンプレート名 | 監視方法 | |
---|---|---|
~ by ODBC | Zabbix サーバーからデータベースに ODBC 経由で接続 クエリを実行することでデータを取得 |
|
~ by Zabbix agent2 | Zabbix agent2 のプラグインを経由してネイティブ接続 クエリを実行することでデータを取得 |
|
~ by Zabbix agent | MySQL | 監視対象 DB が稼働するサーバー上で、ユーザーパラメータ経由でコマンド実行 コマンドまたはクエリを実行することでデータを取得 |
PostgreSQL | 監視対象 DB が稼働するサーバー上で、ユーザーパラメータ経由でスクリプト実行 コマンドまたはクエリを実行することでデータを取得 |
2. Zabbix / MIRACLE ZBX による Microsoft SQL Server の監視構造
以下、Microsoft SQL Server ( 以下、MS SQL Server と記載 ) を監視するための各テンプレートと、その構造を説明します。
2.1. MSSQL by Zabbix agent 2
Zabbix agent 2 と MS SQL Server 用プラグイン zabbix-agent2-plugin-mssql を組み合わせて監視を行う場合に使用するテンプレートです。MS SQL Server 用プラグインは Linux 版のみ提供されており、Windows 上の Zabbix agent 2 を使用することはできません。よって、図 1 の構造を取ることになります。
図 1: テンプレート「MSSQL by Zabbix agent 2」使用時の構造
Zabbix サーバー上のエージェントとして Zabbix agent 2 を採用する場合、図 1 の「Zabbix サーバー」と「Linux ホスト」を Zabbix サーバーに統合することが可能です。
なお、Zabbix agent と Zabbix agent 2 を同一ホスト上にインストールすることは可能ですが、初期設定では同一ポートを使用する設定となっているため、双方を同時に起動することはできません。
2.2. MSSQL by ODBC
Zabbix サーバーから Windows Server 上の MS SQL Server に ODBC 接続を行って監視を行う場合に使用するテンプレートです。この場合は図 2 のように、Zabbix サーバー上の unixODBC および FreeTDS を経由して MS SQL Server に ODBC 接続を行い、データを収集する構造を取ります。
図 2: テンプレート「MSSQL by ODBC」使用時の構造
unixODBC は zabbix-server-(mysql|pgsql) または miracle-zbx-server-(mysql|pgsql) パッケージが依存関係をもっているため、予め Zabbix サーバーにはインストール済みの状態となっています。一方、FreeTDS は多くの場合追加インストールが必要です。
本稿では、このテンプレート「MSSQL by ODBC」を使用した監視を行う場合の構築手順を記載します。
3. MSSQL by ODBC を使用した場合の構築手順
3.1. Microsoft SQL Server の設定
3.1.1. TCP/IP 通信を有効化
SQL Server 2019 インストール後の初期状態では TCP/IP による通信が無効化されているようです。このままでは ODBC による DB 接続を行えないため、設定を変更する必要があります。
「SQL Server 2019 構成マネージャー」を起動して操作します。「SQL Server ネットワークの構成」ツリーを展開し、「MSSQLSERVER のプロトコル」を選択します。プロトコル名「TCP/IP」の状態が「無効」となっていた場合は、TCP/IP 行を右クリックして表示されるメニュー上の「有効にする (E)」をクリックします。
図 3: SQL Server 2019 構成マネージャー、プロトコル設定画面
警告メッセージが表示されますが、後の操作で再起動を行うため現時点ではボタン「OK」をクリックして操作を継続します。
図 4: SQL Server 2019 構成マネージャー、警告メッセージ
3.1.2. SQL Server 認証を有効化
SQL Server Management Studio (SSMS) を起動し、Windows ユーザー Administrator でログインします。
図 5: SSMS、起動画面
「オブジェクト エクスプローラー」のサーバーを右クリックし、メニュー最下段「プロパティ (R)」を選択します。
図 6: SSMS、サーバーメニュー表示
ウィンドウ「サーバーのプロパティ」の画面左側のリスト内「セキュリティ」をクリックします。サーバー認証のラジオボタンのフォーカスを、初期値「Windows 認証モード (W)」から「SQL Server 認証モードと Windows 認証モード (S)」に変更し、ボタン「OK」をクリックします。
図 7: SSMS、サーバーのプロパティ、セキュリティ画面
3.1.3. MS SQL Server を再起動
SQL Server 2019 構成マネージャーを起動し、画面左側のツリー「SQL Server のサービス」を選択します。画面右側に表示される「SQL Server (MSSQLSERVER)」を右クリックし、メニューから「再起動」を選択します。
図 8: SQL Server 2019 構成マネージャー、サービス画面
3.1.4. 監視用 MS SQL Server ユーザーを作成
SSMS を起動し、サーバー名 / セキュリティ / ログインを展開します。「ログイン」を右クリックして表示されるメニューにて「新しいログイン (N)...」を選択します。
図 9: SSMS、ログインメニュー表示
ウィンドウ「ログイン - 新規作成」が表示されます。以下の設定を行います。
- 「ログイン名 (N)」を入力 ( 実行例では zbx_monitor)
- ラジオボタンで「SQL Server 認証 (S)」を選択
- 「パスワード (P)」「パスワードの確認入力 (C)」を入力
- 必要に応じて「パスワードの期限を適用する (X)」のチェックを外す
【留意事項】
Zabbix / MIRACLE ZBX バージョン 7.0.0~7.0.2 では、パスワードに指定できる文字に制限があります。記号を使用する場合は 7.0.3 以降を選択してください。
図 10: SSMS、ログイン新規作成画面
画面左側「ページの選択」にて「ユーザー マッピング」をクリックします。画面右側「このログインにマップされたユーザー (D)」にて、データベース「msdb」行にチェックを入れます。
図 11: SSMS、ログイン新規作成、ユーザーマッピング画面
以上の操作を行った後、ボタン「OK」をクリックします。画面が SSMS に戻り、「ログイン」配下に作成したユーザー「zbx_monitor」が追加されます。
図 12: SSMS、ログイン追加済画面
3.1.5. 監視用 MS SQL Server ユーザーに対する権限付与
Windows PowerShell を起動し、sqlcmd ユーティリティを起動します。
PS C:\Users\Administrator> sqlcmd -E -d msdb
プロンプトに対して次の SQL 文を入力し、最後に GO コマンドを実行します。
GRANT SELECT ON object::msdb.dbo.sysjobs TO zbx_monitor; GRANT SELECT ON object::msdb.dbo.sysjobservers TO zbx_monitor; GRANT SELECT ON object::msdb.dbo.sysjobactivity TO zbx_monitor; GRANT EXECUTE ON object::msdb.dbo.agent_datetime TO zbx_monitor; GO
次に接続先データベースを master に変更し、更に権限を付与します。
USE master GRANT VIEW SERVER STATE TO zbx_monitor; GO
図 13: sqlcmd ユーティリティー実行画面
3.2. Zabbix / MIRACLE ZBX サーバーの設定
3.2.1. ソフトウェアの追加インストール
MS SQL Server に接続するためには FreeTDS の追加インストールが必要となります。FreeTDS は主要 Linux ディストリビューションのリポジトリでは提供されていないため、まず Extra Packages for Enterprise Linux (EPEL) を有効化します。
# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm # dnf config-manager --enable epel
次に、FreeTDS を追加インストールします。
# dnf install freetds-libs
3.2.2. 設定ファイル編集
ファイル /etc/odbc.ini に以下を追記します。なお、セクション ( 設定例では remote-mssql ) は Zabbix WebFrontend でマクロ {$MSSQL.DSN} に指定する文字列となります。
[remote-mssql] Driver = FreeTDS Description = Free Sybase & MS SQL Driver SERVER = SQL サーバー稼働中ホストの IP アドレス Database = msdb PORT = 1433 Encryption = require
3.3. Zabbix / MIRACLE ZBX の監視設定
3.3.1. ホスト登録
ブラウザを使用して Zabbix WebFrontend へ接続し、ホストを登録します。Zabbix WebFrontend メニュー [ データ収集 / ホスト ] を選択し、画面右上のボタン「ホストの作成」をクリックします。
図 14: Zabbix WebFrontend、データ収集 / ホスト
モーダルウィンドウ「新しいホストの作成」の各項目に表 3 の情報を入力します。
テンプレート MSSQL by ODBC では、ホストのインターフェースに指定する IP アドレスまたは DNS 名は使用されませんので、初期の未設定状態でも動作させることは可能です。しかし、一般にはホストのリソース情報も監視対象とする場合が多く、また閲覧性向上の観点からも監視対象 MS SQL Server 稼働中の Windows Server の IP アドレスを入力することを推奨します。
なお、設定例では最小設定での動作検証を行う目的で、インターフェースは未設定としています。
表 3: ホスト定義
マクロ | 値 |
---|---|
ホスト名 | 任意のホスト名 ( 設定例 : odbc-mssqlsv) |
表示名 | ( 必要に応じて追加設定 ) |
テンプレート | MSSQL by ODBC |
ホストグループ | 任意のグループ ( 設定例 : Windows servers) |
インターフェース | 監視対象 MS SQL Server 稼働中の Windows Server の IP アドレスを推奨 |
図 15: Zabbix WebFrontend、ホスト作成
モーダルウィンドウ「新しいホストの作成」のタブ「マクロ」を表示し、テンプレート MSSQL by ODBC を使用する上で必要となるマクロを定義します。
表 4: ホストマクロ定義
マクロ | 値 |
---|---|
{$MSSQL.DSN} | 3.2.2 で記述したセクション名 ( 設定例 : remote-mssql) |
{$MSSQL.HOST} | SQL サーバー稼働中ホストの IP アドレス |
{$MSSQL.PASSWORD} | 3.1.4 で作成した MS SQL Server ユーザーのパスワード |
{$MSSQL.USER} | 3.1.4 で作成した MS SQL Server ユーザー ( 設定例 : zbx_monitor) |
図 16: Zabbix WebFrontend、ホスト作成、マクロ定義
入力完了後、モーダルウィンドウ「新しいホストの作成」右下のボタン「追加」をクリックします。
以上で監視設定は完了です。
4. 監視結果
設定完了後しばらく待つか、タイプが「データベースモニタ」のアイテムを指定して「監視データの取得」を明示的に実行すると、Zabbix WebFrontend メニュー [ 監視データ / 最新データ ] に収集した値を表示できるようになります。
図 17: Zabbix WebFrontend、最新データ
収集した値をデータベースのチューニングや正常運用の確認にお役立てください。
参考情報 : ODBC 経由での監視における注意事項
現在の Zabbix ( 少なくともバージョン 7.0.4 まで ) の実装では、ODBC での接続およびクエリの発行に成功した後に、クエリ結果が返らない場合には永遠に待ち続ける動作となってしまいます。
この場合、監視を復旧させるためには監視用 MS SQL Server ユーザーのプロセスを終了させる等の対処を行う必要があります。