

【5.0対応済】Python3でZabbix API – ホストインターフェースの登録
こんにちは。プラットフォーム技術部の飯出(いいで)です。
前回の記事ではホストをZabbixに登録する方法、そして削除する方法について説明しました。今回はホストの登録時に一緒に設定するホストインターフェースについて、詳しく解説します。
この記事の実装サンプルでは、以前の記事で実装した内容を再利用して説明しています。Googleなどの検索結果から直接この記事に訪れた方は、一度、以下の記事を読んでいただけますと幸いです。
ホストインターフェースの情報を登録する
ホストインターフェースの登録には、2種類の方法があります。1つ目は、ホストの登録時にホストインターフェースも登録する方法、2つ目は登録済みのホストにホストインターフェースを追加する方法です。
ホストの登録時にホストインターフェースを登録する
使用するメソッドは、host.createです。ホストを登録する方法で説明したプログラムの11~28行目に記載した方法です。以下はその部分を抜粋したものです。
# ホストインターフェースは「Zabbixエージェント」
interfaces = [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "10050"
}
]
登録済みのホストにホストインターフェースを追加する
使用するメソッドは、hostinterface.createです。公式のマニュアルはこちらです。
要求フォーマット
{
"jsonrpc": "2.0",
"method": "hostinterface.create",
"params": {
"hostid": "30052",
"dns": "",
"ip": "192.168.3.1",
"main": 0,
"port": "10050",
"type": 1,
"useip": 1
},
"auth": "********************************",
"id": 1
}
上記の例では、ホストインターフェースとしてZabbixエージェントを登録しています。
登録済みのホストにホストインターフェースを追加する場合は、パラメーターに登録済みホストのIDも指定します。(その他のパラメーターについては、以前の記事を読んでいただけている方であれば説明は不要と考えます。)
応答フォーマット
{
"jsonrpc": "2.0",
"result": {
"interfaceids": [
"30062"
]
},
"id": 1
}
ホストインターフェースの登録に成功すると、Zabbix APIはホストインターフェースのIDを応答します。
登録パラメーターの概要
公式のマニュアルはこちらです。
英語だとわかりにくいので、今回も日本語化してみました。
プロパティ | 宣言型 | 説明 |
---|---|---|
interfaceid | string | ホストインターフェースのID(読取専用) |
dns | string | ホストインターフェースで使用するDNS名(接続先情報) useipプロパティでDNS名による接続を指定した場合は必須 |
hostid | string | ホストインターフェースを追加するホストのID hostinterface.createメソッドを使う場合は必須 |
ip | string | ホストインターフェースで使用するIPアドレス(接続先情報) useipプロパティでIPアドレスによる接続を選択した場合は必須 |
main(必須) | integer | このホストインターフェースをホストのデフォルトとして用いるか否か ホスト内に同じ種類のホストインターフェースを複数追加する場合は、 1つだけデフォルトとして設定する ・0: デフォルトではない ・1: デフォルト |
port(必須) | string | ホストインターフェースが使用するポート番号 ユーザーマクロを含めることができる |
type(必須) | integer | ホストインターフェースの種類 1: Zabbixエージェント 2: SNMP 3: IPMI 4: JMX |
useip(必須) | integer | ホストインターフェースの接続方法(接続先情報) 0: DNS名による接続 1: IPアドレスによる接続 |
details | array | 接続に用いる詳細な情報 typeプロパティでSNMPを選択した場合は必須 |
detailsプロパティに記載がありますが、ホストインターフェースにSNMPを用いる場合は、さらに設定が必要です。また、使用するSNMPのバージョンによって接続パラメーターが変化します。
プロパティ | 宣言型 | SNMPv1 SNMPv2c | SNMPv3 | 説明 |
---|---|---|---|---|
version | integer | 〇 | 〇 | SNMPインターフェースのバージョン 1: SNMPv1 2: SNMPv2c(規定値) 3: SNMPv3 |
bulk | integer | 〇 | 〇 | bulkリクエストを使用するか否か 0: bulkリクエストを使用しない 1: bulkリクエストを使用する |
community | string | 〇 | SNMPコミュニティ名 | |
securityname | string | 〇 | SNMPv3のセキュリティ名 | |
securitylevel | integer | 〇 | SNMPv3のセキュリティレベル 0: noAuthNoPriv(規定値) 1: authNoPriv 2: authPriv | |
authpassphrase | string | 〇 | SNMPv3の認証パスフレーズ | |
privpassphrase | string | 〇 | SNMPv3のプライバシーパスフレーズ | |
authprotocol | integer | 〇 | SNMPv3の認証プロトコル 0: MD5(規定値) 1: SHA | |
privprotocol | integer | 〇 | SNMPv3のプライバシープロトコル 0: DES(規定値) 1: AES | |
contextname | string | 〇 | SNMPv3のコンテキスト名 |
Pythonで実装する
では、実際にホストインターフェースを登録してみましょう。
ホストの登録時にホストインターフェースを登録する
ホストの登録プログラムを土台にして説明します。記事はこちらです。
プログラムの11~28行目を修正します。Zabbixエージェント、IPMIならびにJMX、3つのホストインターフェースを同時に登録してみましょう。
# 上から「Zabbixエージェント」「IPMI」「JMX」
interfaces = [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "10050"
},
{
"type": 3,
"main": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "623"
},
{
"type": 4,
"main": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "10052"
}
]
SNMPv1、SNMPv2c の場合
SNMPのホストインターフェースを登録する場合は、detailsプロパティも設定します。
# ホストインターフェースは「SNMPv2c」
interfaces = [
{
"type": 2,
"main": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "161",
"details": {
"version": 2,
"bulk": 1,
"community": "************"
}
}
]
SNMPv3の場合
SNMPv1、SNMPv2cと同じくdetailsプロパティを設定しますが、その内側に設定するプロパティが異なります。
# ホストインターフェースは「SNMPv3」
interfaces = [
{
"type": 2,
"main": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "161",
"details": {
"version": 3,
"bulk": 1,
"securityname": "********************************",
"securitylevel": 2,
"authpassphrase": "********************************",
"privpassphrase": "********************************",
"authprotocol": 1,
"privprotocol": 1,
"contextname": "********************************",
}
}
]
登録済みのホストにホストインターフェースを追加する
実装の土台には、以前の記事で紹介した「ログイン~ログアウト、一連の流れ」を使います。記事はこちらです。
以下のプログラムの中で、ハイライトしている部分がホストインターフェース固有の実装です。今回はホストインターフェースとして、JMXを登録しています。hostidプロパティは、あらかじめ調べておいてくださいね!
import os
import traceback
from function import login, logout, invoke
def main():
server = "http://hostname/zabbix"
user = "Admin"
password = "******"
session_id = ""
try:
session_id = login(server, user, password)
if 0 < len(session_id):
request = {
"jsonrpc": "2.0",
"method": "hostinterface.create",
"params": {
"hostid": "10425",
"dns": "",
"ip": "192.168.3.1",
"main": 1,
"port": "10052",
"type": 4,
"useip": 1
},
"auth": session_id,
"id": 1
}
response = {}
if invoke(server, request, response):
print("interfaceid(s): {}".format(response["result"]["interfaceids"]))
else:
print("{}: error: message={}, data={}, code={}".format(
os.path.basename(__file__),
response["error"]["message"],
response["error"]["data"],
response["error"]["code"])
)
except Exception as e:
print("{}: exception: {}".format(
os.path.basename(__file__),
traceback.format_exc())
)
finally:
if 0 < len(session_id):
# ログインしたら、忘れずにログアウトしましょう
logout(server, session_id)
if __name__ == "__main__":
main()
- invoke(): HTTP(S)でZabbix APIを呼び出す関数
- login(): Zabbix APIを使うにあたり、Zabbix Serverにログインする関数
- logout(): 同、ログアウトする関数
実行結果
PS C:\zabbixapi\sample> python3 .\sample-05.py
interfaceid(s): ['116']
ホストインターフェースが追加されたと思います。JMX以外のホストインターフェースでも、paramsプロパティの内容を変更すれば、ホストインターフェースを追加できます。ホストの登録時にホストインターフェースを登録した方法と同じパラメーターを設定してみてください。
登録済みのホストにホストインターフェースを追加する場合は、パラメーターに登録済みホストのIDも指定します。(再掲)
Zabbix4.0→5.0の変更点
バージョン5.0でホストインターフェースを登録する際における変更点の中で、特にZabbix API呼び出しに影響がある点について、紹介します。バージョン4.2ならびに4.4で追加となった機能もありますが、当社ではLTS版単位でバージョンアップ情報を扱っています。
SNMPバージョンとクレデンシャル情報の設定方法
バージョン5.0からSNMPバージョンならびにクレデンシャル情報の設定を、ホストインターフェース設定で実施するようになりました。ホストインターフェース情報をZabbix APIで登録していた方は、プログラムの改修が必須となっています。内容をご確認の上で、改修作業をお願いします。
なお、Zabbixエージェント、IPMIならびにJMXを用いている方は影響がありません。
SNMPエージェント関連の変更につきましては、Zabbix公式のドキュメントを確認いただくことを強くお勧めいたします。
まとめ
この記事では、ホストに対するホストインターフェース情報の登録を、Zabbix APIを使って実装する方法について紹介しました。
ホストの登録には必ずホストインターフェース情報を必要とします。そして、バージョン5.0ではシステム監視をする上でほぼ必須となるSNMP関連の設定方法に大幅な変更が入りました。Zabbix APIを用いていない方も一度、今回の変更点を確認していただけますと幸いです。
次回は、「ホストインベントリの登録方法」について紹介したいと思います。
Zabbixの導入・構築でお困りですか?
Zabbixの導入・構築でお困りですか?アークシステムは、Zabbix Japan LLCの公式認定パートナーとして、豊富な実績と高い技術力でお客様をサポートします。
アークシステムが選ばれる理由
- 豊富な経験: 多くのZabbix導入・構築プロジェクトを成功に導いた実績
- 確かな技術力: Zabbix認定資格を持つエンジニアが対応
- 独自のソリューション: 「監視定義テンプレート」を活用した迅速かつ高品質な実装
- 最新情報へのアクセス: Zabbix社との強力なパートナーシップを活かした最新技術対応
こんな方に最適です
- Zabbixの新規導入を検討している
- 現行システムの運用に課題を感じている
- 大規模環境での監視体制を整えたい
アークシステムでは、Zabbixの導入・運用に関する課題を解決し、最適な環境を構築します。どんなご相談でもお気軽にお問い合わせください!