Datu vākšana no Zabbix aģenta
Pārskats
zabbix_utils ļauj vākt datus no Zabbix aģenta (līdzīgi kā Zabbix get).
Datus var vākt sinhronā vai asinhronā režīmā:
- Sinhronajā režīmā jūsu Python skripts pieprasa datus un gaida to saņemšanu, pirms turpināt darbu, kas ir piemēroti vienkāršām, secīgām un paredzamām darbībām.
- Asinhronajā režīmā skripts pieprasa datus, negaidot katru atbildi, tādējādi ļaujot citām darbībām notikt paralēli; tas ir efektīvāk lēniem pieprasījumiem vai lielām datu paketēm.
Šīs lapas piemēri ir vērsti uz sinhrono režīmu, lai gan asinhronais režīms izmanto līdzīgus principus. Papildu piemēri ir pieejami GitHub repozitorijā zabbix_utils.
Importēšana
Lai izmantotu zabbix_utils vienumu vērtību iegūšanai, importējiet Getter klasi savā Python skriptā:
from zabbix_utils import Getter
Pieprasījuma dati
Lai pieprasītu vienuma vērtību:
- Izveidojiet
Getterinstanci, norādot Zabbix aģenta IP adresi un portu. - Izsauciet
get()metodiGetterinstancei, norādot vienuma atslēgu, kuru vēlaties izgūt.
Piemēram, lai pieprasītu datus vienumam system.uname:
agent = Getter(host='192.0.2.1', port=10050)
response = agent.get('system.uname')
Izmantojot nestandarta IP
Ja serverim, kurā darbojas jūsu skripts, ir vairākas IP adreses, varat norādīt source_ip, ko Getter izmantos, veidojot savienojumu ar Zabbix aģentu:
agent = Getter(
host='192.0.2.1',
port=10050,
source_ip='10.10.7.1'
)
Izmantojot taimautu
Varat iestatīt Getter atbildes timeout, lai kontrolētu, cik ilgi jūsu skriptam jāgaida Zabbix aģenta atbilde, pirms tas pārtrauc mēģinājumu:
agent = Getter(
host='192.0.2.1',
port=10050,
timeout=30
)
Šifrēšanas izmantošana
Getter neietver iebūvētu šifrēšanas atbalstu, taču to var nodrošināt, izveidojot ietvaru, izmantojot trešo pušu bibliotēkas:
def psk_wrapper(sock, tls):
# ...
# Implementation of TLS PSK wrapper for the socket
# ...
agent = Getter(
host='192.0.2.1',
port=10050,
socket_wrapper=psk_wrapper
)
Atbilde
Atbilde no Zabbix aģenta tiek apstrādāta bibliotēkā un atgriezta kā AgentResponse objekts:
print(response)
# {
# "error": null,
# "raw": "Linux zabbix_server 5.15.0-3.60.5.1.el9uek.x86_64",
# "value": "Linux zabbix_server 5.15.0-3.60.5.1.el9uek.x86_64"
# }
print(response.value)
# Linux zabbix_server 5.15.0-3.60.5.1.el9uek.x86_64
print(response.error)
# None
Asinhronais režīms
Asinhronais režīms ļauj jūsu skriptam savākt vērtības, negaidot, līdz katra no tām tiek saņemta. Tas var padarīt jūsu skriptu efektīvāku, ja tam jāapkopo daudzas vērtības vai ja dažu vērtību savākšana aizņem ilgu laiku.
Izmantojot asinhrono režīmu, pastāv svarīgas atšķirības salīdzinājumā ar sinhrono režīmu:
- Importējiet Python
asynciomoduli (vispirms jums jāinstalē nepieciešamās atkarības). - Importējiet
AsyncGetternevisGetter. - Rakstiet savu kodu
asyncfunkcijā. - Izmantojiet
await, izsaucotget()metodi.
Piemēram, lai savāktu vienu vērtību, izmantojot asinhrono režīmu:
# 1. Import asyncio asinhronajam režīmam un AsyncGetter no zabbix_utils:
import asyncio
from zabbix_utils import AsyncGetter
# 2. Definējiet galveno async funkciju, kurā tiks izpildīti visi datu pieprasījumi:
async def main():
aģents = AsyncGetter(host='192.0.2.1', port=10050)
# 3. Iegūstiet system.uname vērtību no Zabbix aģents (jāizmanto await):
response = await aģents.get('system.uname')
# 4. Izdrukājiet Zabbix aģents atgriezto vērtību:
print(response.value)
# 5. Palaidiet async main() funkciju, izmantojot asyncio notikumu ciklu:
asyncio.run(main())