Zabbix - erweidert Makro Grenzen

Wann Dir eng Léisung fir e Client gemaach hutt, sinn 2 Aufgaben entstanen, déi ech schéin a mat regulärer Zabbix Funktionalitéit wollt léisen.

1 Challenge. Tracking déi aktuell Firmware Versioun op Mikrotik Router.

D'Aufgab ass einfach geléist - andeems en Agent un d'HTTP Schabloun bäigefüügt gëtt. Den Agent kritt déi aktuell Versioun vun der Mikrotik Websäit, an den Ausléiser vergläicht déi aktuell Versioun mat der aktueller a gëtt eng Alarm am Fall vun enger Diskrepanz.

Wann Dir 10 Router hutt, ass sou en Algorithmus net kritesch, awer wat maache mat 3000 Router? Schéckt 3000 Ufroen un de Server? Natierlech wäert esou e Schema funktionnéieren, awer déi ganz Iddi vun 3000 Ufroen huet mir net gepasst, ech wollt eng aner Léisung fannen. Ausserdeem war et nach ëmmer en Nodeel an esou engem Algorithmus: déi aner Säit kann esou eng Zuel vun Ufroe vun enger IP fir en DoS Attack zielen, si kënnen et einfach verbidden.

2 Challenge. Benotzt eng Autorisatiounssession a verschiddene HTTP Agenten.

Wann en Agent Informatioun vun "zougemaache" Säiten iwwer HTTP muss kréien, ass en Autorisatiouns-Cookie gebraucht. Fir dëst ze maachen, gëtt et normalerweis e Standard Autorisatiounsform mat engem "Login / Passwuert" Pair an d'Sessiouns-ID am Cookie setzen.

Awer et gëtt e Problem, et ass onméiglech Zougang zu den Donnéeën vun engem aneren Element vun engem HTTP Agent Element ze kréien fir dëse Wäert am Header z'ersetzen.

Et gëtt och e "Web Skript", et huet eng aner Begrenzung, et erlaabt Iech net Inhalt fir Analyse a weider Spueren ze kréien. Dir kënnt nëmmen d'Präsenz vun den néidege Variablen op de Säiten iwwerpréiwen oder virdru kritt Variablen tëscht Webskript Schrëtt passéieren.

Nodeems ech e bëssen iwwer dës Aufgaben geduecht hunn, hunn ech beschloss Makroen ze benotzen déi perfekt sichtbar sinn an all Deel vum Iwwerwaachungssystem: an Templates, Hosten, Trigger oder Elementer. An Dir kënnt Macroen iwwer d'Webinterface API aktualiséieren.

Zabbix huet gutt an detailléiert API Dokumentatioun. Fir Datenaustausch iwwer API gëtt de Json Dateformat benotzt. Detailer fannt Dir an offiziell Dokumentatioun.

D'Sequenz vun Aktiounen fir d'Donnéeën ze kréien déi mir brauchen an se an engem Makro opzehuelen ass am Diagramm hei ënnen gewisen.

Zabbix - erweidert Makro Grenzen

Schrëtt 1

Deen éischte Schrëtt kann aus enger eenzeger Aktioun oder méi Aktiounen besteet. All d'Haaptlogik ass an den éischte Schrëtt geluecht, an déi lescht 3 Schrëtt sinn d'Haapt.

A mengem Beispill war den éischte Schrëtt Autorisatiouns-Cookien op der PBX fir déi éischt Aufgab ze kréien. Fir déi zweet Aufgab krut ech d'Zuel vun der aktueller Versioun vun der Mikrotik Firmware.

URL vun aktuell Versioune vun Mikrotik Firmware

Dës Adresse gi vun der Mikrotik Ausrüstung selwer zougänglech wann déi lescht verfügbar Firmware Versioun kritt gëtt.

Den éischte Schrëtt ass komplett individuell fir all Fall an d'Logik vu senger Aarbecht kann anescht sinn. Et hänkt alles vun Ärer Aufgab of.

Wann Dir mat Web Scripting schafft, verfollegt wéi eng Äntwertmethod Dir braucht. Titelen HTTP Äntwert oder selwer тело Äntwert ouni Header?
Wann Autorisatiouns-Cookien gebraucht ginn, stellt dann d'Äntwertmethod fest Titelen wéi am Fall vun Asterisk.

Wann Dir braucht Daten, wéi am Fall vun der mikrotik Server Äntwert, setzen Den Kierper Äntwert ouni Header.

Schrëtt 2

Loosst eis op den zweete Schrëtt weidergoen. Eng Autorisatiounssession kréien:

POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc

{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin"
        "password": "zabbix"
    },
    "id": 1,
    "auth": null
}

jsonrpc ass d'Versioun vum JSON-RPC Protokoll deen benotzt gëtt;
Zabbix implementéiert JSON-RPC Versioun 2.0;

  • Method - d'Method déi genannt gëtt;
  • params - Parameteren déi vun der Method passéiert ginn;
  • ID ass en arbiträr Ufro Identifizéierer;
  • auth - Benotzer Authentifikatioun Schlëssel; well mer et nach net hunn, loosse mer et op null setzen.

Fir mat der API ze schaffen, hunn ech e separaten Kont mat limitéierten Rechter erstallt. Als éischt musst Dir keen Zougang ginn op wou Dir net braucht. An zweetens, virun der Versioun 5.0, konnt d'Passwuert duerch de Macro gelies ginn. Deementspriechend, wann Dir den Zabbix Administrator Passwuert benotzt, ass den Admin Kont einfach ze klauen.

Dëst wäert besonnesch wouer sinn wann Dir mat API duerch Drëtt Partei Scripten schafft an Umeldungsinformatiounen op der Säit späichert.

Zënter Versioun 5.0 gëtt et eng Optioun fir d'Passwuert am Makro gespäichert ze verstoppen.

Zabbix - erweidert Makro Grenzen

Wann Dir e separaten Kont erstellt fir Daten iwwer d'API ze aktualiséieren, gitt sécher ze kontrolléieren ob d'Donnéeën déi Dir braucht iwwer d'Webinterface verfügbar sinn an ob et méiglech ass se ze aktualiséieren. Ech hunn net iwwerpréift, an dunn fir eng laang Zäit konnt ech net verstoen firwat de Makro deen ech brauch net an der API ze gesinn ass.

Zabbix - erweidert Makro Grenzen

Nodeems mir Autorisatioun an der API kritt hunn, gi mir weider fir eng Lëscht vu Makroen ze kréien.

Schrëtt 3

D'API erlaabt Iech net e Host Makro mam Numm ze aktualiséieren, Dir musst als éischt d'Macro ID kréien. Ausserdeem, fir eng Lëscht vu Makroen fir e spezifesche Host ze kréien, musst Dir d'ID vun dësem Host kennen, an dëst ass eng extra Ufro. Benotzt Standard Makro {HOST ID} an der Demande ass net erlaabt. Ech hu beschloss d'Restriktioun esou ze ëmgoen:

Zabbix - erweidert Makro Grenzen

Ech hunn e lokale Makro mat der ID vun dësem Host erstallt. D'Host ID erauszefannen ass ganz einfach vun der Webinterface.

Eng Äntwert mat enger Lëscht vun alle Makroen op engem bestëmmte Host kann duerch e Muster gefiltert ginn:

regex:{"hostmacroid":"([0-9]+)"[A-z0-9,":]+"{$MIKROTIK_VERSION}"

Zabbix - erweidert Makro Grenzen

Sou, mir kréien d'ID vun der Macro mir brauchen, wou MIKROTIK_VERSION ass den Numm vum Macro dee mir sichen. A mengem Fall gëtt de Makro gesicht MIKROTIK_VERSIONDee gouf dem Host zougewisen.

D'Ufro selwer gesäit esou aus:

POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc

{
    "jsonrpc":"2.0",
    "method":"usermacro.get",
    "params":{
        "output":"extend",
        "hostids":"{$HOST_ID}"
    },
    "auth":"{sid}",
    "id":1
}

Variabel {sid} am zweete Schrëtt kritt a wäert dauernd benotzt ginn, wou Dir mat der API Interface ze schaffen muss.

Finale 4 SCHRËTT - Aktualiséierung vum Makro

Elo wësse mer d'Macro ID déi aktualiséiert muss ginn, den Autorisatiouns Cookie oder d'Firmware Versioun vum Router. Dir kënnt de Macro selwer aktualiséieren.

POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc

{
    "jsonrpc":"2.0",
    "method":"usermacro.update",
    "params":{
        "hostmacroid":"{hostmacroid}",
        "value":"{mikrotik_version}"
    },
    "auth":"{sid}",
    "id":1
}

{mikrotik_version} ass de Wäert am éischte Schrëtt kritt. A mengem Beispill, d'Versioun vun der aktueller Mikrotik Firmware
{hostmacroid} - de Wäert gouf am drëtte Schrëtt kritt - d'ID vum Makro dee mir aktualiséieren.

Conclusiounen

D'Approche fir de Problem mat der Standardfunktionalitéit ze léisen ass vill méi komplizéiert a méi laang. Besonnesch wann Dir programméiere kennt a séier déi néideg Logik am Skript derbäi kënnt.

De offensichtleche Virdeel vun dëser Approche ass d'"Portabilitéit" vun der Léisung tëscht verschiddene Serveren.

Fir mech perséinlech ass et komesch datt den HTTP Agent net op d'Donnéeën vun engem aneren Artikel zougräifen an se am Ufro Kierper oder Header ersetzen [ ZBXNEXT-5993].

Déi fäerdeg Schabloun kann download op GitHub.

Source: will.com

Setzt e Commentaire