Ich habe einen einfachen Mechanismus zum Überwachen von RSS-Updates mit Zabbix entwickelt. Weil es nicht allein durch die Funktion von Zabbix implementiert werden kann. Ich habe es mit der externen Prüfung von Zabbix implementiert. Es wäre schön gewesen, das RSS als Text auszugeben und den Unterschied zum vorherigen Mal zu erhalten, aber wenn der Zabbix-Server ausfällt und auf einem anderen Server ausgeführt wird, wird die Prüfdatei verschoben. Ich habe mich für einen externen Check entschieden, weil es ein Ärger war und ich ihn definitiv vergessen würde.
--CentOS 8.0 (Zugang zum Internet)
In Python wurde der Vorgang ausgeführt, bei dem das RSS über das Internet abgerufen, der Titel und das Aktualisierungsdatum abgerufen und in eine Zeile geschrieben wurden. Die Ausgabe ist Text, sodass sie schließlich an Zabbix übertragen wird. (Wenn Sie API verwenden, können Sie möglicherweise im JSON-Format arbeiten, aber diesmal habe ich es nicht getan.) Da ich keine doppelten Daten an Zabbix senden möchte, habe ich außerdem eine Methode gewählt, um die Daten von Artikeln zu erfassen, die während der vorherigen Erfassungszeit aktualisiert wurden, anstatt alle Fälle zu erfassen.
In Bezug auf die Ausgabe speichert die externe Prüfung von Zabbix das Ergebnis der Standardausgabe im Artikel, sodass die Ausgabe per Druck erfolgt.
Der Code ist unten.
RSS_Checker.py
#!/bin/env python3
import feedparser
from datetime import datetime, timedelta, timezone
#Stellen Sie die vorherige Periode ein(Geben Sie diesmal die Zeit vor einer Stunde an)
lasttime = (datetime.utcnow() - timedelta(hours=1))
#Holen Sie sich RSS
RSS_URL = "(Geben Sie die URL an)"
feed = feedparser.parse(RSS_URL)
#Aktualisieren Sie Artikel seit dem letzten Mal
def f(entry):
return datetime(*entry.updated_parsed[:6]) >= lasttime
#Wählen Sie Daten mit der Filterfunktion aus
rdflists = filter(f, feed.entries)
#Wenn es nichts gibt, endet der Prozess
if not rdflists:
sys.exit()
#Ausgabe bei Daten
for entry in rdflists:
title = entry.title
link = entry.link
time = entry.updated
print (title, link, time)
Wenn Sie die externe Überprüfungsfunktion von Zabbix verwenden möchten, müssen Sie die Skriptdatei im Pfad von ExternalScripts in zabbix_server.conf ablegen. Die folgenden Ordner sind standardmäßig angegeben.
ExternalScripts=/usr/lib/zabbix/externalscripts
Vergessen Sie auch nicht, Ausführungsberechtigungen und Eigentümereinstellungen festzulegen, damit Zabbix-Benutzer sie ausführen können.
# cd /usr/lib/zabbix/externalscripts
# chmod 744 RSS_Checker.py
# chown zabbix:zabbix RSS_Checker.py
# ls -l
-rwxr--r-- 1 zabbix zabbix 1200 Jan 01 01:23 RSS_Checker.py
Zabbix erstellt einen eigenen Gegenstand.
Wählen Sie als Typ "Externe Prüfung". Als Datentyp wird Text ausgewählt. Da die Hostschnittstelle auf dem Zabbix-Server ausgeführt wird, geben Sie "127.0.0.1:10051" an. Das Überwachungsintervall muss an die im Code angegebene Differenzzeit angepasst werden, sodass es entsprechend geändert werden muss. Lange Codeintervalle können zu doppelter Datenspeicherung führen, und lange Intervalle zur Artikelüberwachung können zu fehlenden Erfassungen führen.
Bei dieser Konfiguration hat das Zabbix-Element die Daten gespeichert, es gab jedoch zwei Probleme.
Es gibt kein besonderes Problem, wenn Sie eine Zeichenkette mit Trigger aufnehmen und benachrichtigen, aber sie ist nicht schön. Ich habe einige Nachforschungen angestellt und es gesehen, aber ich konnte nichts über das Verhalten der Textspeicherung des externen Schecks herausfinden. Das gleiche Ergebnis wurde erhalten, wenn der Datentyp des Elements "log" oder "Zeichenfolge" war.
Ich konnte keine Lösung für dieses Problem finden, aber ich konnte es integrieren, also beschloss ich, es zu vervollständigen.
Hmmm, aber immer noch nicht schön. ..
(Fortsetzen)
Recommended Posts