Zabbix - ulatub makro piire ĂŒle

Kliendi lahenduse koostamisel tekkis kaks ĂŒlesannet, millele sooviti leida ilus ja töötav lahendus Zabbixi standardfunktsionaalsuse raames.

Ülesanne 1. Mikrotik ruuterite tarkvara versiooni jĂ€lgimine.

Ülesanne lahendatakse lihtsalt, lisades HTTP agendi ĆĄablooni. Agent saavad versiooni info Mikrotiku veebilehelt ja kĂ€ivitab tingimuse, mis vĂ”rdleb saadud versiooni praegusega; versioonide erinevuse korral vĂ€ljastatakse hĂ€ire.

Kui teil on 10 ruuterit, pole selline algoritm kriitiline, aga mis siis, kui on 3000 ruuteri? Saata 3000 pĂ€ringut serverisse? TĂ”esti, see skeem toimib, kuid juba idee saata 3000 pĂ€ringut mulle ei sobinud; soovisin leida teisi lahendusi. Samuti oli sellise algoritmi puhul puudus: teine pool vĂ”ib pidada nii suurt pĂ€ringute arvu ĂŒhelt IP-aadressilt DoS rĂŒnnakuks ja nad vĂ”ivad lihtsalt blokeerida.

Ülesanne 2. Autoriseerimise sessiooni kasutamine erinevates HTTP agentides.

Kui HTTP agendi kaudu on vaja saada teavet „suletud” lehtedelt, on vajalik autoriseerimise kĂŒpsis. Selleks eksisteerib tavaliselt standardne autoriseerimisvorm, kus kasutatakse „kasutajanime/parooli” kombinatsiooni ning seansi ID salvestatakse kĂŒpsisesse.

Aga on probleem, ei saa ĂŒhe HTTP agendi elemendi kaudu pöörduda teise elemendi andmete poole, et asendada need vĂ€li pĂ€ises.

On olemas ka „Veebi stsenaarium”, millel on teine piirang – see ei vĂ”imalda saada sisu analĂŒĂŒsimiseks ja hilisemaks salvestamiseks. Saab ainult kontrollida lehtede vajalikku muutujate olemasolu vĂ”i edastada eelnevalt saadud muutujaid veebistseeni samme vahetades.

Natuke nendele ĂŒlesannetele mĂ”eldes otsustasin kasutada makrosid, mis on hĂ€sti nĂ€htavad igas monitooringusĂŒsteemi osas: ĆĄabloonides, hostides, hĂ€iretes vĂ”i elementides. Ja makrode vĂ€rskendamine on vĂ”imalik lĂ€bi API veebiliidese.

Zabbixil on olemas hea ja pĂ”hjalik dokumentatsioon API kohta. API kaudu andmete vahetamiseks kasutatav andmevorming on JSON. Üksikasjalikumalt saab lugeda ametlikust dokumentatsioonist.

Vajalikud andmed hankimise ja nende makrosse salvestamise tegevuste jÀrjestus on esitatud allolevas skeemis.

Zabbix - ulatub makro piire ĂŒle

Samm 1

Esimene samm vĂ”ib koosneda ĂŒhest vĂ”i mitmest tegevusest. Esimesed sammud asetavad kogu pĂ”hiloogika paika ning kĂ”ige olulisemad on viimane kolm sammu.

Minu nĂ€ites tehti esimeses sammus autoriseerimise kĂŒpsise saamine PBKeskselt esimese ĂŒlesande lahendamiseks. Teise ĂŒlesande puhul sain Mikrotiku praeguse tarkvara versiooni numbri.

Mikrotik'i uusimate tarkvaraversioonide URL

Need aadressid on Mikrotik'i seadmete poolt kasutatavad, et saada uusim saadaval olev tarkvaraversioon.

Esimene samm on igaĂŒhe jaoks ainulaadne ning selle töötlusloogika vĂ”ib olla erinev. KĂ”ik sĂ”ltub teie ĂŒlesandest.

Veebiskeenuste kasutamisel jÀlgige, milline meetod vastuse saamiseks on vajalik. Pealkirjad HTTP vastuse vÔi sisu vastuse pealkirjadeta?
Kui vajate autentimiskĂŒpsiseid, seadke vastuse meetod Pealkirjad nagu Asterisk'i puhul.

Kui vajate andmeid, nagu Mikrotik'i serveri vastuse puhul, seadke Vastus pealkirjadeta.

Samm 2

Liigume teise sammu juurde. Autentimisseansi saamine:

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 — kasutatav JSON-RPC protokolli versioon;
Zabbix rakendab JSON-RPC versiooni 2.0;

  • meetod — kutsutav meetod;
  • parameetrid — meetodi kaudu edastatavad parameetrid;
  • id — pĂ€ringu meelevaldne identifikaator;
  • auth — kasutaja autentimise vĂ”ti; kuna meil pole veel seda, seadke see nulliks.

API kasutamiseks lÔin eraldi konto, mille Ôigused on piiratud. Esiteks, ei tohiks anda juurdepÀÀsu kohtadele, kuhu see pole vajalik. Teiseks, enne versiooni 5.0, vÔis lÀbi makro parooli lugeda. Seega, kui kasutate Zabbixi administraatori parooli, on admini konto kergesti varastatav.

See on eriti oluline, kui kasutate API-d kolmandate osapoolte skriptide kaudu ja salvestate mandaadid kĂŒljele.

Alates versioonist 5.0 on ilmunud valik peita makros salvestatud parool.

Zabbix - ulatub makro piire ĂŒle

Kui loote eraldi konto andmete uuendamiseks API kaudu, kontrollige kindlasti, kas soovitud andmed on veebiliidese kaudu kergesti ligipÀÀsetavad ja kas neid saab uuendada. Ma ei kontrollinud ja hiljem ei suutnud kaua aru saada, miks API kaudu soovitud makro ei paistnud.

Zabbix - ulatub makro piire ĂŒle

PĂ€rast API-s autoriseerimist liikume makrode loendi saamise juurde.

Samm 3

API liides ei vĂ”imalda hosti makro nimel uuendada, selleks tuleb esmalt saada makro ID. Veelgi enam, et saada konkreetse hosti makrode nimekiri, tuleb teada selle hosti ID-d, mis toob kaasa lisakĂŒsimuse. Kasutage standardset makrot {HOST.ID} pĂ€ringus ei tohi. Piirangut otsustasin ĂŒmber minna nii:

Zabbix - ulatub makro piire ĂŒle

Loomisin kohaliku makro selle hosti ID-ga. Host ID saamine on veebiliidest kasutades vÀga lihtne.

Vastus kÔigi antud hosti makrode nimekirjaga saab filtreerida mustri jÀrgi:

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

Zabbix - ulatub makro piire ĂŒle

Nii saame vajaliku makro ID, kus MIKROTIK_VERSION on makro nimi, mida me otsime. Minu puhul otsitakse makrot MIKROTIK_VERSION, mis on mÀÀratud hostile.

Kogu pÀring nÀeb vÀlja jÀrgmine:

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
}

Muutuja {sid} saadud teisel sammul ja seda kasutatakse pidevalt, kus on vaja töötada API liidesega.

LĂ”plik 4. SAMM — makro uuendamine

NĂŒĂŒd, kui teame makro ID-d, mida tuleb uuendada, autentimisviisi vĂ”i marsruuteri versiooni, saame makrot uuendada.

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} – vÀÀrtus, mille saime esimesel sammul. Minu nĂ€ites — mikrotik'i vĂ€rskeima versiooni.
{hostmacroid} – vÀÀrtus, mille saime kolmandal sammul — makro ID, mida uuendame.

JĂ€reldused

LĂ€henemine ĂŒlesande lahendusele standardsete funktsioonide kaudu on oluliselt keerukam ja aeganĂ”udvam. Eriti kui tead programmeerimist ja saad kiiresti vajalikku loogikat skripti kirjutada.

Ilmselge plusspunkt selle lĂ€henemise juures on lahenduse "ĂŒlekantavus" erinevate serverite vahel.

Isiklikult on mulle kummaline, et puudub vÔimalus HTTP-agentis pöörduda teiste elementide andmete poole ja sisestada need pÀringu vÔi pealkirjade kehasse [ ZBXNEXT-5993].

Valmis malle saab laadida GitHubist.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster