Zabbix - ngembangna wates makro

Nalika ngadamel solusi pikeun klien, timbul 2 tugas anu kuring hoyong direngsekeun kalayan saé sareng fungsionalitas Zabbix biasa.

1 tangtangan. Nyukcruk versi firmware ayeuna dina routers Mikrotik.

Tugasna gampang direngsekeun - ku nambihan agén kana template HTTP. Agén nampi versi ayeuna tina situs wéb Mikrotik, sareng pemicu ngabandingkeun versi ayeuna sareng versi anu ayeuna sareng ngaluarkeun waspada upami aya bédana.

Lamun anjeun boga 10 routers, algoritma misalna hiji teu kritis, tapi naon anu kudu dipigawé kalayan 3000 routers? Kirim 3000 pamundut ka server? Tangtosna, skéma sapertos kitu bakal tiasa dianggo, tapi ideu 3000 pamundut henteu cocog sareng kuring, kuring hoyong milarian solusi anu sanés. Salaku tambahan, masih aya kalemahan dina algoritma sapertos kitu: sisi sanésna tiasa ngitung sajumlah pamundut ti hiji IP pikeun serangan DoS, aranjeunna ngan saukur tiasa ngalarang.

2 tangtangan. Ngagunakeun sési otorisasina dina agén HTTP béda.

Nalika agén kedah nampi inpormasi tina halaman "tutup" ngalangkungan HTTP, peryogi cookie otorisasina. Jang ngalampahkeun ieu, biasana aya formulir otorisasina baku kalawan pasangan "login / sandi" tur nyetel ID sési dina cookie.

Tapi aya masalah, teu mungkin pikeun ngakses data item nu sejen tina hiji item agén HTTP pikeun ngaganti nilai ieu lulugu.

Aya ogé "Web script", éta boga watesan sejen, teu ngidinan Anjeun pikeun meunangkeun eusi pikeun analisis sarta salajengna nyimpen. Anjeun ngan ukur tiasa mariksa ayana variabel anu diperyogikeun dina halaman atanapi lulus variabel anu ditampi sateuacana antara léngkah-léngkah skrip wéb.

Saatos mikir sakedik ngeunaan tugas-tugas ieu, kuring mutuskeun pikeun ngagunakeun makro anu katingali sampurna dina bagian mana waé sistem ngawaskeun: dina témplat, host, pemicu atanapi barang. Sareng anjeun tiasa ngapdet makro ngalangkungan API antarmuka wéb.

Zabbix gaduh dokuméntasi API anu saé sareng rinci. Pikeun tukeur data via api, format data Json dipaké. Rincian tiasa dipendakan dina dokuméntasi resmi.

Runtuyan tindakan pikeun meunangkeun data anu urang peryogikeun sareng ngarékam dina makro dipidangkeun dina diagram di handap ieu.

Zabbix - ngembangna wates makro

lengkah 1

Léngkah munggaran tiasa diwangun ku hiji tindakan atanapi sababaraha tindakan. Sadaya logika utama disimpen dina léngkah anu munggaran, sareng 3 léngkah anu terakhir nyaéta anu utama.

Dina conto abdi, lengkah kahiji nya éta pikeun meunangkeun cookies otorisasina dina PBX pikeun tugas munggaran. Pikeun tugas kadua, kuring ngagaduhan nomer versi ayeuna tina firmware Mikrotik.

URL versi ayeuna tina firmware Mikrotik

Alamat-alamat ieu diaksés ku alat-alat Mikrotik sorangan nalika versi firmware panganyarna anu sayogi ditampi.

Hambalan munggaran sagemblengna individual pikeun tiap kasus jeung logika karyana bisa jadi béda. Éta sadayana gumantung kana tugas anjeun.

Nalika damel sareng skrip wéb, lacak metode réspon anu anjeun peryogikeun. Judul-judul réspon HTTP atawa diri awak respon tanpa lulugu?
Upami cookies otorisasi diperyogikeun, teras setel metode tanggapan Judul-judul sakumaha dina kasus Asterisk.

Lamun perlu data, sakumaha dina kasus respon server mikrotik, nempatkeun awak respon tanpa lulugu.

lengkah 2

Hayu urang ngaléngkah ka lengkah kadua. Meunang sési otorisasi:

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 mangrupikeun versi protokol JSON-RPC anu dianggo;
Zabbix implements JSON-RPC Vérsi 2.0;

  • métode - métode anu disebut;
  • params - parameter anu diliwatan ku métode;
  • id mangrupa identifier pamundut sawenang;
  • auth - konci auténtikasi pamaké; kumargi urang teu acan gaduh, hayu urang setel ka null.

Pikeun digawekeun ku API, abdi dijieun akun misah kalawan hak kawates. Anu mimiti, anjeun henteu kedah masihan aksés ka tempat anu anjeun henteu kedah. Sareng kadua, sateuacan versi 5.0, kecap konci anu disetél ngaliwatan makro tiasa dibaca. Sasuai, upami anjeun nganggo sandi administrator Zabbix, akun admin gampang maok.

Ieu hususna leres nalika damel sareng API ngalangkungan skrip pihak katilu sareng nyimpen kredensial di sisi.

Kusabab versi 5.0 aya pilihan pikeun nyumputkeun sandi nu disimpen dina makro.

Zabbix - ngembangna wates makro

Nalika nyieun akun misah pikeun ngamutahirkeun data via API, pastikeun pikeun pariksa naha data nu peryogi sadia ngaliwatan panganteur web tur naha kasebut nyaéta dimungkinkeun pikeun ngamutahirkeun eta. Kuring teu pariksa, lajeng pikeun lila kuring teu bisa ngarti naha makro kuring diperlukeun teu katingali dina API.

Zabbix - ngembangna wates makro

Saatos nampi otorisasina dina API, urang teraskeun pikeun kéngingkeun daptar makro.

lengkah 3

API teu ngidinan Anjeun pikeun ngamutahirkeun hiji makro host ku ngaran, Anjeun mimitina kudu meunang ID makro. Leuwih ti éta, pikeun meunangkeun daptar macros pikeun host husus, anjeun kudu nyaho ID tina host ieu, sarta ieu mangrupa pamundut tambahan. Paké makro standar {HOST ID} dina pamundut teu diwenangkeun. Kuring mutuskeun pikeun ngalangkungan larangan sapertos kieu:

Zabbix - ngembangna wates makro

Kuring nyiptakeun makro lokal sareng ID host ieu. Milarian ID host gampang pisan tina antarmuka wéb.

Tanggapan sareng daptar sadaya makro dina host anu dipasihkeun tiasa disaring ku pola:

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

Zabbix - ngembangna wates makro

Ku kituna, urang meunang ID tina makro urang kudu, dimana MIKROTIK_VERSION nyaeta nami makro urang pilari. Bisi kuring, makro anu ditéang MIKROTIK_VERSIONAnu ditugaskeun ka host.

Paménta sorangan sapertos kieu:

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
}

Variabel {sid} diala dina hambalan kadua jeung bakal dipaké terus, dimana anjeun kudu digawekeun ku panganteur API.

Lengkah 4 pamungkas - ngamutahirkeun makro

Ayeuna urang terang ID makro anu kedah diropéa, cookie otorisasi atanapi versi firmware router. Anjeun tiasa ngamutahirkeun makro sorangan.

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} nyaeta nilai diala dina hambalan kahiji. Dina conto kuring, versi firmware mikrotik ayeuna
{hostmacroid} - nilai dicandak dina hambalan katilu - id tina makro nu urang ngamutahirkeun.

papanggihan

Pendekatan pikeun ngarengsekeun masalah sareng fungsionalitas standar langkung rumit sareng langkung panjang. Utamana upami anjeun terang program sareng tiasa gancang nambihan logika anu diperyogikeun dina naskah.

Kauntungan atra tina pendekatan ieu "portability" tina solusi antara server béda.

Pikeun kuring pribadi, anéh yén agén HTTP henteu tiasa ngaksés data barang anu sanés sareng ngagantikeunana dina badan pamundut atanapi lulugu [ ZBXNEXT-5993].

template rengse tiasa unduh di GitHub.

sumber: www.habr.com

Tambahkeun komentar