CSVファイルを読み込んでZabbixにホスト登録
1. はじめに
GUI画面で1サーバずつ登録していたのですが、非常に面倒なので、ZabbixAPIとpyzabbixを使用して、一括で登録してみました。Githubにリポジトリ作成していますが、もう少し詳細にして、日本語で記載してみました。
登録するのは、ZabbixAgentでの監視を前提として、ホストグループと登録するテンプレートは固定としています。
2. 使用する環境
以下を使用します。
- Zabbix 6.0
- python 3.11
- pyzabbix
- pandas
3. 環境準備
Zabbixは以下のURLを参照して構築してください。
構築が完了したら、以下のコマンドを実行して、パッケージのインストールと
githubからクローンします。
dnf install python
pip install pyzabbix pandas
git clone https://github.com/doublethink-bps/zabbixHostregist.git
コマンドの実行が完了したら、CSVファイルを用意します。
CSVファイルにはホスト名とIPアドレスの情報を記載します。
hostname,IP1,IP2,IP3,IP4,IP5,IP6
例として、以下の通りとなります。
hostname,IP1,IP2,IP3,IP4,IP5,IP6
test01,,192.168.4.2,1.1.1.102,172.231.4.10,10.176.3.56,
test02,10.1.1.2,,1.1.1.103,,10.176.3.57,
CSVのファイルの用意が完了したら、hostRegist.pyを実行します。
4. 実装
まず、Zabbixのログイン情報、CSVファイルパス、テンプレートID、グループIDを設定します。
pyzabbixでZabbixAPIを呼び出し、ログインします。
テンプレートIDとグループIDはSQLかZabbix APIを実行して確認する必要があります。
以下はpyzabbixを使用して、Zabbix APIを実行して確認する例です。
zabbix = pyzabbix.ZabbixAPI("ZabbixのwebコンソールURL")
zabbix.login("Zabbixのwebコンソールユーザ","Zabbixのwebコンソールパスワード")
template = zabbix.template.get(
output=["host","templateid"],
filter={
# 適用したいテンプレート名
"host":["テンプレート名"]
}
)
group= zabbix.hostgroup.get(
output=["groupid","name"],
filter={
# 適用したいホストグループ名
"name":["ホストグループ名"]
}
)
print(template[0])
print(group[0])
CSVファイルを一行ずつ読みだして、処理します。
また、Zabbixは各ホストに対し、複数インタフェースを登録する場合、どのインタフェースをデフォルトで使用するのか設定する必要があるため、最初に登録されるインタフェースをデフォルトとするために、IP1以外は、main関数内で条件分岐させ、interfacesリストが空の場合、mainParamへ1を代入し、最初にinterfacesリストに追加されたインタフェースをデフォルトとして設定します。
分岐が終わったら、ホストの登録を行い、最後にホストのインタフェース情報が格納されたinterfacesリストをリセットし、次のホスト登録処理を開始します。
実行すると、以下のようにCSVに記載されたホストが登録されます。
5.URL
■Github
■Zabbix ■pyzabbix
Discussion