Zabbix - berfirehkirina sînorên makro

Dema ku çareseriyek ji bo xerîdarek çêkir, 2 peywir derketin ku min dixwest bi xweşikî û bi fonksiyona birêkûpêk Zabbix çareser bikim.

Armanc 1. Li ser routerên Mikrotik guhertoya firmware ya heyî bişopînin.

Kar bi hêsanî çareser dibe - bi lêzêdekirina karmendek li şablona HTTP. Agent guhertoya heyî ji malpera Mikrotik distîne, û tetîkkêş guhertoya heyî bi ya heyî re berhev dike û di rewşek cûdabûnê de hişyariyek dide.

Gava ku we 10 rêwer hene, algorîtmayek wusa ne krîtîk e, lê meriv bi 3000 routeran re çi bike? 3000 daxwazan ji serverê re bişînin? Bê guman, planek wusa dê bixebite, lê ramana 3000 daxwazî ​​li min nehat, min xwest ku çareseriyek din bibînim. Digel vê yekê, di algorîtmayek wusa de hîn jî kêmasiyek hebû: aliyê din dikare ji bo êrîşek DoS hejmarek daxwaz ji yek IP-yê bijmêre, ew dikarin bi hêsanî wê qedexe bikin.

Armanc 2. Bikaranîna danişîna destûrnameyê di nûnerên HTTP yên cihêreng de.

Dema ku ajanek pêdivî ye ku agahdariya ji rûpelên "girtî" bi riya HTTP-ê bigire, pêdivî ye ku cookieyek destûrnameyê. Ji bo kirina vê yekê, bi gelemperî formek destûrnameyê ya standard bi cotek "têketin / şîfre" heye û nasnameya danişînê di cookie de destnîşan dike.

Lê pirsgirêkek heye, ne mimkûn e ku meriv xwe bigihîne daneya babetek din ji yek hêmanek nûnerê HTTP-ê ku vê nirxê di Sernivîsê de biguhezîne.

Di heman demê de "skrîptek Web" jî heye, ew xwedan sînorkirinek din e, ew nahêle hûn naverokê ji bo analîz û hilanînê bistînin. Hûn dikarin tenê hebûna guhêrbarên pêwîst li ser rûpelan kontrol bikin an guhêrbarên ku berê hatine bidestxistin di navbera gavên skrîpta malperê de derbas bikin.

Piştî ku hinekî li ser van peywiran fikirîm, min biryar da ku makroyên ku di her perçeyek pergala çavdêriyê de bêkêmasî têne xuyang kirin bikar bînim: di şablon, mêvandar, kêşan an tiştan de. Û hûn dikarin makroyan bi navgîniya navgîniya webê API-yê nûve bikin.

Zabbix xwedan belgeyên API-ê yên baş û berfireh e. Ji bo danûstandina daneyê bi rêya api, formata daneya Json tê bikar anîn. Agahdariyên di nav de têne dîtin belgeyên fermî.

Rêzeya çalakiyan ji bo bidestxistina daneyên ku em hewce ne û tomarkirina wan di makro de di diyagrama jêrîn de têne destnîşan kirin.

Zabbix - berfirehkirina sînorên makro

gav 1

Pêngava yekem dikare ji çalakiyek yek an çend çalakiyan pêk tê. Hemî mantiqa sereke di gavên yekem de têne danîn, û 3 gavên paşîn ên sereke ne.

Di mînaka min de, gava yekem ew bû ku ji bo karê yekem çerezên destûrnameyê li PBX-ê bigirin. Ji bo karê duyemîn, min hejmara guhertoya heyî ya firmware Mikrotik girt.

URL-ya guhertoyên heyî yên firmware Mikrotik

Dema ku guhertoya herî dawî ya firmware-ya berdest tê wergirtin, van navnîşan ji hêla alavên Mikrotik bixwe ve têne gihîştin.

Pêngava yekem ji bo her rewşê bi tevahî ferdî ye û dibe ku mantiqa xebata wê cûda be. Ew hemî bi karê we ve girêdayî ye.

Dema ku bi nivîsandina malperê re dixebitin, bişopînin ka kîjan rêbaza bersivê ku hûn hewce ne. Sernav Bersiva HTTP an bixwe тело bersiv bê sernivîs?
Ger çerezên destûrnameyê hewce ne, wê hingê rêbaza bersivê bicîh bikin Sernav wek ku di doza Asterisk.

Heke hûn hewceyê daneyê, wekî di doza bersiva servera mikrotik de, bixin Beden bersiv bê sernav.

gav 2

Ka em derbasî qonaxa duyemîn bibin. Danîna danişîna destûrnameyê:

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 guhertoya protokola JSON-RPC ye ku tê bikar anîn;
Zabbix guhertoya JSON-RPC 2.0 pêk tîne;

  • rêbaz - rêbaza ku tê gotin;
  • Param - Parametreyên ku bi rêbazê têne derbas kirin;
  • id nasnameyeke daxwaza keyfî ye;
  • auth - mifteya erêkirina bikarhêner; ji ber ku hîna me tune ye, em wê wekî null saz bikin.

Ji bo ku bi API-yê re bixebitim, min hesabek cihêreng bi mafên tixûbdar çêkir. Ya yekem, hûn ne hewce ne ku hûn bigihîjin cîhê ku hûn ne hewce ne. Ya duyemîn jî, berî guhertoya 5.0, şîfreya ku ji hêla makro ve hatî danîn dikare were xwendin. Li gorî vê yekê, heke hûn şîfreya rêveberê Zabbix bikar bînin, hesabê rêveberê hêsan e ku meriv dizîne.

Ev ê bi taybetî rast be dema ku bi API-ê re bi navgîniya nivîsarên partiya sêyemîn re bixebite û pêbaweriyan li kêlekê hilîne.

Ji guhertoya 5.0 ve vebijarkek heye ku şîfreya ku di makroyê de hatî hilanîn veşêre.

Zabbix - berfirehkirina sînorên makro

Dema ku ji bo nûvekirina daneyan bi navgîniya API-ê ve hesabek veqetandî diafirînin, pê ewle bin ku ka daneyên ku hûn hewce ne bi navgîniya webê ve heye û gelo gengaz e ku hûn nûve bikin. Min kontrol nekir, û dûv re ji bo demek dirêj min nikarî fêm bikim ka çima makroya ku min hewce dike di API-ê de xuya nake.

Zabbix - berfirehkirina sînorên makro

Piştî ku me di API-yê de destûr wergirt, em dest bi wergirtina navnîşek makroyan dikin.

gav 3

API destûrê nade ku hûn bi navê makroyek mêvandar nûve bikin, divê hûn pêşî nasnameya makro bistînin. Wekî din, ji bo ku hûn navnîşek makroyan ji bo mêvandarek taybetî bistînin, hûn hewce ne ku nasnameya vê mêvandar zanibin, û ev daxwazek zêde ye. Makroya xwerû bikar bînin {HOST ID} di daxwaznameyê de destûr nayê dayîn. Min biryar da ku bi vî rengî qedexeyê derbas bikim:

Zabbix - berfirehkirina sînorên makro

Min bi nasnameya vê mêvandarê makroyek herêmî çêkir. Dîtina nasnameya mêvandar ji navgîniya malperê pir hêsan e.

Bersivek bi navnîşek hemî makroyên li ser mêvandarek diyarkirî dikare bi şêweyek were fîlter kirin:

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

Zabbix - berfirehkirina sînorên makro

Bi vî rengî, em nasnameya makroya ku em hewce ne, li ku derê digirin MIKROTIK_VERSION navê makroya ku em lê digerin e. Di doza min de, makro tê lêgerîn MIKROTIK_VERSIONYa ku ji bo mazûvaniyê hatibû tayînkirin.

Daxwaz bi xwe wiha xuya dike:

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
}

Têgûherr {sid} di gava duyemîn de hatî wergirtin û dê bi domdarî were bikar anîn, ku hûn hewce ne ku bi navbeynkariya API-ê re bixebitin.

Dawî 4 STEP - nûvekirina makro

Naha em nasnama makro ya ku divê were nûve kirin, cookie destûrnameyê an guhertoya firmware ya routerê dizanin. Hûn dikarin makro bixwe nûve bikin.

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} nirxa ku di gava yekem de tê bidestxistin e. Di mînaka min de, guhertoya firmware-ya mîkrotîk a heyî
{hostmacroid} - nirx di gava sêyemîn de hate bidestxistin - nasnameya makroya ku em nûve dikin.

vebiguherin

Nêzîkatiya çareserkirina pirsgirêkê bi fonksiyona standard pir tevlihevtir û dirêjtir e. Nemaze heke hûn bernamesaziyê dizanin û dikarin bi lez mantiqa pêwîst di skrîptê de zêde bikin.

Feydeya eşkere ya vê nêzîkbûnê "veguheztina" ya çareseriyê di navbera serverên cihêreng de ye.

Ji bo min bixwe, ecêb e ku nûnerê HTTP nikare xwe bigihîne daneyên tiştek din û wan di laşê daxwazê ​​an sernavan de biguhezîne [ ZBXNEXT-5993].

Şablonê qediyayî dikare li ser GitHub dakêşin.

Source: www.habr.com

Add a comment