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.
Use Templates!
=====Templates=====
Man kann Templates auch verschachteln (verlinken). Geht alles mit GUI.
Webserver
-> HTTPD
-> MYSQLD
[[https://www.youtube.com/watch?v=wkdw66k-1Dg|Zabbix Templates - Youtube]]
=====Inventory=====
[[https://www.youtube.com/watch?v=2ADnLD5Frh8|Zabbix Inventory]]
=====Agent=====
====Active====
#include
#include
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;
}
====Passive====
#include
#include
#include
#include
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;
}