あっきぃ日誌

ラズピッピブログのようなオタクブログのようななにか

Zabbixに公式のPythonライブラリができていたので移行してみる

自宅のZabbixサーバーのVMをUbuntu24.04に移行する一環で、Zabbixも5系から7系にジャンプしました。

それ自体はわりとすんなり片付きましたが、Pythonで値を取得するスクリプトが動かなくなってしまいました。どうやらログイン時のパラメータの仕様が変わったらしいのですが、残念なことにライブラリの更新が止まっていて、各々がパッチを作って雑対処している様子がプルリクとかフォークのコミットから見えました。

github.com

昔は公式がライブラリの紹介なのしてた気がするなあと思ってググってみたところ、公式が開発を始めていたので、こちらに移行することにしました。

github.com

ずいぶん差分が少ないな……?

ざっくりとした差分はこんな感じ。トークンを使うように変えてみたのでログイン周りが差分多めに見えますが、インポートするライブラリ名が変わった以外、クラスとかitem.getは変わっていません。なにこれ、フォークしたとかなのかな……?って思ったけどそうではないっぽいです。ともあれ簡単に移行できてありがたい限り。

- from zabbix.api import ZabbixAPI
+ from zabbix_utils import ZabbixAPI

- zbx = {
-  'url': '',
-  'user': '',
-  'pass': ''
- }
+ZABBIX_AUTH = {
+    "url": "192.168.29.102",
+    "token": "6d02cce218ffc1789f9b43aa779513f92a654394997bf57163155ac9faa7db19"
+}

- z = ZabbixAPI(url=zbx['url'], user=zbx['user'], password=zbx['pass'])
+ z = ZabbixAPI(**ZABBIX_AUTH)

print(z.item.get(itemids=[31323])[0])

ZabbixSender系

ZabbixSender系のスクリプトはまだ問題なく動いていましたが、こちらもzabbix_utilsに移行しました。こちらも名前が多少変わった以外の変更がないのがわかります。これなら雑置換でも対応できるレベルです。

$ diff -Naur backup/raspi1/Thu/bots/send_temp_zabbix.py bots/send_temp_zabbix.py 
--- backup/raspi1/Thu/bots/send_temp_zabbix.py	2021-08-28 15:35:22.236318457 +0900
+++ bots/send_temp_zabbix.py	2024-08-16 23:04:29.076383258 +0900
@@ -2,7 +2,7 @@
 import sys
 import urllib.request
 import json
-from pyzabbix import ZabbixMetric, ZabbixSender
+from zabbix_utils import ItemValue, Sender
 
 api = "http://127.0.0.1/api/temp"
 
@@ -16,8 +16,8 @@
 data = json.loads(body)
 
 params = [
-  ZabbixMetric("raspi1.local.marokun.net", "room_temp", data['temperature']),
-  ZabbixMetric("raspi1.local.marokun.net", "room_humidity", data['humidity']),
-  ZabbixMetric("raspi1.local.marokun.net", "room_pressure", data['pressure'])
+  ItemValue("raspi1.local.marokun.net", "room_temp", data['temperature']),
+  ItemValue("raspi1.local.marokun.net", "room_humidity", data['humidity']),
+  ItemValue("raspi1.local.marokun.net", "room_pressure", data['pressure'])
 ]
-result = ZabbixSender(use_config=True).send(params)
+result = Sender(use_config=True).send(params)

移行するか

今回は頭上のメインラズピッピ環境でだけ作業しました。が、たぶん他のラズピッピとかあちこちで動いていたり、Githubにも公開しているものがいたはずなので、そのへんの手直しもやらにゃいかんなあとなりました。

夏休みなんか頑張った気分になるために頑張るかー。いや、自宅サーバーの移行をそろそろやれよという話はある……。