Zabbix — zgjeroni kufijtĂ« e makrove

Duke një zgjidhje për klientin, lindën 2 detyra që do të doja t'i zgjidhja në mënyrë të bukur dhe me funksionalitetin standard të Zabbix.

Detyra 1. Gjatë ndjekjes së versionit aktual të firmware-it në routes Mikrotik.

Problemi zgjidhet lehtë - duke e shtuar në template-in e agjentit HTTP. Agjenti merr versionin aktual nga faqeja e Mikrotik, dhe trigger-i krahasohet me versionin aktual dhe në rast të ndryshimit jep një alarëm.

Kur keni 10 routes, një algoritëm i tillë nuk është kritik, por çfarë të bëni me 3000 routes? Të dërgoni 3000 kërkesa në server? Sigurisht, kjo skemë do të funksiononte, por ideja e dërgimit të 3000 kërkesave nuk më kënaqte, doja të gjeja një zgjidhje tjetër. Për më tepër, një disavantazh në një algoritëm të tillë është se pala tjetër mund të mendojë se një numër i tillë kërkesash nga një IP është një sulm DoS dhe mund të bllokojnë thjesht.

Detyra 2. Përdorimi i sesioneve të autorizimit në agjentë të ndryshëm HTTP.

Kur përmes agjentit HTTP duhet të merrni informacion nga faqet "e mbyllura", një kuki autorizimi është e nevojshme. Për këtë zakonisht ekziston një formë standarde autorizimi me çiftin "login/password" dhe vendosja e ID-së së sesionit në kuki.

Por çfarë, nuk është e mundur të referohesh nga një artikull i agentit HTTP tek të dhënat e një artikulli tjetër për të vendosur këtë vlerë në Header.

Ekziston gjithashtu 'Skenari Web', i cili ka një kufizim tjetër, ai nuk lejon të marrim përmbajtjen për analizë dhe ruajtim të mëtejshëm. Mund të kontrollohet vetëm nëse variablat e nevojshëm janë në faqet ose të kalojmë variablat e fituara më parë ndërmjet hapave të skenarit web.

Duke reflektuar pak mbi këto detyra, vendosa të përdor makros, të cilat janë të dukshme në çdo pjesë të sistemit të monitorimit: në shabllone, host, trigera ose artikuj. Makros mund të përditësohen përmes API-së së ndërfaqes web.

Zabbix ka dokumentacion të mirë dhe të detajuar për API-në. Për të shkëmbyer të dhëna përmes API-së, përdoret formati i të dhënave JSON. Mund ta lexoni në detaje në dokumenti zyrtar.

Sekuenca e veprimeve për të marrë të dhënat që na nevojiten dhe për t'i shkruar ato në makro është e paraqitur në skemën më poshtë.

Zabbix — zgjeroni kufijtĂ« e makrove

Hapi 1

Hapi i parë mund të përbëhet nga një veprim ose shumë veprime. Në hapat e parë do të vendoset e gjithë logjika kryesore, ndërsa të rëndësishmit janë tre hapat e fundit.

Në shembullin tim, në hapin e parë u morën cookie-t e autorizimit në ATS për detyrën e parë. Për detyrën e dytë, unë morëm numrin e versionit aktual të firmware-it Mikrotik.

URL-të e versioneve aktuale të firmware-it Mikrotik

Të dhënat e këtyre adresave vizitohen nga pajisjet Mikrotik, kur marrin versionin më të fundit të disponueshëm të firmware-it.

Hapi i parë është plotësisht individual për çdo rast dhe logjika e punës së tij mund të jetë e ndryshme. Tërë kjo varet nga detyra juaj.

Kur punoni me skenarë web, ndiqni se cili metodë e marrjes së përgjigjes ju nevojitet. Kryesorët e përgjigjes HTTP ose vetë trupi i përgjigjes pa kryesorët?
Nëse ju nevojiten cookie-t e autorizimit, atëherë metodat e përgjigjes vendosni Kryesorët si në rastin me Asterisk.

Nëse ju nevojiten të dhëna, si në rastin e përgjigjes nga serveri mikrotik, vendosni Trupi i përgjigjes pa kryesorët.

Hapi 2

Kalohet në hapin e dytë. Marrja e sesionit të autorizimit:

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 — versioni i protokollit JSON-RPC qĂ« pĂ«rdoret;
Zabbix implementon JSON-RPC version 2.0;

  • metoda — metoda qĂ« thirret;
  • parametrat — parametrat qĂ« kalohen pĂ«rmes metodĂ«s;
  • id — njĂ« identifikues tĂ« rastĂ«sishĂ«m tĂ« kĂ«rkesĂ«s;
  • auth — çelĂ«si i autentifikimit tĂ« pĂ«rdoruesit; pasi nuk e kemi ende, do ta vendosim tĂ« barabartĂ« me null.

Për të punuar me API, krijova një llogari të veçantë me të drejta të kufizuara. Së pari, nuk ka nevojë të jepni qasje aty ku nuk është e nevojshme. Së dyti, deri në versionin 5.0, fjalëkalimi i caktuar përmes makros mund të lexohej. Prandaj, nëse përdorni fjalëkalimin e administratorit të Zabbix, llogaria e administratorit mund të vidhet lehtë.

Kjo do të jetë veçanërisht e rëndësishme kur punoni me API përmes skripteve të jashtme dhe ruani akreditimet në anën tjetër.

Me versionin 5.0 u shtua mundësia për të fshehur fjalëkalimin të ruajtur në makro.

Zabbix — zgjeroni kufijtĂ« e makrove

Kur krijoni një llogari të veçantë për të përditësuar të dhënat përmes API, sigurohuni që të dhënat që ju nevojiten janë të aksesueshme përmes ndërfaqes web dhe që përditësimi i tyre është i mundur. Unë nuk e verifikova, dhe më pas nuk mund të kuptoja për një kohë të gjatë pse makroi që më duheshte nuk shp appearingte në API.

Zabbix — zgjeroni kufijtĂ« e makrove

Pasi të kemi marrë autorizimin në API, kalojmë në marrjen e listës së makros.

Hapi 3

Interfata API nuk lejon përditësimin e makros së hostit sipas emrit; për këtë, duhet fillimisht të merrni ID-në e makros. Për më tepër, për të marrë një listë makrosh për një host të caktuar, është e nevojshme të dini ID-në e këtij hosti, dhe kjo është një kërkesë e tepërt. Përdorni makron standarde. {HOST.ID} në kërkesë është e ndaluar. Kufizimin e zgjidhja kështu:

Zabbix — zgjeroni kufijtĂ« e makrove

Krijova një makro lokale me ID-në e këtij hosti. Të mësosh ID-në e hostit është shumë e lehtë nga ndërfaqja web.

Përgjigja me listën e të gjitha makrosh të këtij hosti mund të filtrohet sipas modelit:

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

Zabbix — zgjeroni kufijtĂ« e makrove

KĂ«shtu, ne marrim ID-nĂ« e makros qĂ« na nevojitet, ku MIKROTIK_VERSION — emri i makros qĂ« po kĂ«rkojmĂ«. NĂ« rastin tim, po kĂ«rkohet makro MIKROTIK_VERSION, e cila ishte ndarĂ« pĂ«r hostin.

Kërkesa vetë duket kështu:

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
}

Variabla {sid} u mor në hapin e dytë dhe do të përdoret vazhdimisht, ku është e nevojshme të punohet me interfesën API.

HAPI final 4 — pĂ«rditĂ«simi i makros

Tani ne e dimë ID-në e makros që duhet të përditësohet, cookie-n e autorizimit ose versionin e firmware-it të router-it. Mund të përditësohet vetë makroja.

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} — vlera e marrĂ« nĂ« hapin e parĂ«. NĂ« shembullin tim — versioni mĂ« i fundit i firmware-it tĂ« mikrotik.
{hostmacroid} — vlera e marrĂ« nĂ« hapin e tretĂ« — id e makros qĂ« po pĂ«rditĂ«sojmĂ«.

Përfundimet

Qasja për zgjidhjen e problemit me funksionalitetin standard është shumë më e ndërlikuar dhe më e gjatë. Sidomos nëse e di programimin dhe mund të shkruash shpejt logjikën e nevojshme në një skript.

Një avantazh i dukshëm i këtij qasjeje është "portabiliteti" i zgjidhjes mes serverëve të ndryshëm.

Për mua është e çuditshme mungesa e mundësisë për të bërë kërkesë në agjentin HTTP për të dhënat e një elementi tjetër dhe për të futur ato në trupin e kërkesës ose në tituj [ ZBXNEXT-5993].

Tema e gatshme mund të shkarkohet në GitHub.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster