2019年6月24日月曜日

Zabbix4.2 でネットワークディスカバリ機能を使ってみた

概要

指定の IP の範囲に Zabbix Agent がいる場合にそれを検知して何かしらのアクションを起こすことができます
今回は検知したホストを自動で Hosts に登録することをやってみました
今回は docker 上で機能を試してみました

環境

  • Zabbix サーバ
    • Ubuntu 16.04 LTS
    • docker 18.09.6
    • Zabbix Server 4.2
  • Zabbix エージェント
    • macOS 10.14.5
    • docker 18.09.2
    • Zabbix Agent 4.2

Zabbix サーバ起動

Ubuntu 16.04 上で起動します
前回の記事で紹介しているのでそちらを参考にしてください
Zabbix サーバが起動していればいいので docker でなくても OK です

Zabbix Agent 起動

  • docker run -d -e ZBX_HOSTNAME="c2" -e ZBX_SERVER_HOST="192.168.99.200,172.17.0.1" -p 10050:10050 zabbix/zabbix-agent

こちらもコンテナでなくて OK です

ディスカバリ作成

まずはディスカバリを作成します
特定のネットワーク上にエージェントが出現したら発見させるようなディスカバリにします

Configuration -> Discovery
で「Create discovery rule」or 既存のルールを選択します
下記は既存の「Local network」を変更しています

  • IP range・・・192.168.99.1
  • Update interval・・・10s
  • Checks・・・Zabbix agent "system.uname"
  • Device uniqueness criteria, Host name, Visible name・・・Zabbix agent "system.uname"

IP range は 192.168.99.1-254192.168.99.0/24 などの範囲指定フォーマットもサポートしています

Update interval は好きな値を設定してください
今回はテストなので 10s にしています
数字が小さいと負荷が上がります

Checks は zabbix_agent -s 192.168.99.1 -k system.uname の値が取得できるかどうか判断するようにします
他にも ping や特定の tcp ポートでもチェックできます

Device uniqueness criteria, Host name, Visible name はすべて `Zabbix agent "system.uname" にしていますがこれも好きなものを設定してください
例えば Host name を IP address にするとホストが登録された際に IP で登録されます

作成 or 編集後のディスカバリは以下のような感じです

アクション作成

次に作成したディスカバリが真の場合に実行するアクションを作成します

Configuration -> Actions
で右上のプルダウンの「Event source」を「Discovery」にします
「Create action」でも OK です
以下は既存の「Auto discovery. Linux servers.」を編集しています

  • Conditions・・・Discovery rule equals Local network -> Add を押す
  • Enabled・・・チェック

次に Operations タブを選択します
Operations -> New を選択します

  • Operations・・・Add host -> Add を押す

これで OK です
Update を押して作成しましょう

作成 or 編集後のアクションは以下の通りです

動作確認

しばらくするとディスカバリされホストが追加されるはずです
まずは Monitoring -> Discovery を見てみましょう
ここでホストが見つからないとアクションも実行されます

アクションも問題なく実行されれば Configuration -> Hosts にホストが登録されています
今回は system.uname を Host name に使っているので以下のように少し長いホスト名として登録されます

Zabbix Server のログ的には 177:20190621:040419.777 enabling Zabbix agent checks on host "Linux be1c04e1d4aa 4.9.125-linuxkit _1 SMP Fri Sep 7 08_20_28 UTC 2018 x86_64": host became available が出ていれば成功です

トラブルシュート

手順的にはサクっとできますが実はいろいろハマっています、、
自分がトラブルシュートした方法をいくつか紹介します

Zabbix Server のロギングレベルを上げる

docker の場合は .env_srvZBX_DEBUGLEVEL=3 を 4 にすれば OK です
これで再度 zabbix-server コンテナを down -> up すれば OK です

IP range を短くする

ディスカバリのルールはあっているのに中々 Monitoring -> Discovery に登場しない場合はこれを試してみてください
確証はないですが Zabbix Server は当然していの範囲を精査します
アクションや発見したホストの登録を実行するタイミングがもしかすると精査後になっているので unreachable な IP が多いほどアクションが実行されるタイミングが遅くなっているのかもしれません
(ソースまで終えていないので自信なし)

最後に

Zabbix4.2 でディスカバリの機能を試してみました
機能自体は昔からあるので今更感がありますが UI はだいぶ変わっているのでその辺りは参考になるかなと思います

サーバもエージェントもコンテナなのでバイナリを直接ホストで動かしてる場合は少し設定値は変わるかなと思いますが流れは基本的に同じかなと思います

参考サイト

0 件のコメント:

コメントを投稿