Inhaltsverzeichnis

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

Zabbix Templates - Youtube

Inventory

Zabbix Inventory

Agent

Active

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

Passive

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