Schnellstartanleitung
Nachdem Sie zabbix_utils installiert haben, können Sie es in Ihrem Skript verwenden.
Diese Schnellstartanleitung zeigt Ihnen, wie Sie:
- den Hostnamen vom Zabbix Agent abrufen.
- einen Host und einen Trapper-Datenpunkt mit der Zabbix API erstellen.
- einen Wert an den Datenpunkt senden.
Die Anleitung stellt das Skript Schritt für Schritt vor und erklärt jeden Teil, sobald er eingeführt wird. Das vollständige Skript wird am Ende der Seite bereitgestellt.
Die Anleitung geht außerdem davon aus, dass Ihr Zabbix Server, Agent und die API lokal ausgeführt werden.
Hostnamen vom Zabbix Agent abrufen
Beginnen Sie damit, den Hostnamen des Systems abzurufen, auf dem der Zabbix Agent ausgeführt wird. Sie benötigen diesen Hostnamen, um mithilfe der Zabbix API einen Host zu erstellen.
1. Importieren Sie die Klasse Getter aus zabbix_utils.
Diese Klasse funktioniert wie Zabbix get und ermöglicht es Ihnen, Daten vom Zabbix Agent anzufordern.
2. Erstellen Sie eine Getter-Instanz, die eine Verbindung zum lokalen Zabbix Agent unter 127.0.0.1 auf Port 10050 herstellt.
3. Rufen Sie die Methode get() für die Getter-Instanz auf, um den Hostnamen vom Zabbix Agent anzufordern.
- Die Methode
get()verwendet einen Datenpunktschlüssel als Parameter und sendet eine Anfrage an den Zabbix Agent für diesen Datenpunkt. - Die Methode
get()gibt ein Objekt zurück, und der Hostname ist im Attributvaluedieses Objekts gespeichert. system.hostnameist ein integrierter Schlüssel des Zabbix Agent, der den Namen des Hosts zurückgibt.
from zabbix_utils import Getter
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
Mit der Zabbix-API verbinden und anmelden
Stellen Sie als Nächstes eine Verbindung zur Zabbix-API her. Dadurch kann Ihr Skript Zabbix-Objekte wie Hosts und Datenpunkte verwalten.
1. Importieren Sie die Klasse ZabbixAPI aus zabbix_utils.
2. Erstellen Sie eine ZabbixAPI-Instanz und geben Sie die URL Ihres Zabbix-Web-Interface an.
3. Rufen Sie die Methode login() für die ZabbixAPI-Instanz auf und geben Sie Ihren Benutzernamen und Ihr Passwort an.
Das Konto muss über die Berechtigung verfügen, auf die Zabbix-API zuzugreifen.
4. Rufen Sie die Methode logout() auf, um die Sitzung nach den API-Operationen zu schließen.
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()
Host in Zabbix erstellen
Nachdem Sie nun den Hostnamen vom Zabbix Agent erhalten haben und mit der Zabbix API verbunden sind, können Sie einen neuen Host in Zabbix erstellen.
1. Rufen Sie die API-Methode host.create() auf der ZabbixAPI-Instanz auf und geben Sie die Host-Details an:
host- auf die Variablehostnamesetzen, die den Hostnamen enthält, den Sie vom Zabbix Agent abgerufen haben.interfaces- enthält die Verbindungsdetails für den Zabbix Agent, der auf dem Host ausgeführt wird.groups- enthält mindestens eine Hostgruppe, zu der der Host gehören soll.
2. Da die Zabbix API die ID des neu erstellten Hosts zurückgibt, speichern Sie diese ID zur späteren Verwendung in der Variable host_id.
3. Geben Sie eine Meldung aus, um zu bestätigen, dass der Host erstellt wurde.
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}")
Neuen Datenpunkt in Zabbix erstellen
Nachdem Sie einen Host erstellt haben, können Sie ihm einen Datenpunkt hinzufügen.
1. Definieren Sie einen eindeutigen Schlüssel für den zu erstellenden Datenpunkt.
2. Rufen Sie die Methode item.create() auf der ZabbixAPI-Instanz auf und geben Sie die Details des Datenpunkts an:
hostid- auf die Variablehost_idsetzen, die die ID des soeben erstellten Hosts enthält.name- ein Name für den Datenpunkt.key_- auf die Variableitem_keysetzen, die Sie gerade definiert haben.type- auf2setzen (Trapper-Datenpunkt); erforderlich, um Werte zu empfangen, die in den folgenden Schritten von Ihrem Skript gesendet werden.value_type- auf3setzen (numerisch ohne Vorzeichen), der Datentyp, den dieser Datenpunkt speichert.
3. Da die Zabbix API die ID des neu erstellten Datenpunkts zurückgibt, speichern Sie diese ID zur späteren Verwendung in der Variable item_id.
4. Geben Sie eine Meldung aus, um zu bestätigen, dass der Datenpunkt erstellt wurde.
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}")
Wert an Host senden
Nachdem Sie Ihren Host und Datenpunkt erstellt haben, können Sie Daten dorthin senden.
1. Importieren Sie die Klasse time und warten Sie einige Sekunden, bevor Sie die Daten senden.
Dadurch wird sichergestellt, dass Zabbix Ihren neuen Host und Datenpunkt vollständig verarbeitet hat.
2. Importieren Sie die Klasse Sender aus zabbix_utils.
Diese Klasse funktioniert wie Zabbix sender und ermöglicht es Ihrem Skript, Daten an Zabbix zu senden.
3. Erstellen Sie eine Sender-Instanz, die sich mit dem lokalen Zabbix Server unter 127.0.0.1 auf Port 10051 verbindet.
4. Rufen Sie die Methode send_value() für die Sender-Instanz auf, um einen Wert an den Datenpunkt Ihres Hosts zu senden, und geben Sie dabei folgende Details an:
hostname- auf die Variablehostnamesetzen, die den Hostnamen enthält, den Sie vom Zabbix Agent abgerufen haben.item_key- auf die Variableitem_keysetzen, die Sie zuvor in Ihrem Skript definiert haben.1- der zu sendende Wert.
4. Geben Sie eine Meldung aus, um zu bestätigen, dass der Wert gesendet wurde.
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}")
Nachdem dieser Code erfolgreich ausgeführt wurde, sollten Sie eine Erfolgsmeldung sehen, die angibt, dass Zabbix Ihren Wert empfangen hat:
Sender response: {"processed": 1, "failed": 0, "total": 1, "time": "0.000151", "chunk": 1}
Nun können Sie auch in Ihrer Zabbix-Weboberfläche (Monitoring > Aktuelle Daten) nachsehen, um den Wert zu sehen.
Vollständiges Skript
Nachfolgend finden Sie das vollständige Skript, das alle Schritte kombiniert: Abrufen des Hostnamens, Erstellen des Hosts und des Datenpunkts mithilfe der Zabbix API sowie Senden von Daten an Zabbix.
import time
from zabbix_utils import Getter, ZabbixAPI, Sender
# Hostnamen vom Zabbix Agent abrufen
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
# Verbindung zur Zabbix API herstellen und anmelden
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')
# Host in Zabbix erstellen
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}' created with ID {host_id}")
# Datenpunkt in Zabbix erstellen
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}")
# Von der API abmelden
api.logout()
# Warten, bis Zabbix den neuen Host verarbeitet hat
time.sleep(10)
# Wert an den Host senden
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)
print(f"Sender response: {response}")