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 .
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.

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
- - URL Adress vun der aktueller stabiler Versioun
- - URL Adress vun der aktueller LTS Versioun
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.

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.

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:

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}" 
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 [ ].
Déi fÀerdeg Schabloun kann .
Source: will.com
