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 sava Zabbix aģenta IP adresi un portu. - Izsauciet
get()metodiGetterinstancē, norādot tā vienuma atslēgu, kuru vēlaties iegūt.
Piemēram, lai pieprasītu datus vienumam system.uname:
agent = Getter(host='192.0.2.0', port=10050)
response = agent.get('system.uname')
Nestandarta IP adreses izmantošana
Ja serverim, kurā darbojas jūsu skripts, ir vairākas IP adreses, varat norādīt source_ip, ko Getter izmantos, pieslēdzoties Zabbix aģentam:
agent = Getter(
host='192.0.2.0',
port=10050,
source_ip='10.10.7.1'
)
Taimauta izmantošana
Jūs varat iestatīt atbildes timeout objektam Getter, lai noteiktu, cik ilgi jūsu skriptam jāgaida atbilde no Zabbix aģenta, pirms pārtraukt gaidīšanu:
agent = Getter(
host='192.0.2.0',
port=10050,
timeout=30
)
Šifrēšanas izmantošana
Getter neietver iebūvētu šifrēšanas atbalstu, taču jūs varat to nodrošināt, izveidojot ietvaru, izmantojot trešo pušu bibliotēkas:
def psk_wrapper(sock, tls):
# ...
# TLS PSK ietvara ieviešana ligzdai
# ...
agent = Getter(
host='192.0.2.0',
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 vā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 ir jāvāc daudzas vērtības vai ja dažu vērtību savākšana aizņem ilgu laiku.
Izmantojot asinhrono režīmu, salīdzinājumā ar sinhrono režīmu ir vairākas būtiskas atšķirības:
- Importējiet Python
asynciomoduli (vispirms jāinstalē nepieciešamās atkarības). - Importējiet
AsyncGetterGettervietā. - Rakstiet savu kodu
asyncfunkcijā. - Izmantojiet
await, izsaucotget()metodi.
Piemēram, lai savāktu vienu vērtību, izmantojot asinhrono režīmu:
# 1. Import asyncio for asynchronous mode, and AsyncGetter from zabbix_utils:
import asyncio
from zabbix_utils import AsyncGetter
# 2. Define the main async function where all data requests will be executed:
async def main():
agent = AsyncGetter(host='192.0.2.0', port=10050)
# 3. Fetch the system.uname value from Zabbix agent (must await):
response = await agent.get('system.uname')
# 4. Print the value returned by Zabbix agent:
print(response.value)
# 5. Run the async main() function using asyncio's event loop:
asyncio.run(main())