Zabbix - makro mugak zabaltzea

Bezero bati irtenbide bat egitean, ederki konpondu nahi nituen 2 zeregin sortu ziren eta Zabbix funtzionaltasun arruntarekin.

1. ataza. Mikrotik bideratzaileetan uneko firmware bertsioaren jarraipena egitea.

Ataza erraz konpontzen da - HTTP txantiloian agente bat gehituz. Agenteak uneko bertsioa jasotzen du Mikrotik webgunetik, eta abiarazleak uneko bertsioa unekoarekin alderatzen du eta alerta bat ematen du desadostasunen bat izanez gero.

10 bideratzaile dituzunean, algoritmo hori ez da kritikoa, baina zer egin 3000 bideratzailerekin? Zerbitzariari 3000 eskaera bidali? Jakina, eskema horrek funtzionatuko du, baina 3000 eskaeraren ideia bera ez zitzaidan egokitzen, beste irtenbide bat bilatu nahi nuen. Horrez gain, oraindik ere eragozpen bat zegoen algoritmo horretan: beste aldeak DoS eraso baterako IP bateko eskaerak zenbatu ditzake, besterik gabe debekatu egin dezakete.

2. ataza. HTTP agente desberdinetan baimen-saio bat erabiltzea.

Agente batek HTTP bidez orri "itxietatik" informazioa jaso behar duenean, baimen-cookie bat behar da. Horretarako, normalean baimen-inprimaki estandar bat egon ohi da "saioa / pasahitza" bikotearekin eta cookiean saioaren IDa ezartzen duena.

Baina arazo bat dago, ezinezkoa da HTTP agente elementu batetik beste elementu baten datuak atzitzea Goiburuko balio hori ordezkatzeko.

"Web script" bat ere badago, beste muga bat du, ez du uzten analisirako eta gehiago gordetzeko edukia eskuratzerik. Orrietan beharrezkoak diren aldagaien presentzia soilik egiaztatu dezakezu edo aldez aurretik lortutako aldagaiak web script-urratsen artean pasa ditzakezu.

Zeregin horiei buruz apur bat pentsatu ondoren, monitorizazio sistemaren edozein ataletan primeran ikusten diren makroak erabiltzea erabaki nuen: txantiloietan, ostalarietan, abiarazleetan edo elementuetan. Eta makroak eguneratu ditzakezu web interfazearen APIaren bidez.

Zabbix-ek API dokumentazio ona eta zehatza du. API bidez datuak trukatzeko, Json datu-formatua erabiltzen da. Xehetasunak atalean aurki daitezke dokumentazio ofiziala.

Behar ditugun datuak lortzeko eta makro batean erregistratzeko ekintzen sekuentzia beheko diagraman ageri da.

Zabbix - makro mugak zabaltzea

Urratsera 1

Lehen urratsa ekintza bakarra edo hainbat ekintza izan daiteke. Logika nagusi guztia lehen urratsetan ezartzen da, eta azken 3 urratsak dira nagusiak.

Nire adibidean, lehen urratsa PBXan baimen-cookieak lortzea izan zen lehen zereginerako. Bigarren zereginerako, Mikrotik firmwarearen uneko bertsioaren zenbakia lortu nuen.

Mikrotik firmwarearen uneko bertsioen URLa

Helbide hauek Mikrotik ekipamenduak berak eskuratzen ditu azken firmware bertsioa jasotzen denean.

Lehenengo urratsa guztiz indibiduala da kasu bakoitzerako eta bere lanaren logika ezberdina izan daiteke. Guztia zure zereginaren araberakoa da.

Web scripting-ekin lan egiten duzunean, egin jarraipena zein erantzun-metodo behar duzun. Izenburuak HTTP erantzuna edo norbera Ρ‚Π΅Π»ΠΎ goibururik gabeko erantzuna?
Baimen-cookieak behar badira, ezarri erantzun-metodoa Izenburuak Asterisk-en kasuan bezala.

Datuak behar badituzu, mikrotik zerbitzariaren erantzunaren kasuan bezala, jarri Gorputza goibururik gabeko erantzuna.

Urratsera 2

Goazen bigarren urratsera. Baimen-saio bat lortzea:

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 erabiltzen ari den JSON-RPC protokoloaren bertsioa da;
Zabbix-ek JSON-RPC 2.0 bertsioa ezartzen du;

  • metodoa - deitzen den metodoa;
  • params - metodoak pasatzen dituen parametroak;
  • id eskaeraren identifikatzaile arbitrarioa da;
  • auth - erabiltzailearen autentifikazio-gakoa; oraindik ez dugunez, ezar dezagun null.

APIarekin lan egiteko, eskubide mugatuak dituen aparteko kontu bat sortu dut. Lehenik eta behin, ez duzu behar ez duzun tokira sarbidea eman behar. Eta bigarrenik, 5.0 bertsioa baino lehen, makroaren bidez ezarritako pasahitza irakur zitekeen. Horren arabera, Zabbix administratzailearen pasahitza erabiltzen baduzu, administratzailearen kontua erraza da lapurtzen.

Hau bereziki egia izango da APIarekin hirugarrenen scripten bidez lan egiten duzunean eta alboan kredentzialak gordetzean.

5.0 bertsioaz geroztik makroan gordetako pasahitza ezkutatzeko aukera dago.

Zabbix - makro mugak zabaltzea

APIaren bidez datuak eguneratzeko aparteko kontu bat sortzen duzunean, ziurtatu behar dituzun datuak web-interfazearen bidez eskuragarri dauden eta eguneratzea posible den egiaztatu duzula. Ez nuen egiaztatu, eta denbora luzez ezin izan nuen ulertu zergatik behar nuen makroa APIan ikusten ez zen.

Zabbix - makro mugak zabaltzea

APIan baimena jaso ondoren, makroen zerrenda lortzen jarraituko dugu.

Urratsera 3

APIak ez dizu ostalari makro bat izenez eguneratzen uzten, lehenik makro IDa lortu behar duzu. Gainera, ostalari jakin baterako makroen zerrenda bat lortzeko, ostalari honen IDa ezagutu behar duzu, eta hau eskaera gehigarria da. Erabili makro lehenetsia {HOST ID} eskaeran ez da onartzen. Horrelako murrizketa saihestea erabaki nuen:

Zabbix - makro mugak zabaltzea

Ostalari honen IDarekin tokiko makro bat sortu dut. Ostalariaren IDa jakitea oso erraza da web interfazetik.

Ostalari jakin bateko makro guztien zerrenda duen erantzuna eredu baten bidez iragazi daiteke:

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

Zabbix - makro mugak zabaltzea

Horrela, behar dugun makroaren IDa lortuko dugu, non MIKROTIK_VERSION da bilatzen ari garen makroaren izena. Nire kasuan, makroa bilatzen da MIKROTIK_VERSIONHori ostalariari esleitu zitzaion.

Eskaerak berak honela dauka:

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
}

Aldakorra {sid} bigarren urratsean lortu eta etengabe erabiliko da, non API interfazearekin lan egin behar duzun.

Azken 4 URRATSA - makroa eguneratzea

Orain eguneratu behar den makro IDa, baimen-cookiea edo routerraren firmware-bertsioa ezagutzen dugu. Makroa bera egunera dezakezu.

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} lehen urratsean lortutako balioa da. Nire adibidean, egungo mikrotik firmwarearen bertsioa
{hostmacroid} - balioa hirugarren urratsean lortu da - eguneratzen ari garen makroaren id-a.

Findings

Funtzionalitate estandarrekin arazoa konpontzeko planteamendua askoz zailagoa eta luzeagoa da. Batez ere programazioa ezagutzen baduzu eta scriptean beharrezko logika azkar gehitzen baduzu.

Ikuspegi honen abantaila nabaria zerbitzari ezberdinen arteko irtenbidearen "eramangarritasuna" da.

Niri pertsonalki, bitxia da HTTP agenteak ezin duela beste elementu baten datuak sartu eta eskaeraren gorputzean edo goiburuetan ordezkatu [ ZBXNEXT-5993].

Amaitutako txantiloia daiteke deskargatu GitHub-en.

Iturria: www.habr.com

Gehitu iruzkin berria