Zabbix - espansjoni tal-konfini makro

Meta għamilt soluzzjoni għal klijent, qamu 2 kompiti li ridt insolvi b'mod sabiħ u b'funzjonalità regolari ta 'Zabbix.

Kompitu 1 It-traċċar tal-verżjoni tal-firmware attwali fuq ir-routers Mikrotik.

Il-kompitu jiġi solvut faċilment - billi żżid aġent mal-mudell HTTP. L-aġent jirċievi l-verżjoni attwali mill-websajt Mikrotik, u l-grillu jqabbel il-verżjoni attwali ma 'dik attwali u joħroġ twissija f'każ ta' diskrepanza.

Meta jkollok 10 routers, algoritmu bħal dan mhuwiex kritiku, imma x'għandek tagħmel bi 3000 router? Ibgħat 3000 talba lis-server? Naturalment, skema bħal din se taħdem, iżda l-idea stess ta '3000 talba ma kinitx adattata, ridt insib soluzzjoni oħra. Barra minn hekk, kien għad hemm żvantaġġ f'tali algoritmu: in-naħa l-oħra tista 'tgħodd tali numru ta' talbiet minn IP wieħed għal attakk DoS, jistgħu sempliċement jipprojbixxuh.

Kompitu 2 L-użu ta' sessjoni ta' awtorizzazzjoni f'aġenti HTTP differenti.

Meta aġent jeħtieġ li jirċievi informazzjoni minn paġni "magħluqa" permezz ta' HTTP, hija meħtieġa cookie ta' awtorizzazzjoni. Biex tagħmel dan, ġeneralment ikun hemm formola ta 'awtorizzazzjoni standard b'par "login / password" u tissettja l-ID tas-sessjoni fil-cookie.

Iżda hemm problema, huwa impossibbli li taċċessa d-dejta ta 'oġġett ieħor minn oġġett wieħed ta' aġent HTTP biex jissostitwixxi dan il-valur fil-Header.

Hemm ukoll "Web script", għandha limitazzjoni oħra, ma tippermettix li tikseb kontenut għall-analiżi u aktar iffrankar. Tista 'tiċċekkja biss għall-preżenza tal-varjabbli meħtieġa fuq il-paġni jew tgħaddi varjabbli riċevuti qabel bejn passi tal-iskript tal-web.

Wara li ħsibt ftit dwar dawn il-kompiti, iddeċidejt li nuża macros li huma perfettament viżibbli fi kwalunkwe parti tas-sistema ta 'monitoraġġ: f'mudelli, hosts, triggers jew oġġetti. U tista 'taġġorna macros permezz tal-API tal-interface tal-web.

Zabbix għandu dokumentazzjoni API tajba u dettaljata. Għall-iskambju tad-dejta permezz tal-api, jintuża l-format tad-dejta Json. Id-dettalji jistgħu jinstabu fi dokumentazzjoni uffiċjali.

Is-sekwenza ta 'azzjonijiet biex niksbu d-dejta li neħtieġu u nirreġistrawha f'makro tidher fid-dijagramma hawn taħt.

Zabbix - espansjoni tal-konfini makro

Pass 1

L-ewwel pass jista' jikkonsisti f'azzjoni waħda jew f'azzjonijiet multipli. Il-loġika prinċipali kollha hija stabbilita fl-ewwel passi, u l-aħħar 3 passi huma dawk ewlenin.

Fl-eżempju tiegħi, l-ewwel pass kien li tikseb cookies ta 'awtorizzazzjoni fuq il-PBX għall-ewwel kompitu. Għat-tieni kompitu, sibt in-numru tal-verżjoni attwali tal-firmware Mikrotik.

URL tal-verżjonijiet attwali tal-firmware Mikrotik

Dawn l-indirizzi huma aċċessati mit-tagħmir Mikrotik innifsu meta tasal l-aħħar verżjoni tal-firmware disponibbli.

L-ewwel pass huwa kompletament individwali għal kull każ u l-loġika tax-xogħol tagħha tista 'tkun differenti. Kollox jiddependi fuq il-kompitu tiegħek.

Meta taħdem bl-iskripts tal-web, żomm kont ta' liema metodu ta' rispons għandek bżonn. Titoli Risposta HTTP jew awto тело rispons mingħajr headers?
Jekk il-cookies tal-awtorizzazzjoni huma meħtieġa, imbagħad issettja l-metodu tar-rispons Titoli bħal fil-każ ta’ Asterisk.

Jekk għandek bżonn dejta, bħal fil-każ tar-rispons tas-server mikrotik, poġġi Il-korp rispons mingħajr headers.

Pass 2

Ejja ngħaddu għat-tieni pass. Ksib ta' sessjoni ta' awtorizzazzjoni:

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 hija l-verżjoni tal-protokoll JSON-RPC li qed jintuża;
Zabbix jimplimenta JSON-RPC verżjoni 2.0;

  • metodu - il-metodu li jissejjaħ;
  • params - parametri li huma mgħoddija mill-metodu;
  • id huwa identifikatur ta' talba arbitrarju;
  • auth - ċavetta għall-awtentikazzjoni tal-utent; peress li għad m'għandniex, ejja nissettjawha null.

Biex naħdem mal-API, ħloqt kont separat bi drittijiet limitati. L-ewwelnett, m'għandekx bżonn tagħti aċċess fejn m'għandekx bżonn. U t-tieni, qabel il-verżjoni 5.0, il-password stabbilita permezz tal-makro setgħet tinqara. Għaldaqstant, jekk tuża l-password tal-amministratur Zabbix, il-kont tal-amministratur huwa faċli biex tisraq.

Dan se jkun veru speċjalment meta taħdem ma 'API permezz ta' skripts ta 'partijiet terzi u taħżen kredenzjali fuq il-ġenb.

Mill-verżjoni 5.0 hemm għażla biex taħbi l-password ssejvjata fil-makro.

Zabbix - espansjoni tal-konfini makro

Meta toħloq kont separat għall-aġġornament tad-dejta permezz tal-API, kun żgur li tivverifika jekk id-dejta li għandek bżonn hijiex disponibbli permezz tal-interface tal-web u jekk huwiex possibbli li taġġornaha. Ma ċċekkjajtx, u mbagħad għal żmien twil ma stajtx nifhem għaliex il-makro li kelli bżonn ma kinitx viżibbli fl-API.

Zabbix - espansjoni tal-konfini makro

Wara li rċevejna l-awtorizzazzjoni fl-API, nipproċedu biex tikseb lista ta 'makro.

Pass 3

L-API ma tippermettix li taġġorna makro ospitanti bl-isem, l-ewwel trid tikseb l-ID makro. Barra minn hekk, biex tikseb lista ta 'makros għal host speċifiku, trid tkun taf l-ID ta' dan l-ospitant, u din hija talba żejda. Uża makro default {HOST ID} fit-talba mhux permess. Iddeċidejt li taqbeż ir-restrizzjoni bħal din:

Zabbix - espansjoni tal-konfini makro

Ħloqt makro lokali bl-ID ta 'dan il-host. Issib l-ID ospitanti huwa faċli ħafna mill-interface tal-web.

Risposta b'lista tal-macros kollha fuq host partikolari tista' tiġi ffiltrata b'mudell:

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

Zabbix - espansjoni tal-konfini makro

Għalhekk, aħna nikseb l-ID tal-makro li għandna bżonn, fejn MIKROTIK_VERSION huwa l-isem tal-makro li qed infittxu. Fil-każ tiegħi, il-makro huwa mfittex MIKROTIK_VERSIONIl li kien assenjat lill-ospitanti.

It-talba nnifisha tidher bħal din:

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
}

Varjabbli {sid} miksuba fit-tieni pass u se tintuża kontinwament, fejn għandek bżonn taħdem ma 'l-interface API.

Finali 4 PASS - aġġornament tal-makro

Issa nafu l-ID makro li jeħtieġ li jiġi aġġornat, il-cookie tal-awtorizzazzjoni jew il-verżjoni tal-firmware tar-router. Tista 'taġġorna l-makro innifsu.

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} huwa l-valur miksub fl-ewwel pass. Fl-eżempju tiegħi, il-verżjoni tal-firmware mikrotik attwali
{hostmacroid} - il-valur inkiseb fit-tielet pass - l-id tal-makro li qed naġġornaw.

Sejbiet

L-approċċ biex tissolva l-problema b'funzjonalità standard huwa ħafna aktar ikkumplikat u itwal. Speċjalment jekk taf l-ipprogrammar u tista 'malajr iżżid il-loġika meħtieġa fl-iskrittura.

Il-vantaġġ ovvju ta 'dan l-approċċ huwa l-"portabbiltà" tas-soluzzjoni bejn servers differenti.

Għalija personalment, hija stramba li l-aġent HTTP ma jistax jaċċessa d-dejta ta 'oġġett ieħor u jissostitwixxihom fil-korp tat-talba jew headers [ ZBXNEXT-5993].

Il-mudell lest jista niżżel fuq GitHub.

Sors: www.habr.com

Żid kumment