Aktionen

Zabbix:Google Chrome headless per Kommandozeile nutzen

Aus znilwiki

Changelog:

  • 20.10.2022 erste Version

1 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.


2 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.


3 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



4 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

5 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

6 Links


7 Kommantare

<commenst />