Recull d'informació de l'agent de Zabbix
Visió general
zabbix_utils us permet recopilar dades de l'agent Zabbix (de manera similar a Zabbix get).
Les dades es poden recopilar en mode síncron o asíncron:
- En mode síncron, el vostre script de Python demana i espera dades abans de continuar, cosa que és adequada per a operacions senzilles, seqüencials i predictibles.
- En mode asíncron, el script sol·licita dades sense esperar cada resposta, cosa que permet que altres operacions continuïn en paral·lel; això és més eficient per a peticions lentes o grans lots de dades.
Els exemples d'aquesta pàgina se centren en el mode síncron, tot i que mode asíncron segueix patrons similars. Hi ha exemples addicionals disponibles al repositori de GitHub zabbix_utils.
Importar
Per usar zabbix_utils per recollir valors dels elements, importeu la classe Getter al vostre script de Python:
from zabbix_utils import Getter
Recull de dades
Per recollir el valor d'un element:
-
Creeu una instància
Getter, especificant l'adreça IP i el port del vostre agent Zabbix. -
Crideu el mètode
get()a la instànciaGetter, especificant la clau de l'element que voleu recuperar.
Per exemple, per recollir les dades per a l'element system.uname:
agent = Getter(host='192.0.2.0', port=10050)
response = agent.get('system.uname')
Ús d'una IP que no sigui la predeterminada
Si el servidor que executa el vostre script té diverses adreces IP, podeu especificar una source_ip perquè el Getter l'utilitzi en connectar-se a l'agent Zabbix:
agent = Getter(
host='192.0.2.0',
port=10050,
source_ip='10.10.7.1'
)
Ús del temps d'espera
Podeu definir un timeout de resposta per al Getter per controlar quant de temps ha d'esperar el vostre script una resposta de l'agent Zabbix abans de donar-se per vençut:
agent = Getter(
host='192.0.2.0',
port=10050,
timeout=30
)
Ús del xifratge
El Getter no inclou compatibilitat amb el xifrat integrat, però podeu proporcionar-la creant un contenidor utilitzant biblioteques de tercers:
Implementació del contenidor TLS PSK per al sòcol
def psk_wrapper(sock, tls):
# ...
# Implementació del contenidor TLS PSK per al socket
# ...
agent = Getter(
host='192.0.2.0',
port=10050,
socket_wrapper=psk_wrapper
)
Resposta
La resposta de l'agent Zabbix és processada per la biblioteca i retornada com un objecte AgentResponse:
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
Mode asíncron
El mode asíncron permet que el vostre script recopili valors sense esperar que arribi cadascun. Això pot fer que el vostre script sigui més eficient quan necessita recopilar molts valors o quan alguns valors triguen molt a ser recopilats.
Quan s'empra el mode asíncron, hi ha diferències importants en comparació amb el mode síncron:
-
Importeu el mòdul
asynciode Python (primer heu de instal·lar les dependències necessàries). -
Importeu
AsyncGetteren lloc deGetter. -
Escriviu el vostre codi dins d'una funció
async. -
Utilitzeu
awaitquan crideu el mètodeget().
Per exemple, per recollir un únic valor utilitzant el mode asíncron:
# 1. Importeu asyncio per al mode asíncron i AsyncGetter des de zabbix_utils:
import asyncio
from zabbix_utils import AsyncGetter
# 2. Defineix la funció asíncrona principal on s'executaran totes les sol·licituds de dades:
async def main():
agent = AsyncGetter(host='192.0.2.0', port=10050)
# 3. Obtingueu el valor system.uname de l'agent Zabbix (cal esperar):
response = await agent.get('system.uname')
# 4. Imprimiu el valor retornat per l'agent Zabbix:
print(response.value)
# 5. Executeu la funció async main() utilitzant el bucle d'esdeveniments d'asyncio:
asyncio.run(main())