Guide de démarrage rapide
Après avoir installé zabbix_utils, vous pouvez l’utiliser dans votre script.
Ce guide de démarrage rapide vous montre comment :
- Récupérer le nom d’hôte depuis l’agent Zabbix.
- Créer un hôte et un élément trapper à l’aide de l’API Zabbix.
- Envoyer une valeur à l’élément.
Le guide présente le script étape par étape, en expliquant chaque partie au fur et à mesure de son introduction. Le script complet est fourni à la fin de la page.
Le guide suppose également que votre serveur Zabbix, l’agent et l’API s’exécutent localement.
Récupérer le nom d'hôte depuis l'agent Zabbix
Commencez par récupérer le nom d'hôte du système sur lequel l'agent Zabbix est en cours d'exécution. Vous aurez besoin de ce nom d'hôte pour créer un hôte à l'aide de l'API Zabbix.
1. Importez la classe Getter depuis zabbix_utils.
Cette classe fonctionne comme Zabbix get et vous permet de demander des données à l'agent Zabbix.
2. Créez une instance de Getter qui se connecte à l'agent Zabbix local à l'adresse 127.0.0.1 sur le port 10050.
3. Appelez la méthode get() sur l'instance Getter pour demander le nom d'hôte à l'agent Zabbix.
- La méthode
get()prend une clé d'élément comme paramètre et envoie une requête à l'agent Zabbix pour cet élément. - La méthode
get()renvoie un objet, et le nom d'hôte est stocké dans l'attributvaluede cet objet. system.hostnameest une clé intégrée de l'agent Zabbix qui renvoie le nom de l'hôte.
from zabbix_utils import Getter
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
Se connecter et se connecter à l’API Zabbix
Ensuite, connectez-vous à l’API Zabbix. Cela permet à votre script de gérer des objets Zabbix tels que les hôtes et les éléments.
1. Importez la classe ZabbixAPI depuis zabbix_utils.
2. Créez une instance de ZabbixAPI et indiquez l’URL de votre interface web Zabbix.
3. Appelez la méthode login() sur l’instance ZabbixAPI et fournissez votre nom d’utilisateur et votre mot de passe.
Le compte doit disposer de la permission d’accéder à l’API Zabbix.
4. Appelez la méthode logout() pour fermer la session après les opérations de l’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()
Créer un hôte dans Zabbix
Maintenant que vous avez le nom d’hôte depuis l’agent Zabbix et que vous êtes connecté à l’API Zabbix, vous pouvez créer un nouvel hôte dans Zabbix.
1. Appelez la méthode d’API host.create() sur l’instance ZabbixAPI et fournissez les détails de l’hôte :
host- définissez-le sur la variablehostnamecontenant le nom d’hôte récupéré depuis l’agent Zabbix.interfaces- contient les détails de connexion de l’agent Zabbix exécuté sur l’hôte.groups- contient au moins un groupe d’hôtes auquel l’hôte doit appartenir.
2. Puisque l’API Zabbix renvoie l’ID de l’hôte nouvellement créé, enregistrez cet ID dans la variable host_id pour une utilisation ultérieure.
3. Affichez un message pour confirmer que l’hôte a été créé.
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}")
Créer un nouvel élément dans Zabbix
Après avoir créé un hôte, vous pouvez lui ajouter un élément.
1. Définissez une clé unique pour l’élément à créer.
2. Appelez la méthode item.create() sur l’instance ZabbixAPI et fournissez les détails de l’élément :
hostid- définissez-le sur la variablehost_idcontenant l’ID de l’hôte que vous venez de créer.name- un nom pour l’élément.key_- définissez-le sur la variableitem_keyque vous venez de définir.type- définissez-le sur2(élément trapper), requis pour recevoir les valeurs envoyées par votre script dans les étapes suivantes.value_type- définissez-le sur3(numérique non signé), le type de données que cet élément stocke.
3. Comme l’API Zabbix renvoie l’ID de l’élément nouvellement créé, enregistrez cet ID dans la variable item_id pour une utilisation ultérieure.
4. Affichez un message pour confirmer que l’élément a été créé.
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}")
Envoyer une valeur à l'hôte
Maintenant que vous avez créé votre hôte et votre élément de données, vous pouvez lui envoyer des données.
1. Importez la classe time et attendez quelques secondes avant d'envoyer les données.
Cela garantit que Zabbix a entièrement traité votre nouvel hôte et votre nouvel élément de données.
2. Importez la classe Sender depuis zabbix_utils.
Cette classe fonctionne comme Zabbix sender et permet à votre script d'envoyer des données à Zabbix.
3. Créez une instance de Sender qui se connecte au serveur Zabbix local à l'adresse 127.0.0.1 sur le port 10051.
4. Appelez la méthode send_value() sur l'instance Sender pour envoyer une valeur à l'élément de données de votre hôte et fournissez les détails suivants :
hostname- définissez-le sur la variablehostnamecontenant le nom d'hôte que vous avez récupéré depuis Zabbix agent.item_key- définissez-le sur la variableitem_keyque vous venez de définir plus tôt dans votre script.1- la valeur à envoyer.
4. Affichez un message pour confirmer que la valeur a été envoyée.
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}")
Une fois ce code exécuté avec succès, vous devriez voir un message de réussite indiquant que Zabbix a reçu votre valeur :
Sender response: {"processed": 1, "failed": 0, "total": 1, "time": "0.000151", "chunk": 1}
Vous pouvez maintenant également vérifier votre interface web Zabbix (Monitoring > Latest data) pour voir la valeur.
Script complet
Ci-dessous se trouve le script complet qui combine toutes les étapes : récupération du nom d’hôte, création de l’hôte et de l’élément à l’aide de l’API Zabbix, puis envoi des données à Zabbix.
import time
from zabbix_utils import Getter, ZabbixAPI, Sender
# Récupérer le nom d’hôte depuis l’agent Zabbix
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
# Se connecter et s’authentifier à l’API Zabbix
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')
# Créer l’hôte dans 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"Hôte '{hostname}' créé avec l’ID {host_id}")
# Créer l’élément dans 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"Élément '{item_key}' créé avec l’ID {item_id}")
# Se déconnecter de l’API
api.logout()
# Attendre que Zabbix traite le nouvel hôte
time.sleep(10)
# Envoyer une valeur à l’hôte
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)
print(f"Réponse de l’expéditeur : {response}")