19 Browser-Datenpunkte

Übersicht

Browser-Datenpunkte ermöglichen die Überwachung komplexer Websites und Webanwendungen mithilfe eines Browsers.

Die Unterstützung von Browser-Datenpunkten ist derzeit experimentell.

Browser-Datenpunkte erfassen Daten, indem sie einen benutzerdefinierten JavaScript-Code ausführen und Daten über HTTP/HTTPS abrufen. Dieser Datenpunkt kann browserbezogene Aktionen wie Klicken, Texteingabe, Navigation durch Webseiten und andere Benutzerinteraktionen mit Websites oder Webanwendungen simulieren.

Zusätzlich zum Skript kann eine optionale Liste von Parametern (Name-Wert-Paare) sowie ein Timeout angegeben werden.

Der Datenpunkt implementiert den W3C WebDriver-Standard teilweise und verwendet dabei entweder Selenium Server oder einen einfachen WebDriver (zum Beispiel ChromeDriver) als Endpunkt für Webtests. Damit der Datenpunkt funktioniert, legen Sie den Endpunkt im Konfigurationsparameter WebDriverURL der Zabbix-Server-/Proxy-Konfigurationsdatei fest (bei Verwendung von ChromeDriver siehe Security Considerations). Für eine bessere Leistung sollten Sie einen dedizierten Server für die Webtestumgebung in Betracht ziehen.

Prüfungen von Browser-Datenpunkten werden von Browser-Pollern des Zabbix Server oder Proxy ausgeführt und verarbeitet. Falls erforderlich, können Sie die Anzahl der vorab geforkten Instanzen von Browser-Pollern im Konfigurationsparameter StartBrowserPollers der Zabbix-Server-/Proxy-Konfigurationsdatei anpassen.

Für die Überwachung komplexer Websites und Webanwendungen steht die Vorlage Website by Browser als vorkonfigurierte Vorlage zur Verfügung.

Konfiguration

Wählen Sie im Feld Typ des Datenpunkt-Konfigurationsformulars Browser aus und füllen Sie dann die erforderlichen Felder aus.

Alle obligatorischen Eingabefelder sind mit einem roten Sternchen markiert.

Die Felder, die für Browser-Datenpunkte spezifische Informationen erfordern, sind:

Feld Beschreibung
Schlüssel Geben Sie einen eindeutigen Schlüssel ein, der zur Identifizierung des Datenpunkts verwendet wird.
Parameter Geben Sie die Variablen an, die als Attribut-Wert-Paare an das Skript übergeben werden sollen.
Benutzermakros werden unterstützt. Um zu sehen, welche integrierten Makros unterstützt werden, suchen Sie in der Tabelle unterstützte Makros nach „Browser-Typ-Datenpunkt“.
Skript Geben Sie JavaScript-Code im modalen Editor ein, der geöffnet wird, wenn Sie in das Parameterfeld klicken oder auf das Stiftsymbol daneben.
Dieser Code muss die Logik zur Rückgabe des Metrikwerts bereitstellen.
Der Code hat Zugriff auf alle Parameter, alle von Zabbix hinzugefügten zusätzlichen JavaScript-Objekte und JavaScript-Objekte für Browser-Datenpunkte.
Siehe auch: JavaScript Guide.
Timeout Zeitüberschreitung für die JavaScript-Ausführung (1–600 s; bei Überschreitung wird ein Fehler zurückgegeben).
Beachten Sie, dass es je nach Skript länger dauern kann, bis die Zeitüberschreitung ausgelöst wird.
Weitere Informationen zum Parameter Timeout finden Sie unter allgemeine Datenpunktattribute.

Beispiele

Ein Beispiel für die Einrichtung von Zabbix zur Überwachung von Websites unter Verwendung der Vorlage Website by Browser finden Sie unter [Websites mit Browser-Elementen überwachen].(/manual/guides/monitor_browser).

Standardskript

Das folgende Skript:

  1. Initialisiert eine Browser-Sitzung.
  2. Navigiert zu einer angegebenen URL.
  3. Erfasst Performance-Einträge und Sitzungsstatistiken und gibt sie als JSON-Zeichenfolge zurück.

Geben Sie im Feld Skript Folgendes ein:

var browser = new Browser(Browser.chromeOptions());

try {
    browser.navigate("http://example.com");
    browser.collectPerfEntries();
}
finally {
    return JSON.stringify(browser.getResult());
}
Browser mit benutzerdefinierten Fähigkeiten initialisieren

Das folgende Skript:

  1. Initialisiert eine Browser-Sitzung für den verfügbaren Browser basierend auf dem ersten übereinstimmenden Browser in der im Skript angegebenen Reihenfolge.
  2. Definiert Browser-Fähigkeiten, einschließlich der Strategie zum Laden der Seite und browserspezifischer Optionen, wie z. B. den Headless-Modus für die Browser Chrome, Firefox und Microsoft Edge.

Geben Sie im Feld Skript Folgendes ein:

var browser = new Browser({
    "capabilities":{
        "firstMatch":[
            {
                "browserName":"chrome",
                "pageLoadStrategy":"normal",
                "goog:chromeOptions":{
                    "args":[
                        "--headless=new"
                    ]
                }
            },
            {
                "browserName":"firefox",
                "pageLoadStrategy":"normal",
                "moz:firefoxOptions":{
                    "args":[
                        "--headless"
                    ]
                }
            },
            {
                "browserName":"MicrosoftEdge",
                "pageLoadStrategy":"normal",
                "ms:edgeOptions":{
                    "args":[
                        "--headless=new"
                    ]
                }
            },
            {
                "browserName":"safari",
                "pageLoadStrategy":"normal"
            }
        ]
    }
});
Browser mit GUI initialisieren

Standardmäßig werden Browser-Sitzungen (außer Safari) im Headless-Modus initialisiert, d. h. die grafische Benutzeroberfläche (GUI) des Browsers wird nicht angezeigt.

Das folgende Skript initialisiert eine Browser-Sitzung mit aktivierter GUI.

Beachten Sie, dass Sie den Pfad manuell angeben können, wenn der WebDriver die Browser-Binärdatei nicht finden kann.

var opts = Browser.chromeOptions();
opts.capabilities.alwaysMatch['goog:chromeOptions'].args = [];

// To initialize a Firefox session with GUI, uncomment the following lines:
// var opts = Browser.firefoxOptions();
// opts.capabilities.alwaysMatch['moz:firefoxOptions'].binary = 'usr/bin/firefox';
// opts.capabilities.alwaysMatch['moz:firefoxOptions'].args = [];

// To initialize a Microsoft Edge session with GUI, uncomment the following lines:
// var opts = Browser.edgeOptions();
// opts.capabilities.alwaysMatch['ms:edgeOptions'].binary = 'usr/bin/microsoft-edge';
// opts.capabilities.alwaysMatch['ms:edgeOptions'].args = [];

var browser = new Browser(opts);

Wenn Ihre Tests auf einem Remote-Server oder in einem Container ausgeführt werden, können Sie einen Virtual Network Computing (VNC)-Client verwenden, um sich mit dem VNC-Server des Systems zu verbinden. So können Sie die GUI des Browsers aus der Ferne anzeigen und mit ihr interagieren.

Screenshots erstellen

Das folgende Skript:

  1. Initialisiert eine Browser-Sitzung.
  2. Legt die Größe des Browser-Viewports fest, um die Screenshot-Größe zu bestimmen (als Parameter angegeben, siehe unten).
  3. Ruft eine URL auf (als Parameter angegeben, siehe unten).
  4. Erfasst Sitzungsstatistiken, erstellt einen Screenshot und fügt ihn den erfassten Statistiken hinzu.
  5. Behandelt Fehler, indem Fehlermeldungen und ein Screenshot erfasst werden.
  6. Gibt die erfassten Ergebnisse als JSON-Zeichenfolge zurück.

Das Skript verwendet außerdem Parameter aus dem Datenpunkt-Konfigurationsformular:

Geben Sie im Feld Skript Folgendes ein:

var browser, result;

var browser = new Browser(Browser.chromeOptions());

try {
    var params = JSON.parse(value); // Parse the JSON string containing parameters passed from Zabbix.

    browser.setScreenSize(Number(params.width), Number(params.height))

    browser.navigate(params.webURL);

    result = browser.getResult();
    result.screenshot = browser.getScreenshot();
}
catch (err) {
    if (!(err instanceof BrowserError)) {
        browser.setError(err.message);
    }
    result = browser.getResult();
    result.error.screenshot = browser.getScreenshot();
}
finally {
    return JSON.stringify(result);
}
Zabbix-Anmeldung prüfen

Das folgende Skript:

  1. Initialisiert eine Browser-Sitzung.
  2. Navigiert zu einer Seite (als Parameter angegeben, siehe unten).
  3. Gibt den Benutzernamen und das Passwort ein (als Parameter angegeben, siehe unten).
  4. Findet die Anmeldeschaltfläche und klickt darauf.
  5. Findet die Abmeldeschaltfläche und klickt darauf.
  6. Erfasst Performancedaten vor und nach der Anmeldung sowie nach der Abmeldung.
  7. Behandelt Fehler, indem Fehlermeldungen und ein Screenshot erfasst werden.
  8. Gibt die erfassten Ergebnisse als JSON-Zeichenfolge zurück.

Das Skript verwendet außerdem Parameter aus dem Datenpunkt-Konfigurationsformular:

Geben Sie im Feld Script Folgendes ein:

var browser, result;

browser = new Browser(Browser.chromeOptions());

try {
    var params = JSON.parse(value); // Parse the JSON string containing parameters passed from Zabbix.

    browser.navigate(params.webURL);
    browser.collectPerfEntries("open page");

    var el = browser.findElement("xpath", "//input[@id='name']");
    if (el === null) {
        throw Error("cannot find name input field");
    }
    el.sendKeys(params.username);

    el = browser.findElement("xpath", "//input[@id='password']");
    if (el === null) {
        throw Error("cannot find password input field");
    }
    el.sendKeys(params.password);

    el = browser.findElement("xpath", "//button[@id='enter']");
    if (el === null) {
        throw Error("cannot find login button");
    }
    el.click();

    browser.collectPerfEntries("login");

    el = browser.findElement("link text", "Sign out");
    if (el === null) {
        throw Error("cannot find logout button");
    }
    el.click();

    browser.collectPerfEntries("logout");

    result = browser.getResult();
}
catch (err) {
    if (!(err instanceof BrowserError)) {
        browser.setError(err.message);
    }
    result = browser.getResult();
    result.error.screenshot = browser.getScreenshot();
}
finally {
    return JSON.stringify(result);
}

Das folgende Skript:

  1. Initialisiert eine Browser-Sitzung.
  2. Definiert eine Funktion zum Entfernen doppelter Elemente aus einem Array (siehe Schritt 5).
  3. Navigiert zu einer Seite (über Parameter angegeben, siehe unten).
  4. Findet Links auf der Seite.
  5. Entfernt doppelte Links, um sicherzustellen, dass sie eindeutig sind.
  6. Extrahiert nur die Links, die mit "http" beginnen.
  7. Formatiert die extrahierten Links in eine bestimmte Struktur.
  8. Behandelt Fehler, indem Fehlermeldungen und ein Screenshot erfasst werden.
  9. Gibt die gesammelten Ergebnisse als JSON-String zurück.

Das Skript verwendet außerdem Parameter aus dem Datenpunkt-Konfigurationsformular:

  • scheme - {$WEBSITE.SCHEME}
  • domain - {$WEBSITE.DOMAIN}
  • path - {$WEBSITE.PATH}

Geben Sie im Feld Script Folgendes ein:

var browser, result;

browser = new Browser(Browser.chromeOptions());

try {
    var params = JSON.parse(value);  // Parse the JSON string containing parameters passed from Zabbix.

    function uniq(a) {
        return a.sort().filter(function (item, pos, ary) {
            return !pos || item != ary[pos - 1];
        });
    }

    browser.navigate(params.scheme + '://' + params.domain + params.path);

    var el = browser.findElements("link text", "");
    var links = [];
    for (var n = 0; n < el.length; n++) {
        links.push(el[n].getAttribute('href'));
    }

    links = uniq(links);

    result = [];
    for (i = 0; i < links.length; i++) {
        if (links[i].match(/^http.*/)) {
            var row = {};
            row["{#URL}"] = links[i];
            result.push(row);
        }
    }
}
catch (err) {
    if (!(err instanceof BrowserError)) {
        browser.setError(err.message);
    }
    result = browser.getResult();
    result.error.screenshot = browser.getScreenshot();
}
finally {
    return JSON.stringify(result);
}