Guida rapida
Dopo aver installato zabbix_utils, puoi usarlo nel tuo script.
Questa guida rapida mostra come:
- Recuperare il nome host da Zabbix agent.
- Creare un host e un item trapper usando le API di Zabbix.
- Inviare un valore all'item.
La guida presenta lo script passo dopo passo, spiegando ogni parte man mano che viene introdotta. Lo script completo è fornito alla fine della pagina.
La guida presuppone inoltre che il tuo Zabbix server, agent e le API siano in esecuzione localmente.
Recuperare il nome host da Zabbix agent
Inizia recuperando il nome host del sistema su cui è in esecuzione Zabbix agent. Ti servirà questo nome host per creare un host utilizzando Zabbix API.
1. Importa la classe Getter da zabbix_utils.
Questa classe funziona come Zabbix get e ti consente di richiedere dati da Zabbix agent.
2. Crea un'istanza di Getter che si connetta a Zabbix agent locale all'indirizzo 127.0.0.1 sulla porta 10050.
3. Chiama il metodo get() sull'istanza Getter per richiedere il nome host da Zabbix agent.
- Il metodo
get()accetta come parametro una chiave item e invia una richiesta a Zabbix agent per quell'item. - Il metodo
get()restituisce un oggetto e il nome host è memorizzato nell'attributovaluedi quell'oggetto. system.hostnameè una chiave integrata di Zabbix agent che restituisce il nome dell'host.
from zabbix_utils import Getter
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
Connettersi e accedere alla API di Zabbix
Successivamente, connettiti alla API di Zabbix. Questo consente al tuo script di gestire oggetti di Zabbix come host e item.
1. Importa la classe ZabbixAPI da zabbix_utils.
2. Crea un'istanza di ZabbixAPI e fornisci l'URL della tua interfaccia web di Zabbix.
3. Chiama il metodo login() sull'istanza ZabbixAPI e fornisci il tuo nome utente e la tua password.
L'account deve avere il permesso di accedere alla API di Zabbix.
4. Chiama il metodo logout() per chiudere la sessione dopo le operazioni API.
from zabbix_utils import ZabbixAPI
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')
# API operations go here
api.logout()
Creare un host in Zabbix
Ora che hai il nome host da Zabbix agent e sei connesso alla Zabbix API, puoi creare un nuovo host in Zabbix.
1. Chiama il metodo API host.create() sull'istanza ZabbixAPI e fornisci i dettagli dell'host:
host- impostato sulla variabilehostnameche contiene il nome host recuperato da Zabbix agent.interfaces- contiene i dettagli di connessione per Zabbix agent in esecuzione sull'host.groups- contiene almeno un gruppo di host a cui l'host deve appartenere.
2. Poiché la Zabbix API restituisce l'ID dell'host appena creato, salva questo ID nella variabile host_id per usarlo in seguito.
3. Stampa un messaggio per confermare che l'host è stato creato.
api.host.create(
host=hostname,
interfaces=[{
'type': 1,
'main': 1,
'useip': 1,
'ip': '127.0.0.1',
'dns': '',
'port': '10050',
}],
groups=[{'groupid': '2'}]
)
host_id = host['hostids'][0]
print(f"Host '{hostname}' created with ID {host_id}")
Creare un nuovo item in Zabbix
Dopo aver creato un host, puoi aggiungervi un item.
1. Definisci una chiave univoca per l'item da creare.
2. Chiama il metodo item.create() sull'istanza ZabbixAPI e fornisci i dettagli dell'item:
hostid- impostato sulla variabilehost_idche contiene l'ID dell'host appena creato.name- un nome per l'item.key_- impostato sulla variabileitem_keyche hai appena definito.type- impostato su2(trapper item), necessario per ricevere i valori inviati dal tuo script nei passaggi successivi.value_type- impostato su3(numerico senza segno), il tipo di dati memorizzati da questo item.
3. Poiché l'API di Zabbix restituisce l'ID dell'item appena creato, salva questo ID nella variabile item_id per usarlo in seguito.
4. Stampa un messaggio per confermare che l'item è stato creato.
item_key = 'app.myservice.heartbeat'
item = api.item.create(
hostid=host_id,
name='App heartbeat',
key_=item_key,
type=2,
value_type=3,
)
item_id = item['itemids'][0]
print(f"Item '{item_key}' created with ID {item_id}")
Inviare un valore all'host
Ora che hai creato il tuo host e item, puoi inviargli dei dati.
1. Importa la classe time e attendi alcuni secondi prima di inviare i dati.
Questo garantisce che Zabbix abbia elaborato completamente il nuovo host e item.
2. Importa la classe Sender da zabbix_utils.
Questa classe funziona come Zabbix sender e consente al tuo script di inviare dati a Zabbix.
3. Crea un'istanza di Sender che si connetta al server Zabbix locale all'indirizzo 127.0.0.1 sulla porta 10051.
4. Chiama il metodo send_value() sull'istanza Sender per inviare un valore all'item del tuo host e fornisci questi dettagli:
hostname- impostato sulla variabilehostnamecontenente il nome host recuperato da Zabbix agent.item_key- impostato sulla variabileitem_keyche hai appena definito in precedenza nel tuo script.1- il valore da inviare.
4. Stampa un messaggio per confermare che il valore è stato inviato.
import time
time.sleep(10)
from zabbix_utils import Sender
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)
print(f"Sender response: {response}")
Dopo che questo codice è stato eseguito correttamente, dovresti vedere un messaggio di successo che indica che Zabbix ha ricevuto il tuo valore:
Sender response: {"processed": 1, "failed": 0, "total": 1, "time": "0.000151", "chunk": 1}
Ora puoi anche controllare l'interfaccia web di Zabbix (Monitoring > Latest data) per vedere il valore.
Script completo
Di seguito è riportato lo script completo che combina tutti i passaggi: recupero del nome host, creazione del host e dell'item tramite Zabbix API e invio dei dati a Zabbix.
import time
from zabbix_utils import Getter, ZabbixAPI, Sender
# Recupera il nome host da Zabbix agent
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
# Connessione e accesso a Zabbix API
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')
# Crea il host in Zabbix
host = api.host.create(
host=hostname,
interfaces=[{
'type': 1,
'main': 1,
'useip': 1,
'ip': '127.0.0.1',
'dns': '',
'port': '10050',
}],
groups=[{'groupid': '2'}]
)
host_id = host['hostids'][0]
print(f"Host '{hostname}' creato con ID {host_id}")
# Crea l'item in Zabbix
item_key = 'app.myservice.heartbeat'
item = api.item.create(
hostid=host_id,
name='App heartbeat',
key_=item_key,
type=2,
value_type=3
)
item_id = item['itemids'][0]
print(f"Item '{item_key}' creato con ID {item_id}")
# Disconnessione da API
api.logout()
# Attende che Zabbix elabori il nuovo host
time.sleep(10)
# Invia il valore al host
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)
print(f"Risposta del sender: {response}")