Zabbixのローレベルディスカバリーについて説明します。ローレベルディスカバリーはファイルシステムやネットワークインターフェースなど機器によって異なる仕様について、機器の仕様を情報取得し、動的に設定を作成する機能です。例えば、ローレベルディスカバリーを使用する事によって、24ポートのネットワーク機器と48ポートのネットワーク機器で異なる設定を作成する必要がなくなり、機器間の微妙な構成差異について動的な設定を行う事ができます。
テンプレートのアレンジ
Zabbixのデフォルトでインストールされるテンプレートには、有用なローレベルディスカバリーの設定が施されています。以下、テンプレートに若干の設定の追加で監視可能になる例を紹介します。
ファイルシステムの監視
時点準備
検証シナリオの都合上、監視される側の機器にbind-chrootをインストールします。bind-chrootをインストールする事によって、やや厄介なシナリオが発生しますが、これの回避方法を体験するためです。
dnf install bind bind-chroot systemctl enable named-chroot --now
監視対象となる機器に対して、テンプレート「Template OS Linux by Zabbix agent」を適用します。
ローレベルディスカバリーの手動実行
デフォルト設定では、1時間に1回の頻度でローレベルディスカバリーが実行され、監視対象となる機器の設定を読み取りに行きます。1時間も待つのは作業効率が悪いかと思いますので、手動によるローレベルディスカバリーもサポートされています。
ホストの設定画面において、「ディスカバリールール」のタブを開きます。ルールにチェックを入れ、「監視データの取得」を押下すると手動によるローレベルディスカバリーが実行されます。
デフォルト設定の把握
仕様把握のため、もう少しデフォルト設定を追跡してみましょう。前述の画面にて「Mounted filesystem discovery」を押下します。
ディスカバリールールの設定画面を見ると、キー「vfs.fs.discovery」が設定されている事がわかります。
キー「vfs.fs.discovery」で取得できる値はコマンドラインでも確認できます。以下に表示されている{#FSNAME}、{#FSTYPE}の値を使って動的な設定が可能です。
dnf install zabbix-get jq
[root@zabbix081 ~]# zabbix_get -s 192.168.1.13 -k vfs.fs.discovery | jq "." [ { "{#FSNAME}": "/sys", "{#FSTYPE}": "sysfs" }, { "{#FSNAME}": "/proc", "{#FSTYPE}": "proc" }, { "{#FSNAME}": "/dev", "{#FSTYPE}": "devtmpfs" }, <omitted>
ローレベルディスカバリーの画面で、「アイテムのプロトライプ」の画面を開きます。すると、「vfs.fs.inode[{#FSNAME},pfree]」などのキーが設定されている事が分かります。{#FSNAME}はvfs.fs.discoveryによって取得した値が格納されます。具体的には「/」「/boot」などの値が格納され、「vfs.fs.inode[/,pfree]」「vfs.fs.inode[/boot,pfree]」などが監視されます。
取得データの確認
「監視データ」「最新データ」の画面を開きます。「/」「/boot」などのファイルシステムが監視されている事が読み取れます。
「監視データ」「グラフ」の画面を開きます。「/」「/boot」だけでなく、「/var/named/chroot/etc/crypto-policies/back-ends/bind.config」などの不要項目も表示されている事が分かります。
不要監視項目のフィルタ
「/var/named/chroot/etc/crypto-policies/back-ends/bind.config」などの不要項目を削除するフィルタする方法を説明します。
「Mounted filesystem discovery」の「フィルター」タブを開きます。この画面を見ると、取得対象を絞り込む「{$VFS.FS.FSNAME.MATCHES}」「{$VFS.FS.FSTYPE.MATCHES}」や取得対象を除外する「{$VFS.FS.FSNAME.NOT_MATCHES}」「{$VFS.FS.FSTYPE.NOT_MATCHES}」などのマクロが定義されている事が分かります。
対象ホストの「マクロ」「継承したマクロとホストマクロ」のタブを開きます。この画面を見ると、現在設定されているマクロの値を確認する事ができます。デフォルト設定を意図せず消去してしまい、思わぬ監視結果にならないよう、設定前に確認する事をオススメします。
対象ホストの「マクロ」「ホストマクロ」のタブを開きます。「{$VFS.FS.FSNAME.NOT_MATCHES}」に以下の値を設定し、「更新」ボタンを押下します。
^(.*named.*|/dev|/sys|/run|/proc|.+/shm$)
データのリセット
一度作成されてしまった不要なグラフを削除するために、「Template OS Linux by Zabbix agent」の「リンクを削除リンクと保存データを削除」を押下します。
その後、「Template OS Linux by Zabbix agent」を再適用し、ローレベルディスカバリを再手動実行します。
フィルタ後の取得データの確認
データ一覧画面で「ヒストリがないアイテムを表示」「詳細を表示」にチェックを入れ、「適用」を押下します。
「/var/named/chroot/etc/crypto-policies/back-ends/bind.config」などの不要項目が表示されていない事を確認します。
グラフの画面にて、「/var/named/chroot/etc/crypto-policies/back-ends/bind.config」などの不要項目が表示されていない事を確認します。
ネットワーク機器 インターフェースの監視
監視設定
ホストの追加画面で、インターフェースは「snmp」を選びます。
必要事項を記入し「追加」を押下します。
ホスト単位または全体に対してSNMPコミュニティを定義するマクロを定義します。以下スクリーンショットは、ホストに対して設定する例です。
テンプレート「Templates/Modules/Template Module Interfaces SNMP」を適用します。
ホスト設定画面の「ディスカバリー」タブへ遷移し、対象にチェックを入れ、「監視データの取得」を押下します。この操作によって、ローレベルディスカバリーが手動で即時実行されます。
グラフの画面へ遷移し、グラフが描画されている事を確認します。また、「Loopback0」などの不要データも取得されてしまった事を確認します。
不要監視項目のフィルタ
「Loopback」などの不要項目を削除するフィルタする方法を説明します。
「Network interfaces discovery」の「フィルター」タブを開きます。descriptionやインターフェース名などでフィルタが可能である事が分かります。
対象ホストの「マクロ」「ホストマクロ」のタブを開きます。「{$NET.IF.IFNAME.MATCHES}」に以下の値を設定し、「更新」ボタンを押下します。
^Ethernet.*
一度作成されてしまった不要なグラフを削除するために、「Template Module Interfaces SNMP」の「リンクを削除リンクと保存データを削除」を押下します。
その後、テンプレートの再適用とローレベルディスカバリの手動実行をし、グラフ描画を確認します。Loopbackなどの不要監視項目が表示されなくなった事を確認します。
テンプレートの自作
マニュアル
ローレベルディスカバリーの使い方はマニュアルの「15. Discovery」「3 LOW-LEVEL DISCOVERY」を参照ください。
CPU個別監視
テンプレートの作成
テンプレートを新規作成します。
テンプレートの「ディスカバリー」タブの画面にて、「ディスカバリールールの作成」を押下します。
ディスカバリールール作成の画面にて、キーに「system.cpu.discovery」を設定します。監視感覚は「1m」から長めの「1h」くらいに変更しておくのが無難かと思われます。設定項目入力完了後、「追加」を押下します。
zabbix_getなどのコマンドを見て、キー「system.cpu.discovery」で取得できる値を確認します。{#CPU.NUMBER}等の変数を使用して定義可能である事が分かります。
[root@zabbix081 ~]# zabbix_get -s 192.168.1.13 -k system.cpu.discovery | jq [ { "{#CPU.NUMBER}": 0, "{#CPU.STATUS}": "online" }, { "{#CPU.NUMBER}": 1, "{#CPU.STATUS}": "online" }, { "{#CPU.NUMBER}": 2, "{#CPU.STATUS}": "online" }, { "{#CPU.NUMBER}": 3, "{#CPU.STATUS}": "online" } ]
先ほど追加したディスカバリールールを押下します。
「アイテムのプロトタイプ」を押下します。
「アイテムのプロトタイプの作成」を押下します。
名前は「{#CPU.NUMBER}」を含む名前にした方がCPU番号が分かりやすくなるのでオススメです。キーは「system.cpu.util[{#CPU.NUMBER},idle, avg1]」のようにCPU番号を変数で指定し、データ型は「数値(不動小数)」に変更します。
設定項目の入力完了後、「追加」を押下します。
テンプレートの適用
先ほど作成したテンプレートを対象のホストに適用します。
ディスカバリーの画面にて、ローレベルディスカバリーを手動実行します。
動作確認
ローレベルディスカバリーに対応したテンプレートの適用によって、CPU数が動的に変化する監視ができている事を確認します。