Erstellen eines Moduls (Tutorial)
Dies ist ein Schritt-für-Schritt-Tutorial, das zeigt, wie man ein einfaches Zabbix-Frontend-Modul erstellt. Sie können alle Dateien dieses Moduls als ZIP-Archiv herunterladen: MyAddress.zip.
Was Sie erstellen werden
Während dieses Tutorials erstellen Sie zunächst ein Frontend-Modul, das einen neuen Menüabschnitt Meine Adresse hinzufügt und konvertieren es dann in ein fortgeschritteneres Frontend-Modul, das eine HTTP-Anfrage an https://api.seeip.org sendet und die Antwort – die IP-Adresse Ihres Computers – auf einer neuen Seite im neu erstellten Menüabschnitt Meine Adresse anzeigt. So sieht das fertige Modul aus:

Teil I - Neuer Menübereich
Ein leeres Modul zum Zabbix Frontend hinzufügen
-
Erstellen Sie im Verzeichnis modules Ihrer Zabbix-Frontend-Installation ein Verzeichnis MyAddress (zum Beispiel zabbix/ui/modules).
-
Erstellen Sie eine Datei manifest.json mit grundlegenden Modul-Metadaten (siehe die Beschreibung der unterstützten Parameter).
ui/modules/MyAddress/manifest.json
{
"manifest_version": 2.0,
"id": "my-address",
"name": "My IP Address",
"version": "1.0",
"namespace": "MyAddress",
"description": "My External IP Address."
}
- Gehen Sie im Zabbix Frontend zum Abschnitt Administration → General → Modules und klicken Sie auf die Schaltfläche Scan directory.

- Suchen Sie das neue Modul My IP Address in der Liste und klicken Sie auf den Hyperlink „Disabled“, um den Status des Moduls von „Disabled“ auf „Enabled“ zu ändern (falls das Modul nicht aufgeführt ist, siehe den Abschnitt Fehlerbehebung).

Das Modul ist jetzt im Frontend registriert. Es ist jedoch noch nicht sichtbar, da Sie die Funktionalität des Moduls noch definieren müssen. Sobald Sie dem Modulverzeichnis Inhalte hinzufügen, sehen Sie die Änderungen im Zabbix Frontend sofort nach dem Aktualisieren der Seite.
Erstellen Sie einen Menüabschnitt
- Erstellen Sie eine Module.php-Datei im MyAddress-Verzeichnis.
Diese Datei implementiert eine neue Module-Klasse, die die Standardklasse CModule erweitert.
Die Module-Klasse fügt einen neuen My Address-Menüabschnitt in das Hauptmenü ein.
Die setAction()-Methode gibt eine Aktion an, die beim Klicken auf den Menüabschnitt ausgeführt werden soll.
Zu Beginn können Sie die vordefinierte Aktion userprofile.edit verwenden, welche die Seite Benutzerprofil öffnet.
In Teil III dieses Tutorials erfahren Sie, wie Sie eine benutzerdefinierte Aktion erstellen.
ui/modules/MyAddress/Module.php
<?php
namespace Modules\MyAddress;
use Zabbix\Core\CModule,
APP,
CMenuItem;
class Module extends CModule {
public function init(): void {
APP::Component()->get('menu.main')
->add((new CMenuItem(_('Meine Adresse')))
->setAction('userprofile.edit'));
}
}
Sie können 'userprofile.edit' durch andere Aktionen ersetzen, z. B. 'charts.view' (öffnet benutzerdefinierte Diagramme), 'problems.view' (öffnet Überwachung → Probleme) oder 'report.status' (öffnet Systeminformationen-Bericht).
- Aktualisieren Sie das Zabbix-Frontend. Unten im Zabbix-Hauptmenü gibt es jetzt einen neuen Abschnitt Meine Adresse.
Klicken Sie auf Meine Adresse, um die Seite Benutzerprofil zu öffnen.

Teil II – Änderung der Position des Menüabschnitts
In diesem Teil verschieben Sie den Menüabschnitt Meine Adresse in den Abschnitt Überwachung und fügen ihm dann ein verschachteltes Menü hinzu. Dadurch können Benutzer vom Menüabschnitt Überwachung → Meine Adresse auf zwei Untermenüseiten zugreifen.
- Öffnen und bearbeiten Sie die Datei Module.php.
ui/modules/MyAddress/Module.php
<?php
namespace Modules\MyAddress;
use Zabbix\Core\CModule,
APP,
CMenuItem;
class Module extends CModule {
public function init(): void {
APP::Component()->get('menu.main')
->findOrAdd(_('Monitoring'))
->getSubmenu()
->insertAfter(_('Discovery'),
(new CMenuItem(_('My Address')))->setAction('userprofile.edit')
);
}
}
- Aktualisieren Sie das Zabbix-Frontend. Erweitern Sie den Menüabschnitt Monitoring und beachten Sie, dass sich der Abschnitt My address jetzt unter dem Abschnitt Discovery befindet.

- Um verschachtelte Seiten zum Menüabschnitt My Address hinzuzufügen, öffnen und bearbeiten Sie die Datei Module.php erneut.
Dieser Schritt erstellt zwei Unterabschnitte:
- Externe IP, die eine neue „my.address“-Aktion ausführt, die in den nächsten Schritten definiert wird;
- Benutzerprofil, das die vordefinierte „userprofile.edit“-Aktion ausführt, um die Seite „Benutzerprofil*“ zu öffnen.
Beachten Sie, dass Sie für das verschachtelte Menü zusätzlich zu den in den vorherigen Schritten verwendeten Klassen, die Klasse CMenu verwenden müssen.
ui/modules/MyAddress/Module.php
<?php
namespace Modules\MyAddress;
use Zabbix\Core\CModule,
APP,
CMenu,
CMenuItem;
class Module extends CModule {
public function init(): void {
APP::Component()->get('menu.main')
->findOrAdd(_('Monitoring'))
->getSubmenu()
->insertAfter(_('Discovery'),
(new CMenuItem(_('My Address')))->setSubMenu(
new CMenu([
(new CMenuItem(_('External IP')))->setAction('my.address'),
(new CMenuItem(_('User profile')))->setAction('userprofile.edit')
])
)
);
}
}
- Aktualisieren Sie das Zabbix-Frontend. Beachten Sie, dass der Menüabschnitt My address jetzt ein Menü der dritten Ebene mit zwei Seiten enthält - External IP und User profile.

Teil III – Modulaktion
Eine Aktion wird in zwei Dateien implementiert – actions/MyAddress.php und views/my.address.php. Die Datei actions/MyAddress.php kümmert sich um die Implementierung der Geschäftslogik, während die Datei views/my.address.php für die Ansicht zuständig ist.
-
Erstellen Sie ein Verzeichnis actions im Verzeichnis MyAddress.
-
Erstellen Sie die Datei MyAddress.php im Verzeichnis actions.
Die Aktionslogik wird in der Klasse MyAddress definiert.
Diese Aktionsklasse implementiert vier Funktionen: init(), checkInput(), checkPermissions() und doAction(). Das Zabbix-Frontend ruft die Funktion doAction() auf, wenn die Aktion angefordert wird.
Diese Funktion ist für die Geschäftslogik des Moduls zuständig.
Die Daten müssen als assoziatives Array organisiert sein. Das Array kann mehrdimensional sein und alle von der Ansicht erwarteten Daten enthalten.
ui/modules/MyAddress/actions/MyAddress.php
<?php
namespace Modules\MyAddress\Actions;
use CController,
CControllerResponseData;
class MyAddress extends CController {
public function init(): void {
$this->disableCsrfValidation();
}
protected function checkInput(): bool {
return true;
}
protected function checkPermissions(): bool {
return true;
}
protected function doAction(): void {
$data = ['my-ip' => file_get_contents("https://api.seeip.org")];
$response = new CControllerResponseData($data);
$this->setResponse($response);
}
}
-
Erstellen Sie ein neues Verzeichnis views im Verzeichnis MyAddress.
-
Erstellen Sie eine Datei my.address.php im Verzeichnis views und definieren Sie die Modulansicht.
Beachten Sie, dass die Variable $data in der Ansicht verfügbar ist, ohne dass sie speziell definiert werden muss.
Das Framework übergibt das assoziative Array automatisch an die Ansicht.
ui/modules/MyAddress/views/my.address.php
<?php
(new CHtmlPage())
->setTitle(_('Der HTML-Titel der Seite „Meine Adresse“))
->addItem(new CDiv($data['my-ip']))
->show();
- Die Modulaktion muss in der Datei manifest.json registriert werden. Öffnen Sie manifest.json und fügen Sie ein neues Objekt „actions“ hinzu, das Folgendes enthält:
- den Aktionsschlüssel mit dem Aktionsnamen in Kleinbuchstaben (a-z) und mit durch Punkte getrennten Wörtern (z. B. „my.address“);
- den Aktionsklassennamen („MyAddress“) als Wert für den Schlüssel „class“ des Objekts „my.address“;
- den Aktionsansichtsnamen („my.address“) als Wert für den Schlüssel „view“ des Objekts „my.address“.
ui/modules/MyAddress/manifest.json
{
"manifest_version": 2.0,
"id": "my-address",
"name": "Meine IP-Adresse",
"version": "1.0",
"namespace": "MyAddress",
"description": "Meine externe IP-Adresse.",
"actions": {
"my.address": {
"class": "MyAddress",
"view": "my.address"
}
}
}
- Aktualisieren Sie das Zabbix-Frontend. Klicken Sie auf Meine Adresse → Externe IP, um die IP-Adresse Ihres Computers anzuzeigen.
