Aktionen

Zabbix:Google Chrome headless per Kommandozeile nutzen: Unterschied zwischen den Versionen

Aus znilwiki

(Die Seite wurde neu angelegt: „<u>'''Changelog:'''</u><br> * 20.10.2022 erste Version ---- ==Vorwort== Bei einem Kunden hat eine System eine "Status"-Webseite aus der man ersehen kann wie es…“)
 
 
Zeile 21: Zeile 21:
Dafür ist der dann installiert ohne das wir eine grafische Oberfläche auf dem Server installieren mussten.<br>
Dafür ist der dann installiert ohne das wir eine grafische Oberfläche auf dem Server installieren mussten.<br>
----
----
==Beispiel==
==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/"
  /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:<br>
Erklärung:<br>
Zeile 29: Zeile 29:
  --disable-gpu                              Nicht die Grafikkarte nutzen, nur CPU
  --disable-gpu                              Nicht die Grafikkarte nutzen, nur CPU
  --no-sandbox                                keine Sandbox verwenden (nur bei root notwendig / testen ob es verlangt)
  --no-sandbox                                keine Sandbox verwenden (nur bei root notwendig / testen ob es verlangt)
  --no-system-proxy-config-service            einen eventuell konfigurieren Porxy nicht verwenden
  --no-system-proxy-config-service            einen eventuell konfigurieren Prory nicht verwenden
  --ignore-certificate-errors                Zertifikatsprüfungen deaktivieren (Warnung kommt trotzdem)
  --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
  --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
  --run-all-compositor-stages-before-draw    in Verbindung mit vorherigen Eintrag notwendig
  "https://10.252.101.25/sysinfo/"           URL die Aufgerufen werden soll
  "https://192.168.1.25/sysinfo/"             URL die Aufgerufen werden soll
<br>
<br>
----
----
==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:<br>
/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:<br>
/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==
==Links==
* https://developer.chrome.com/blog/headless-chrome/
* https://developer.chrome.com/blog/headless-chrome/

Aktuelle Version vom 20. Oktober 2022, 14:12 Uhr

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 />