GoaSkin Geschrieben 18. Juli 2012 Geschrieben 18. Juli 2012 Hallo, ich habe ein Gerät, bei dem man verschiedene Betriebsdaten auslesen kann, jedoch nicht über SNMP, sondern ein proprietäres Protokoll. Darum habe ich auf dem Zabbix-Server ein Item als External Control angelegt, was ein Skript ausführt, dass eine TCP-Verbindung zum Gerät aufbaut, die Antwort auswertet und einen numerischen Wert zurück liefert. Das klappt soweit auch. Das Problem ist aber, dass das Ziel-Gerät nicht immer im Netzwerk erreichbar ist. Schlägt der Verbindungsaufbau einmal fehl, liefert das Skript entsprechend keinen Wert zurück. Das zieht Zabbix als Fehler und setzt das ganze Item dann auf Unsupported mit dem Ergebnis, dass der ganze Wert dann nie wieder abgefragt wird. Kann mein Skript in diesem Falle etwas Spezielles zurück liefern, damit es Zabbix als legitim betrachtet, dass mal kein Wert zurück kommt oder anderweitig erreichen, dass das Item nicht auf Unsupported gesetzt wird? -1, NULL oder FALSE zurück liefern bringt nichts. Dann setzt Zabbix das Item auf Unsupported mit der Begründung, der Wert sei kein Unsigned Integer. Zitieren
smite Geschrieben 18. Juli 2012 Geschrieben 18. Juli 2012 Hallo, prinzipiell kannst du jede Software an deine Bedürfnisse anpassen. Ich kenne Zabbix nicht (weiß nur das es Open Source ist). Dadurch hast du schon einmal Zugriff auf den Quellcode. Es geht dir jedoch darum, dein Skript anzupassen. Wo hast du dieses denn her? Hast du den Quellcode für dieses Skript und in welcher Sprache ist es geschrieben? Gruß smite Zitieren
GoaSkin Geschrieben 18. Juli 2012 Autor Geschrieben 18. Juli 2012 Hallo, das Skript habe ich selbst geschrieben. Habe ich jetzt leider nicht hier, sondern auf der Arbeit. Im Prinzip öffnet es aber nur eine TCP-Verbindung, sendet ein paar Bytes und wandelt wiederum ein paar Bytes aus der Antwort in einen Integer um, den es am Ende ausgibt. Zabbix führt das Skript aus und bekommt eine Zahl. Solange es eine Rückgabe gibt, ist alles in Ordnung. Zabbix nimmt den Wert und verarbeitet ihn. Doch manchmal kommt die TCP-Verbindung nicht zustande (z.B. wenn das Ziel-Gerät aus ist) und dann gibt es keine Rückgabe. Das betrachtet Zabbix dann als Fehler und deaktiviert darauf hin die gesamte Wertabfrage, bis ich sie in der Konfig-Oberfläche wieder manuell aktiviere, was aber aus beschriebenem Grund nie von Dauer ist. Natürlich könnte ich den Zabbix-Quellcode so anpassen, dass die Wertabfrage nicht deaktiviert ist. Das möchte ich aber deshalb nicht, weil dies bei manchen anderen Abfragen durchaus seinen Sinn haben könnte. Als Ultima Ratio würde ich das Skript einfach den ausgelesenen Wert in eine Datei ablegen lassen und falls die TCP-Verbindung mal nichts her gibt, den Vorgängerwert ausgeben lassen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.