3. 公式テンプレートへのLLDフィルタ条件の追加
LLDは複数のデータを自動で展開してくれる便利な機能です。ただ、OSや取得するデータのタイプによっては、余分なものが大量にヒットしてしまい、ノイズだらけのデータになってしまうこともあります。
その典型的な例が、WindowsのNIC(Network Interface Card)かもしれません。
公式テンプレートを使って大量のNICが引っかかった場合、実際に監視したいデータだけをフィルタする方法の紹介です。
公式テンプレートで展開されるデータ
Windowsの公式テンプレート(Template OS Windows)を使うと、以下のように大量のNICが検出されます。
実際には、このPCには1枚しか物理NICは搭載されていないので、ちょっと多すぎです。
公式テンプレートのフィルタリング定義
ディスカバリのフィルタリング条件は、ディスカバリルールの正規表現 で定義されています。
@Network interfaces for discovery は、Zabbix内で共通で使用可能な正規表現の設定名です。
この設定内容の確認は、メニューから、管理→一般設定を選択し、右側のプルダウンメニューから正規表現を選択します。
Windowsテンプレートで指定されている @Network interfaces for discoveryは、以下のように定義されています。
パッと見たところ、Windowsで表示される余計なものを除外するような設定ではなさそうです。
ディスカバリで取得しているデータ
次に、ネットワークのディスカバリでどんなデータを取得しているか確認します。
ディスカバリのデータは、ZabbixのWebインターフェースでは直接結果を確認できないので(監視アイテムとして別途取り込めば可能ですが)、LinuxのコマンドラインからZabbix_getコマンドを使って確認するのが手っ取り早いのでおススメです。ディスカバリの結果はJSONフォーマットで返ってきます。Zabbixアプライアンスを使っている方は、まず最初にJSON解析用コマンドが使えるよう、jqパッケージをインストールしてください。
$ sudo apt-get install jq
zabbix_getでネットワークディスディスカバリの結果を取得し、jqでJSONデータの整形を行います。
$ zabbix_get -s 監視対象ホストのIPアドレス -k net.if.discovery | jq
結果は以下の通りです。
実際に先ほどの正規表現で除外されているのは、赤枠で囲まれたLoopBackの設定1つのみでした。
ホストへの個別フィルタリング条件の追加
このPCで実際に監視したいのは、物理的なインターフェース1つのみです(無線LANもないちょっと古いデストップPCなので)。
公式テンプレートそのものや、正規表現 @Network interfaces for discovery を変更すると、今後これらの設定が更新された場合に上書きしづらくなってしまいます。
今回のように、監視ホスト毎の個別条件としての要因が強い場合は、ホストの設定で、個別のフィルタリング条件を追加したほうがよいです。
設定→ホスト→対象ホストのディスカバリールール→Network interface discoveryを選択します。
更新結果をすばやく確認したいので、更新間隔を一時的に1分に設定します。また、余計に検出されたデータをまとめて一括削除するため、存在しなくなったリソースの保持期間を 0にします。
入力後、フィルタ タブを選択します。
表示された画面でフィルタの追加ボタンを押し、新たなフィルタ条件を入力します。
※今回は指定した名称の末尾に別の派生名称で仮想NICが検出されるため、厳密に先頭をあらわす^と末尾をあらわす$を付けています。
計算のタイプをandに変更し、更新ボタンを押します。
これで、監視したいNICだけに絞ることが可能です。