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
In diesem Tutorial erstellen Sie zunächst ein Frontend-Modul, das einen neuen Menüabschnitt My Address hinzufügt, und wandeln es anschließend in ein fortgeschritteneres Frontend-Modul um, 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 My Address anzeigt. So wird das fertige Modul aussehen:

Teil I - Neuer Menübereich
Leeres Modul zum Zabbix-Frontend hinzufügen
-
Erstellen Sie ein Verzeichnis MyAddress im Verzeichnis modules Ihrer Zabbix-Frontend-Installation (zum Beispiel zabbix/ui/modules).
-
Erstellen Sie eine Datei manifest.json mit grundlegenden Metadaten des Moduls (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 > Allgemein > Module und klicken Sie auf die Schaltfläche Verzeichnis durchsuchen.

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

Das Modul ist nun im Frontend registriert. Es ist jedoch noch nicht sichtbar, da Sie zunächst die Funktionalität des Moduls definieren müssen. Sobald Sie Inhalte zum Modulverzeichnis hinzufügen, werden die Änderungen im Zabbix-Frontend nach dem Aktualisieren der Seite sofort angezeigt.
Einen Menüabschnitt erstellen
- Erstellen Sie eine Datei Module.php im Verzeichnis MyAddress.
Diese Datei implementiert eine neue Klasse Module, die die standardmäßige Klasse CModule erweitert. Die Klasse Module fügt dem Hauptmenü einen neuen Menüabschnitt Meine Adresse hinzu.
Die Methode setAction() legt eine Aktion fest, die beim Klicken auf den Menüabschnitt ausgeführt wird. Zunächst können Sie die vordefinierte Aktion userprofile.edit verwenden, die 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, zum Beispiel durch 'charts.view' (öffnet benutzerdefinierte Graphen), 'problems.view' (öffnet Überwachung > Probleme) oder 'report.status' (öffnet den Bericht Systeminformationen).
- Aktualisieren Sie das Zabbix-Frontend. Nun gibt es am unteren Rand des Zabbix-Hauptmenüs 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 My Address in den Abschnitt Monitoring und fügen anschließend ein verschachteltes Menü hinzu. Dadurch können Benutzer über den Menüabschnitt Monitoring > My Address 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 stellen Sie fest, dass sich der Abschnitt My address nun unterhalb des Abschnitts Discovery befindet.

- Um verschachtelte Seiten zum Menüabschnitt My Address hinzuzufügen, öffnen und bearbeiten Sie erneut die Datei Module.php.
In diesem Schritt werden zwei Unterabschnitte erstellt:
- External IP, der eine neue Aktion
my.addressausführt, die in den nächsten Schritten definiert wird; - User profile, der die vordefinierte Aktion
userprofile.editausführt, um die Seite User profile 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 nun 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 übernimmt die Implementierung der Geschäftslogik, während die Datei views/my.address.php für die Ansicht zuständig ist.
-
Erstellen Sie im Verzeichnis MyAddress ein Verzeichnis actions.
-
Erstellen Sie im Verzeichnis actions eine Datei MyAddress.php.
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 werden. Das Array kann mehrdimensional sein und beliebige von der Ansicht erwartete 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 im Verzeichnis MyAddress ein neues Verzeichnis views.
-
Erstellen Sie im Verzeichnis views eine Datei my.address.php und definieren Sie die Modulansicht.
Beachten Sie, dass die Variable $data in der Ansicht verfügbar ist, ohne sie ausdrücklich zu definieren.
Das Framework übergibt das assoziative Array automatisch an die Ansicht.
ui/modules/MyAddress/views/my.address.php
<?php
(new CHtmlPage())
->setTitle(_('The HTML Title of My Address Page'))
->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
actionshinzu, das Folgendes enthält:
- den Aktionsschlüssel mit dem in Kleinbuchstaben (a-z) geschriebenen Aktionsnamen und durch Punkte getrennten Wörtern (zum Beispiel
my.address); - den Namen der Aktionsklasse (
MyAddress) als Wert für den Schlüsselclassdes Objektsmy.address; - den Namen der Aktionsansicht (
my.address) als Wert für den Schlüsselviewdes Objektsmy.address.
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.",
"actions": {
"my.address": {
"class": "MyAddress",
"view": "my.address"
}
}
}
- Aktualisieren Sie das Zabbix-Frontend. Klicken Sie auf My address > External IP, um die IP-Adresse Ihres Computers anzuzeigen.
