Zabbix ist eine leistungsstarke Open-Source-Software für das Monitoring von Netzwerken, Servern, Anwendungen und Diensten. Mit Zabbix kannst du die Leistung und Verfügbarkeit deiner IT-Infrastruktur überwachen, Alarme einrichten und detaillierte Berichte generieren. Du kannst auch ein Inventory deiner Infrastruktur erstellen.
Zu den Mindestanforderungen gehören eine unterstützte Linux-Distribution, eine Datenbank wie MySQL oder PostgreSQL und ein Webserver wie Apache oder Nginx. Auf den Hosts werden i.d.R Agenten installiert.
Die Zabbix API basiert auf dem HTTP/HTTPS-Protokoll und unterstützt die gängigen Methoden GET, POST, PUT und DELETE. Die API verwendet JSON-RPC für die Kommunikation zwischen Client und Server.
Man kann auch Elasticsearch für Loghistory etc. integrieren.
Man kann Templates auch verschachteln (verlinken). Geht alles mit GUI.
Webserver -> HTTPD -> MYSQLD
#include <stdio.h> #include <zbxsender.h> int main() { zbx_handle_t zbxh; zbx_value_t value; int ret; // Initialisiere die Zabbix-Sender-Bibliothek ret = zbx_init(&zbxh); if (ret != ZBX_OK) { printf("Fehler bei der Initialisierung des Zabbix-Senders.\n"); return 1; } // Setze die Verbindungsinformationen zum Zabbix-Server zbx_set_server(&zbxh, "ZABBIX_SERVER_IP", 10051); // Ersetze "ZABBIX_SERVER_IP" durch die IP-Adresse des Zabbix-Servers // Erstelle eine Zabbix-Item-Struktur und setze die Daten zbx_item_t item; zbx_item_init(&item); item.key = "test.item"; // Ersetze "test.item" durch den Schlüssel des Items in Zabbix item.value_type = ZBX_VALUE_FLOAT; item.flt_value = 42.5; // Setze den Wert, den du senden möchtest // Sende das Item an den Zabbix-Server ret = zbx_send(&zbxh, &item); if (ret != ZBX_OK) { printf("Fehler beim Senden des Items.\n"); zbx_free(&zbxh); return 1; } // Aufräumen und beenden zbx_free(&zbxh); return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <zbxapi.h> int main() { zbx_handle_t zbxh; zbx_socket_t sock; zbx_sockaddr_t sa; zbx_item_t item; int ret; // Initialisiere die Zabbix-Agentenbibliothek ret = zbx_init(&zbxh); if (ret != ZBX_OK) { printf("Fehler bei der Initialisierung des Zabbix-Agenten.\n"); return 1; } // Erstelle einen Socket und binde ihn an den Zabbix-Server ret = zbx_socket_create(&sock); if (ret != ZBX_OK) { printf("Fehler beim Erstellen des Sockets.\n"); zbx_free(&zbxh); return 1; } ret = zbx_socket_bind(&sock, "0.0.0.0", 10051); // Binde den Socket an den gewünschten Port if (ret != ZBX_OK) { printf("Fehler beim Binden des Sockets.\n"); zbx_socket_close(&sock); zbx_free(&zbxh); return 1; } // Warte auf eingehende Anfragen und verarbeite sie while (1) { ret = zbx_socket_receive(&sock, &sa, &item); if (ret == ZBX_OK) { // Verarbeite das empfangene Item printf("Empfangenes Item:\n"); printf(" Key: %s\n", item.key); printf(" Wert: %s\n", item.str_value); // Sende die Antwort an den Zabbix-Server ret = zbx_socket_send(&sock, &sa, &item); if (ret != ZBX_OK) { printf("Fehler beim Senden der Antwort.\n"); } } else { printf("Fehler beim Empfangen des Items.\n"); } } // Aufräumen und beenden zbx_socket_close(&sock); zbx_free(&zbxh); return 0; }