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; }