はじめに
ネットワーク機器のコンフィグ管理ツールOxidizedを使っていますが、管理対象となる機器の情報は予め用意される、CSV・HTTP・SQLの何れかで定義しておく必要があります。
機器の情報を多重管理するのに嫌気が差してきたので、機器の情報をZabbixに登録して、OxidizedからZabbixに機器の情報を問い合わせることができれば幸せになれそうなのでやってみました。
環境
- Zabbix 6.2.3 on Docker
- Oxidized v0.28.0 on Docker
やること
- ZabbixのマクロにOxidizedが必要な情報(model、username、password、enableとか)を登録する。
- OxidizedからZabbixのAPIをぶっ叩いて情報を取得
やったこと
Zabbixのマクロを定義するテンプレートを作成
マクロ定義してるだけですが、こいつをZabbixにインポートしてください。
Oxidized Templateがインポートされるはずです。
対象になるホストにテンプレートを適用
インポートしたOxidized Templateを対象ホストに適用します。
対象になるホストにマクロを設定
Oxidizedで必要になる値をZabbixのマクロで設定します。
マクロ | 設定する値 | 設定例 |
---|---|---|
{$OXIDIZED_MODEL} | OxidizedのModel | ios |
{$OXIDIZED_USERNAME} | 機器へのログインID | admin |
{$OXIDIZED_PASSWORD} | 機器へのログインパスワード | cisco |
{$OXIDIZED_ENABLE} | 特権ユーザのパスワード | c1sc0 |
OxidizedにZabbix連携モジュール(zabbix.rb)を配置
Oxidized用のZabbix連携モジュールzabbix.rbはOxidizedのSourceとして実装してみました。初めてRuby書いた💦
こいつを、Oxidizedのconfig等が置かれている~/.config/oxidized/sources
に配置します。
# mkdir ~/.config/oxidized/sources
# cd ~/.config/oxidized/sources
# wget
https://raw.githubusercontent.com/bluekirin55/oxidized/zabbix_support/lib/oxidized/source/zabbix.rb
Oxidizedの設定
Oxidizedの~/.config/oxidized/config
にZabbix連携モジュールの設定をします。
以下の内容をコピペして、最低限、url、user、passwordを環境に合わせて変更すればOKです。
source:
default: zabbix
zabbix:
url: "http://localhost/api_jsonrpc.php"
user: "Admin"
password: "zabbix"
token: "HOGEHOGEHOGEHOGEHOEGEHOGEHOEHEOGHOEOHEOHGOEHGOHO"
template: "Template Oxidized"
map:
username: "{$OXIDIZED_USERNAME}"
password: "{$OXIDIZED_PASSWORD}"
model: "{$OXIDIZED_MODEL}"
vars_map:
enable: "{$OXIDIZED_ENABLE}"
項目 | 設定する値 | 設定例 |
---|---|---|
url | ZabbixのJSON RPCのURL | http://localhost/api_jsonrpc.php |
user | Zabbixにログインする際のユーザID(tokenを指定する場合は不要) | Admin |
password | Zabbixにログインする際のパスワード(tokenを指定する場合は不要) | zabbix |
token | Zabbixで発行したAPIトークン(user/passwordを指定する場合は不要) | HOGEHOGEEOHOGHEOHOGEGE |
template | Oxidizedでの管理対象の機器を識別するためのZabbixテンプレート名 | Oxidized Template |
map.model | OxidizedのModelが定義されたマクロ | {$OXIDIZED_MODEL} |
map.username | 機器へのログインIDが定義されたマクロ | {$OXIDIZED_USERNAME} |
map.password | 機器へのログインパスワードが定義されたマクロ | {$OXIDIZED_PASSWORD} |
vars_map.enable | 特権ユーザのパスワードが定義されたマクロ | {$OXIDIZED_ENABLE} |
ちなみ、ホスト名やIPアドレスはZabbixのホストやホストインタフェース情報から取ってきますので、特にmapする必要はありません。
その他
特にありません。コレで設定完了です。
実行
Oxidizedを再起動すると、うまくZabbixと連携できているんじゃないでしょうか。
最後に
思いつきで始めて見たものの、初めてのZabbix APIやRubyと格闘しながらなんとか形になりました。
Oxidizedはよくできていて、ネットワーク機器の構成管理ツールとして充分使えるレベルになっています。またRubyで簡単に拡張できるのもいいですね。