J'ai créé un mécanisme simple pour surveiller les mises à jour RSS avec Zabbix. Parce qu'il ne peut pas être implémenté par la fonction de Zabbix seule. Je l'ai implémenté en utilisant le contrôle externe de Zabbix. Cela aurait été bien de sortir le RSS en texte et d'obtenir la différence par rapport à la fois précédente, mais lorsque le serveur Zabbix échoue et qu'il démarre sur un autre serveur, le fichier de contrôle est déplacé. J'ai choisi une vérification externe parce que c'était un problème et je l'oublierais certainement.
--Comment initialiser Python
En Python, le processus d'obtention du RSS via Internet, d'obtention du titre et de la date de mise à jour et de l'écriture sur une seule ligne a été effectué. La sortie est du texte afin qu'elle soit éventuellement transférée vers Zabbix. (Si vous utilisez l'API, vous pourrez peut-être utiliser le format JSON, mais je ne l'ai pas fait cette fois.) De plus, comme je ne souhaite pas envoyer de doublons à Zabbix, j'ai décidé d'acquérir les données des articles mis à jour lors de l'acquisition précédente au lieu d'acquérir tous les cas.
En ce qui concerne la sortie, la vérification externe de Zabbix stocke le résultat de la sortie standard dans l'élément, donc la sortie se fait par impression.
Le code est ci-dessous.
RSS_Checker.py
#!/bin/env python3
import feedparser
from datetime import datetime, timedelta, timezone
#Définir la période précédente(Cette fois, spécifiez l'heure il y a une heure)
lasttime = (datetime.utcnow() - timedelta(hours=1))
#Obtenez RSS
RSS_URL = "(Spécifiez l'URL)"
feed = feedparser.parse(RSS_URL)
#Obtenez des articles mis à jour depuis la dernière fois
def f(entry):
return datetime(*entry.updated_parsed[:6]) >= lasttime
#Sélectionnez les données à l'aide de la fonction de filtrage
rdflists = filter(f, feed.entries)
#Quand il n'y a rien, le processus se termine
if not rdflists:
sys.exit()
#Sortie lorsqu'il y a des données
for entry in rdflists:
title = entry.title
link = entry.link
time = entry.updated
print (title, link, time)
Si vous souhaitez utiliser la fonction de vérification externe de Zabbix, vous devez placer le fichier de script dans le chemin de ExternalScripts dans zabbix_server.conf. Les dossiers suivants sont spécifiés par défaut.
ExternalScripts=/usr/lib/zabbix/externalscripts
N'oubliez pas non plus de définir les autorisations d'exécution et les paramètres du propriétaire afin que les utilisateurs de Zabbix puissent s'exécuter.
# 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 crée son propre élément.
Sélectionnez "Contrôle externe" comme type. Le texte est sélectionné comme type de données. Puisque l'interface hôte s'exécute sur le serveur Zabbix, spécifiez "127.0.0.1:10051". L'intervalle de surveillance doit être ajusté au temps de différence spécifié dans le code, il doit donc être modifié le cas échéant. De longs intervalles de code peuvent entraîner un stockage de données en double, et de longs intervalles de surveillance des éléments peuvent conduire à des acquisitions manquées.
Avec cette configuration, l'élément Zabbix stockait les données, mais il y avait deux problèmes.
Il n'y a pas de problème particulier lors de la prise d'une chaîne de caractères avec Trigger et de sa notification, mais ce n'est pas beau. J'ai fait des recherches et je l'ai vu, mais je n'ai pas pu découvrir le comportement du stockage de texte du chèque externe. Le même résultat a été obtenu lorsque le type de données de l'élément était «journal» ou «chaîne de caractères».
Je n'ai pas trouvé de solution à ce problème, mais j'ai pu l'intégrer, j'ai donc décidé de le compléter.
Hmmm, mais toujours pas beau. ..
(Continuer)
Recommended Posts