Zabbix konfiguriert DingTalks Alarmfunktion mit Bildern

Zabbix konfiguriert DingTalks Alarmfunktion mit Bildern

Umsetzungsideen:

Zunächst müssen die Alarminformationen eine Item-ID haben, was eine Voraussetzung ist. Verwenden Sie gemäß den in den Informationen übergebenen Parametern eine reguläre Übereinstimmung mit der Item-ID, um eine Sitzung zu erstellen, oder verwenden Sie Cookies, um sich anzumelden. Fordern Sie Bilder gemäß der Item-ID an und speichern Sie die erhaltenen Bilder lokal. Da der Markdown-Bildlink zugänglich sein muss, befindet sich mein Zabbix im Intranet, sodass das Bild in das Bildbett oder auf einen Webserver mit einer öffentlichen Netzwerk-IP hochgeladen werden muss. Ich habe es hier auf meinen persönlichen Server hochgeladen. Konvertieren Sie die Alarminformationen in das Markdown-Syntaxformat, um eine Anforderung zu erstellen. Verwenden Sie den Webhook von DingTalk, um Nachrichten zu senden und DingTalk-Roboter einzurichten

Der DingTalk-Roboter muss aus Sicherheitsgründen eingerichtet werden. Hier definiere ich das Schlüsselwort „Benachrichtigung“, was bedeutet, dass die gesendete Nachricht dieses Schlüsselwort enthalten muss.

Skriptimplementierung: Da das Image vom lokalen auf den Remote-Server kopiert werden muss, muss die kennwortfreie Konfiguration im Voraus durchgeführt werden. Das Skript wird vom Zabbix-Benutzer ausgeführt. Am besten legen Sie die Sicherheitsrichtlinie des Webserververzeichnisses fest.

#!/usr/bin/python
# -*- Kodierung: utf-8 -*-
Importanforderungen, Zeit
importiere json, sys, re, os

zabbixserver_url = "http://192.168.99.200/index.php"
#Definieren Sie die Adresse des Remote-Webservers und kopieren Sie das Bild in das Remote-Webverzeichnis pname_path='http://47.103.15.51/dingding_pic/'
#Definieren Sie die erhaltene Bildadresse testUrl = "http://192.168.99.200/chart.php"
Host = '192.168.99.200'
def get_itemid():
  itemid=re.search(r'ARTIKEL-ID:(\d+)',sys.argv[2]).group(1)
  Artikel-ID zurückgeben
def get_picture(Artikel-ID, P-Name):
  #Erstellen Sie eine Sitzung, oder Sie können sie einmalig erstellen und dann Cookies zum Anmelden verwenden myRequests = requests.Session()
  versuchen:
    loginHeaders = {
      "Gastgeber": Gastgeber,      
      "Akzeptieren":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" 
    }
    # Erstellen Sie die für die Anmeldung benötigten Informationen playLoad = {
      "Name": "Administrator",
      "Passwort": "zabbix",
      "autologin": "1",
      "enter": "Anmelden",
    }
    meineAnfragen.post(URL=Zabbixserver-URL, Header=Login-Header, Daten=PlayLoad)
    testUrlplayLoad = {
      "von": "jetzt-10m",
      "zu": "jetzt",
      "itemids": Artikel-ID,
      "Breite": "700",
    }
    testGraph = meineRequests.get(url=testUrl,params=testUrlplayLoad)
    IMAGEPATH = os.path.join('/usr/lib/zabbix/alertscripts/dingding_pic/', pname)
    #Schreiben Sie die aufgenommenen Bilddaten in eine Datei mit open(IMAGEPATH,'wb') als f:
      f.write(testGraph.content)
    os.system("sudo scp %s [email protected]:/usr/share/nginx/html/dingding_pic" %IMAGEPATH) 
    pname_url = pname_pfad+pname
    Rückgabewert für PName_URL
  außer Ausnahme als e:
    drucken(e)
    returniere False

#Erstellen Sie eine Anfrage zum Senden einer Nachricht def send_msg(pname_url,info3):
  Header = {'Inhaltstyp': 'application/json; Zeichensatz=utf-8'}
  drucken(info3)
  Daten = {
    "msgtype": "Abschlag",
    "Abschlag": {
      "Titel": info1,
      "Text": "## Hinweis:\n"+info3+"![Screenshot](%s)\n"%(pname_url)

    },
    "bei":{
      "atMobiles": Erinnerungen,
      "isAtAll": Falsch,
    },
    }
  r = Anfragen.Post(URL=Webhook-URL,JSON=Daten,Header=Header)
  drucken(r.text)
#Formatieren Sie die Alarminformationen def info_text():
  neuer_text = ""
  x = info2.split('\n')
  für i in x:
    wenn re.search('ARTIKEL-ID',str(i)):
      passieren
    anders:
      neuer_text+="- "+str(i)+('\n')
  drucken(Typ(neuer_Text)) 
  returniere neuen Text

wenn __name__ == '__main__':
  #Schreiben Sie die Alarminformationen in das Protokoll os.system("echo hello >> /tmp/syslog.md")  
  pname = str(int(Zeit.Zeit()))+'.png'
  info1 = str(sys.argv[1])
  info2 = str(sys.argv[2])
  info3 = info_text()

  mit open('/tmp/syslog.md','a') als f:
    f.schreiben(info1)
    f.write(info2)
    f.schließen()
  Erinnerungen = []
  webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=771ded387e6be652c51a2b6c83cade4e048e3da4fdfe128f1db6b124b87df18a'
  Artikel-ID = get_itemid()   
  pname_url=Bild_abrufen(Artikel-ID,pname)
  drucken(pname_url)
  send_msg(pname_url,info3)

Definieren Sie den Alarmmedientyp. Öffnen Sie das Zabbix-Überwachungsweb, wählen Sie im Menü „Verwaltung“ den Alarmmedientyp aus, erstellen Sie den Medientyp, wählen Sie „Skript“, geben Sie den Namen der E-Mail mit dem soeben geschriebenen Bildskript ein, zabbix_email_pic.py, Skriptparameter, und fügen Sie schließlich hinzu

Öffnen Sie den Benutzer in der Verwaltung, klicken Sie auf den Benutzer, für den Sie E-Mail-Benachrichtigungen einrichten möchten, fügen Sie dann das Alarmmedium im Alarmmedium hinzu, wählen Sie den soeben definierten Typ im Popup-Fenster aus, passen Sie den Empfänger an und fügen Sie schließlich hinzu

Definieren von Warnaktionen

Klicken Sie im Konfigurationsmenü auf die Aktion, legen Sie eine Aktion an und füllen Sie diese anschließend entsprechend der Abbildung aus.

Aktion Standardtitel Zabbix Hinweis: Server: {HOSTNAME} hat: {TRIGGER.NAME}-Fehler!
ARTIKEL-ID:{ARTIKEL.ID}
Alarm-Host: {HOST.NAME}
Alarmhost: {HOST.IP}
Weckzeit: {EVENT.DATE} {EVENT.TIME}
Alarmstufe: {TRIGGER.SEVERITY}
Warninformationen: {TRIGGER.NAME}
Alarmelement: {TRIGGER.KEY}
Fragedetails:{ITEM.NAME}:{ITEM.VALUE}
Aktueller Status: {TRIGGER.STATUS}: {ITEM.VALUE}
Ereignis-ID: {EVENT.ID}
Wiederherstellungsvorgang Zabbix hat Folgendes gemeldet: Server: {HOST.NAME} aufgetreten: {TRIGGER.NAME} wurde wiederhergestellt!
ARTIKEL-ID:{ARTIKEL.ID}
Alarm-Host: {HOST.NAME}
Alarmhost: {HOST.IP}
Weckzeit: {EVENT.DATE} {EVENT.TIME}
Alarmstufe: {TRIGGER.SEVERITY}
Warninformationen: {TRIGGER.NAME}
Alarmelement: {TRIGGER.KEY}
Fragedetails:{ITEM.NAME}:{ITEM.VALUE}
Aktueller Status: {TRIGGER.STATUS}: {ITEM.VALUE}
Ereignis-ID: {EVENT.ID} 



Endergebnis

Sie können manuell einen Alarm auslösen, um die Wirkung zu testen


Zu diesem Zeitpunkt wurden die WeChat-, E-Mail- und DingTalk-Alarme mit Bildern von Zabbix konfiguriert.

Zusammenfassen

Das Obige ist die Einführung des Herausgebers in die Zabbix-Konfiguration von DingTalk mit Bildalarmfunktion. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • Zabbix3.0 E-Mail-Alarmkonfiguration
  • So verwenden Sie ein Python-Skript zum Senden von Alarm-E-Mails in Zabbix
  • Zabbix implementiert WeChat-Alarmfunktion
  • Detaillierte Erläuterung der WeChat-Alarm-Zabbix-Implementierung
  • Methode zum Einrichten des Zabbix-E-Mail-Alarms

<<:  Detaillierte Erklärung zum Erstellen einer Datentabelle in MySQL und zum Herstellen von Primär- und Fremdschlüsselbeziehungen

>>:  Implementierung von webpack-dev-server zum Erstellen eines lokalen Servers

Artikel empfehlen

Detaillierte Erläuterung der Methode zum Vergleichen von Daten in MySQL

Wenn es eine Tabelle mit einem Feld „add_time“ gi...

So erstellen Sie Ihr eigenes Docker-Image und laden es auf Dockerhub hoch

1. Registrieren Sie zunächst Ihr eigenes Dockerhu...

So stellen Sie ein Vue-Projekt unter Nginx bereit

Heute werde ich den Server nginx verwenden und mu...

Tipps zur Optimierung von CSS-Schattenanimationen

Diese Technik stammt aus diesem Artikel - So anim...

MySQL Slow Query-Optimierung: Die Vorteile von Limit aus Theorie und Praxis

Oftmals erwarten wir, dass das Abfrageergebnis hö...

So steuern Sie den Anteil untergeordneter Flex-Elemente auf der Hauptachse

Hintergrund Durch das flexible Layout wird eine e...

Die 7 besten VSCode-Erweiterungen für Vue-Entwickler

Das Hinzufügen der richtigen VS Code-Erweiterung ...

Nützliche Codes zum Erstellen von Webseiten

<br />Wie kann ich die Bildlaufleiste auf de...

Eine kurze Einführung in MySQL InnoDB ReplicaSet

Inhaltsverzeichnis 01 Einführung in InnoDB Replic...

So veröffentlichen Sie statische Ressourcen in Nginx

Schritt Platzieren Sie die vorbereiteten statisch...