Zabbix:Google Chrome headless per Kommandozeile nutzen
Aus znilwiki
Changelog:
- 20.10.2022 erste Version
Vorwort
Bei einem Kunden hat eine System eine "Status"-Webseite aus der man ersehen kann wie es einem Cluster geht.
Leider ist es eine html Webseite welche dann dynamisch per JavaScript die Werte nachlädt.
Der Zabbix Web Agent bekommt also nur die Webseite mit den Platzhaltern heruntergeladen, aber keine Werte weil das JavaScript nicht ausgeführt wird.
Dabei kam der Tipp es mit Chrome-Kommandozeile zu versuchen. Prima Plan dachte ich - denn seit Zabbix 6.0 installiere ich den Google-Chrome-Browser sowieso auf jedem Zabbix-Server mit. Dieser wird ja für das Erstellen der PDF-Reports genutzt (und inzwischen haben ich auch verstanden warum).
Vorweg: Das JavaScript-Problem konnte ich damit auch nicht lösen. Aber ich fand den Umgang so cool das ich mir das für die Zukunft hier einmal festhalten wollte.
Google Chrome auf Zabbix-Server installieren
Aus meiner Anleitung für die Installation von Zabbix 6.x unter Ubuntu 22.04 (funktioniert auch unter 20.04):
Da wir keine GUI auf dem Zabbix-Server haben laden wir den Browser einfach direkt als Paket herunter und installieren diesen:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb dpkg -i google-chrome-stable_current_amd64.deb apt install -f dpkg --configure -a
Ja, das ist etwas umständlich, wir installieren Chrome, er meckert über fehlende Abhängigkeiten, die beheben wir dann und lassen das Konfigurieren noch mal laufen.
Dafür ist der dann installiert ohne das wir eine grafische Oberfläche auf dem Server installieren mussten.
Beispiel 1: Quellcode der Webseitenquell
/opt/google/chrome/chrome --headless --dump-dom --disable-gpu --no-sandbox --no-system-proxy-config-service --ignore-certificate-errors --virtual-time-budget=30000 --run-all-compositor-stages-before-draw "https://192.168.1.25/sysinfo/"
Erklärung:
/opt/google/chrome/chrome Das Programm selbst --headless Keine GUI starten --dump-dom Was Empfangen wird auf dem Bildschirm ausgeben (Umleiten per > datei.txt) --disable-gpu Nicht die Grafikkarte nutzen, nur CPU --no-sandbox keine Sandbox verwenden (nur bei root notwendig / testen ob es verlangt) --no-system-proxy-config-service einen eventuell konfigurieren Prory nicht verwenden --ignore-certificate-errors Zertifikatsprüfungen deaktivieren (Warnung kommt trotzdem) --virtual-time-budget=30000 Warte diese Zeit bis die Webseite aufgebaut ist. Ist diese schon vorher geladen wird gleich weiter gemacht --run-all-compositor-stages-before-draw in Verbindung mit vorherigen Eintrag notwendig "https://192.168.1.25/sysinfo/" URL die Aufgerufen werden soll
Beispiel 2: PDF der Webseite
/opt/google/chrome/chrome --headless --print-to-pdf="/tmp/text/test.pdf" --disable-gpu --no-sandbox --no-system-proxy-config-service --ignore-certificate-errors "https://1192.168.1.25/sysinfo/"
Erklärung:
/opt/google/chrome/chrome Das Programm selbst --headless Keine GUI starten --print-to-pdf="/tmp/text/test.pdf" PDF erzeugen und in angegebener Datei speichern --disable-gpu Nicht die Grafikkarte nutzen, nur CPU --no-sandbox keine Sandbox verwenden (nur bei root notwendig / testen ob es verlangt) --no-system-proxy-config-service keine Sandbox verwenden (nur bei root notwendig / testen ob es verlangt) --ignore-certificate-errors keine Sandbox verwenden (nur bei root notwendig / testen ob es verlangt) "https://1192.168.1.25/sysinfo/" URL die Aufgerufen werden soll
Beispiel 3: Screenshot der Webseite
/opt/google/chrome/chrome --headless --window-size=800,600 --screenshot="/tmp/text/test.png" --disable-gpu --no-sandbox --no-system-proxy-config-service --ignore-certificate-errors "https://1192.168.1.25/sysinfo/"
Erklärung:
/opt/google/chrome/chrome Das Programm selbst --headless Keine GUI starten --window-size=800,600 Größe des Browserfensters. Auch Extremwerte möglich, z.B. 1024x3000 --screenshot="/tmp/text/test.png" Name der Datei in welcher der Screenshot gespeichert wird --disable-gpu Nicht die Grafikkarte nutzen, nur CPU --no-sandbox keine Sandbox verwenden (nur bei root notwendig / testen ob es verlangt) --no-system-proxy-config-service keine Sandbox verwenden (nur bei root notwendig / testen ob es verlangt) --ignore-certificate-errors keine Sandbox verwenden (nur bei root notwendig / testen ob es verlangt) "https://1192.168.1.25/sysinfo/" URL die Aufgerufen werden soll
Links
Kommantare
<commenst />