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:

  1. Izveidojiet Getter instanci, norādot sava Zabbix aģenta IP adresi un portu.
  2. Izsauciet get() metodi Getter instancē, 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 asyncio moduli (vispirms jāinstalē nepieciešamās atkarības).
  • Importējiet AsyncGetter Getter vietā.
  • Rakstiet savu kodu async funkcijā.
  • Izmantojiet await, izsaucot get() 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())