[Modul] PRTG - PRTG in IPS einbinden und IPS in PRTG überwachen

SDK Version 2.51 Version 6.2
License Check Style Run Tests
Spenden

Symcon-Modul: PRTG

Einbinden von PRTG Geräten und Sensoren in IPS.

Dokumentation

Inhaltsverzeichnis

1. Funktionsumfang

PRTG IO:

  • Schnittstelle zwischen den Device und Sensor Instanzen und PRTG.
  • Empfangen von Events aus PRTG.
  • Bereitstellen von IPS Systeminformation für einen PRTG-Sensor.
  • Abfragen von Graphen aus PRTG.

PRTG Konfigurator:

  • Auflisten alle in PRTG verfügbaren Geräte und Sensoren.
  • Erstellen von neuen Device und Sensor Instanzen in IPS.

PRTG Gerät:

  • Empfangen und darstellen des aktuellen Zustand.
  • Pausieren und Fortsetzen der Überwachung über die Frontends, Aktionen und PHP-Scripten.

PRTG Sensor:

  • Empfangen und darstellen des aktuellen Zustand.
  • Pausieren und Fortsetzen der Überwachung über die Frontends, Aktionen und PHP-Scripten.
  • Quittieren von Alarmmeldungen über die Frontends, Aktionen und PHP-Scripten.

2. Voraussetzungen

  • IP-Symcon ab Version 6.2
  • PRTG

3. Software-Installation

Über den ‚Module-Store‘ in IPS das Modul ‚PRTG‘ hinzufügen.
Bei kommerzieller Nutzung (z.B. als Errichter oder Integrator) wenden Sie sich bitte an den Autor.
Module-Store

Die Abfrage ob ein Konfigurator Modul angelegt werden soll, ist zu bestätigen. Es wird automatisch die Konfiguration für den benötigten IO abgefragt.

4. Einrichten der Instanzen in IP-Symcon

Details sind in der Dokumentation der jeweiligen Module beschrieben.

In der Dokumentation des PRTG IO wird im Anhang erläutert wie eine Überwachung von IPS aus PRTG erfolgen kann.
Ebenso wird dort das Empfangen von Statusänderungen eines Sensors in IPS erläutert, damit IPS den Zustand zeitnah darstellen kann.

Es wird dingend empfohlen somit zuerst den PRTG IO zu erstellen und fertig zu konfigurieren, sowie in PRTG alle gewünschten Einstellungen vorzunehmen, bevor weitere Instanzen in IPS über den PRTG Konfigurator angelegt werden.

5. Anhang

1. GUID der Module

Modul Typ Prefix GUID
PRTG IO I/O PRTG {67470842-FB5E-485B-92A2-4401E371E6FC}
PRTG Configurator Configurator PRTG {32B8B831-91B2-44B5-9B66-9F1685647216}
PRTG Device Device PRTG {95C47F84-8DF2-4370-90BD-3ED34C65ED7B}
PRTG Sensor Device PRTG {A37FD212-2E5B-4B65-83F2-956CB5BBB2FA}

2. Hinweise

Der im PRTG IO verwendete Benutzer sollte in PRTG Administrative Rechte bekommen, um die Überwachung zu steuern und Alarme quittieren zu können.
Die Kommunikation zwischen IPS und PRTG kann sowohl per HTTP als auch per HTTPS (SSL/TLS) erfolgen.
Hierzu ist PRTG und die URL im PRTG IO entsprechend zu anzupassen. Unverschlüsselte Übertragung sollte niemals zur Kommunikation mit einem externen PRTG-Server genutzt werden, da die Login-Informationen dann nicht verschlüsselt übertragen werden!

3. Changelog

siehe nächster Beitrag

4. Spenden

Die Library ist für die nicht kommerzielle Nutzung kostenlos, Schenkungen als Unterstützung für den Autor werden hier akzeptiert:

PayPal:

Wunschliste:
Wunschliste

6. Lizenz

IPS-Modul:
CC BY-NC-SA 4.0

Changelog

Version 2.51:

  • Sensor und Device Intervall konnte beim starten von Symcon falsch sein.

Version 2.50:

  • Wurde ein Sensor pausiert, so wurden alle Statusvariablen neu als String angelegt und die alten somit gelöscht.
  • Aktionen hinzugefügt.
  • Dynamische Konfigurationsformulare und somit einfacher zu konfigurieren.
  • IO zeigt den Event Webhook für PRTG an.
  • Event Webhook mit verbesserten NAT Support.
  • Event Webhook unterstützt abweichenden Port (z.B. für NAT).

Version 2.30:

  • Werte für Mbit/sek. und kbit/sek. waren um den Faktor 10 zu groß.

Version 2.20:

  • Fehler im IPS-Sensor behoben, wenn PRTG ‚Keine Daten‘ als Nutzdaten übertragen hat.

Version 2.10:

  • Fehler im IPS-Sensor behoben, wenn Laufwerke keine Bezeichnung hatten
  • Fehler im IPS-Sensor behoben, wenn Pagefile genutzt wird

Version 2.00:

  • Release für IPS 5.1 und den Module-Store

Version 1.36:

  • Location Feld in create verschoben

Version 1.35:

  • Fehler im Konfigurator, wenn die Kategorie in der Kategorieauswahl nicht auf oberster Ebene war.
  • Fehlende Übersetzung ergänzt.
  • Konfigurator meldet wenn IO nicht aktiv ist.

Version 1.31:

  • Darstellungsfehler im Konfigurator beseitigt
  • Formen nutzen jetzt NumberSpinner mit Suffix anstatt IntervalBox

Version 1.30:

  • Fehlerbehandlung Datenaustausch überarbeitet
  • Konfigurator erstellt Instanz unterhalb von Kategorien mit dem Namen des jeweiligen Gerätes

Version 1.20:

  • Sensordaten eines SSL-Zertifikatssensor verursachten Fehler

Version 1.10:

  • SSL Checks sind desaktivierbar
  • Sensorwerte mit Laufzeit Tage verursachten Fehler

Version 1.0:

  • Erstes offizielles Release

Hinweis zu den Profilen

Sollten Profile bei den Sensoren fehlen, so bitte eine kurze Info mit Auszug aus dem Reiter Debug wo man die gelieferten Daten des Sensors erkennen kann.
Ich kann diese Profile dann ergänzen.
Michael

Hallo
Danke fuer das Super Modul. Hab bis jetzt PRTG ueber Syslog in IPS.
Die ersten Test laufen einwandfrei. Hab einen Sensor und ein Device einzeln
erstellt.

Hier meine Problem bisher:
Konnte keine Verbindung zum PRTG-Server aufbauen weil ich ueber HTTPS ging.
Hab dann umgestellt auf HTTP , damit ist OK.
Im Konfigurator funktioniert das einzelne Erstellen aber „Alle Erstellen“ funktioniert
bei mir nur mit Fehler.

Error: Error: Uncaught TypeError: Argument 1 passed to PRTGSensor::ConvertRuntime() must be of the type integer, float given, called in C:\Program Files (x86)\IP-SYMCON\modules\IPSPRTG\libs\VariableHelper.php on line 66 and defined in C:\Program Files (x86)\IP-SYMCON\modules\IPSPRTG\libs\VariableHelper.php:6

Einfach zu viele Sensoren. Knapp 100 ?
Und alle werden direkt im Tree angelegt. Das krieg ich nie sortiert :wink:
Sollten man die Sensoren unter die Devices erstellen ?

Bitte :slight_smile:

Https setzt ein gültiges Zertifikat vorraus und somit auch den Host-Namen aus dem Zertifikat.
Eventuell werden selbst-signierte per default abgelehnt. Dies kann ich aber noch ergänzen bzw. als Option mit in den IO einbauen.
Bei mir steht im Zertifikat nur der Name, darum funktioniert z.B. https://<ip> nicht, aber https://<hostname>

An zu viel wird es nicht liegen, eher weil ein Sensor einen komischen Wert als Typ ‚Laufzeit‘ liefert.
Den Fehler hatte ich einmal gesehen, aber nie nachstellen können.
Wenn du den betreffenden Sensor gefunden hast, hätte ich gerne einen Auszug vom Debug der Instanz :slight_smile:

Geht nicht. Der Konfigurator ist IPS intern und erstellt immer alles im root (wie alle IPS Konfiguratoren).
Aber anhand der Info-Spalte solltest du es zuordnen können.
Dort steht bei einem Sensor das dazugehörige Device.
Bei einem Device die Gruppe in welcher das Device in PRTG einsortiert wurde.

Edit:
Ich habe bei ConvertRuntime erstmal den Typ rausgenommen. Damit sollte der Fehler weg sein.
Aber ob die Werte stimmen, kann ich nicht prüfen von unterwegs.
Eigentlich sollen Werte in Tagen als ganzzahlige Sekunden übertragen werden :smiley:
Michael

Das krieg ich mit einem Script hin .
Den Boeswicht mit Runtime krieg ich heute abend bestimmt raus.

Gesendet von iPad mit Tapatalk

Dann aber kein Update machen :slight_smile:
Sonst tritt der Fehler nicht mehr auf.

Michael

So hab jetzt muehselig von unterwegs mit dem iPad den Boesewicht gefunden.
Die Variable ins Log geschrieben und den ganzen $Valuewert.
Es kommt ein 3,63071e+06 in der Variablen an ( lastvalue_raw ).
Hier das Log :

 22.05.2018 16:15:29 | 00000 | CUSTOM  | VariableHelper.php   | 3,63071e+06
22.05.2018 16:15:29 | 00000 | CUSTOM  | PHP                  | Error: Error: Uncaught TypeError: Argument 1 passed to PRTGSensor::ConvertRuntime() must be of the type integer, float given, called in C:\Program Files (x86)\IP-SYMCON\modules\IPSPRTG\libs\VariableHelper.php on line 68 and defined in C:\Program Files (x86)\IP-SYMCON\modules\IPSPRTG\libs\VariableHelper.php:6
Stack trace:
#0 C:\Program Files (x86)\IP-SYMCON\modules\IPSPRTG\libs\VariableHelper.php(68): PRTGSensor->ConvertRuntime(3630712)
#1 C:\Program Files (x86)\IP-SYMCON\modules\IPSPRTG\PRTGSensor\module.php(250): PRTGSensor->ConvertValue(Array)
#2 C:\Program Files (x86)\IP-SYMCON\modules\IPSPRTG\PRTGSensor\module.php(230): PRTGSensor->DecodeChannelData(Array)
#3 C:\Program Files (x86)\IP-SYMCON\modules\IPSPRTG\PRTGSensor\module.php(168): PRTGSensor->RequestChannelState()
#4 C:\Program Files (x86)\IP-SYMCON\scripts\__generated.inc.php(551): PRTGSensor->RequestState()
#5 C:\Windows\System32\-(1): PRTG_RequestState(46363)
#6 {main}
  thrown
   Error in Script C:\Program Files (x86)\IP-SYMCON\modules\IPSPRTG\libs\VariableHelper.php on Line 6
  134 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)
   33 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
  121 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_PhpErrorHandler)
      in IPSLogger_PhpFatalErrorHandler
22.05.2018 16:15:29 | 46363 | ERROR   | TimerPool            | Serverzustand (RequestState): array(5) {
  ["objid"]=>
  int(10)
  ["objid_raw"]=>
  int(10)
  ["lastvalue"]=>
  string(6) "42 Tg."
  ["lastvalue_raw"]=>
  float(3630712)
  ["name"]=>
  string(17) "Alter der Version"
}

Gesendet von iPad mit Tapatalk

Komisch das es ein Float ist.
Steht der Wert auch im Debug der Instanz?
Serverzustand des Server habe ich auch, prüfe ich bei mir mal gegen :slight_smile:
Michael

Im Debug der Instanz steht der Wert 3634072 etc …

Gesendet von iPad mit Tapatalk

Hab einfach mal ein intval() in das Modul eingebaut und
Jetzt ist Ruhe im Meldungsfenster und in der Instanz steht
Auch der richtige Wert fuer „Alter der Version“.

Gesendet von iPad mit Tapatalk

Oh man… wie blöd von mir :banghead:

Ich hatte letzten noch einen Fehler, das gelegentliche Float Werte als integer erkannt wurden.
Immer wenn sie zufällig keine Nachkommastellen enthalten haben, trat dabei ein Fehler auf.
Daraufhin hatte ich float als default genommen und dann überall, außer natürlich bei der ConverTime-Methode, in den richtigen Typ konvertiert. :banghead:

Fix für SSL habe ich auch fertig. Übersetzung fehlt noch und dann ist das ca in einer Stunde online :slight_smile:

Michael

Danke. Immer gerne die Zusammenarbeit um Fehler zu finden.

Gesendet von iPad mit Tapatalk

Hallo
Hab noch einen Boesewicht gefunden.
Hab einen Sensor (SSL-Zertifikatssensor (Port 443) ) . Der liefert einen Integerwert
anstatt eines Strings. Tage bis Ablauf Zertifikat .
Dadurch gibt es in VariableHelper.php einen Fehler Zeile 32

        if (strpos($Value['lastvalue'], ' ') === false) {

.
Hab davor mal folgendes eingefuegt.

$Value['lastvalue'] = (string)$Value['lastvalue'];

MfG

Danke für den Fund.
Den Sensor hatte ich noch gar nicht eingerichtet :smiley:
Toll dass hier jetzt die Einheit Tage (Tg.) in dem Datensatz fehlt :banghead:
Ich hatte mich früher in meinen Scripten schon immer mit den konvertieren der Werte und erkennen der Profile ausgetobt und gedacht ich habe es jetzt ‚einigermaßen‘ elegant gelöst. Da haut ein neuer Sensor keine Einheit raus, und es paßt schon wieder nicht. Tolle API :frowning:
Zumal dieser Sensor bei Ja/Nein Werten immer lastvalue_raw 0 ausgibt. :rolleyes:

Ich stelle gleich ein Update online.

Michael

Tolles Modul. Vielen Dank dafür!

Grüße
galleto

Das überfordert mich leider. Die $InstanzID ist wohl eine aus IPS, vermutlich die des Devices? Die $SensorId ist dann welche? Hab bissl probiert (PRTG und IPS), aber laufe immer in eine Fehlermeldung.

Am besten wäre ein kleines Beispiel. :smiley:

Dank und grüße
galleto

Dieser Befehl steht in der Doku vom PRTG-IO.
Somit ist die InstanceID die vom PRTG-IO.
Die SensorID ist die aus PRTG.
Entweder in der Konsole von PRTG selbst zu finden, oder im PRTG-Konfigurator in IPS oder auch in den Sensor-Instanzen in IPS.

Michael

Läuft, danke! :slight_smile:

Grüße
galleto

Nach einem kleinen Umwegmuss ich hier nochmal nachfragen.

Offensichtlich mache ich etwas falsch, das hier funktioniert nicht:

$graph = PRTG_GetGraph(31565 /*[PRTG I/O]*/, 1, 2140, 1, 400, 300, 0, 10, true);
IPS_SetMediaContent(22703 /*[2_Program\System\PRTG\Internet\Ping\Graph]*/, $graph);

Ich habe das Mediaobjekt vorher manuell mit einem PNG-Bild angelegt. Das Skript oben führt dann zu diesem Ergebnis (wenn ich das Mediaobjekt in der Konsole öffnen will):
fehler2.jpg

Im Webfront wird verständlicherweise auch nichts angezeigt.

:confused:

Grüße
galleto