Zabbix - makro chegaralarni kengaytirish

Mijoz uchun yechim ishlab chiqayotganda, men chiroyli va muntazam Zabbix funksionalligi bilan hal qilmoqchi bo'lgan ikkita vazifa paydo bo'ldi.

1 vazifasi. Mikrotik routerlarda joriy dasturiy ta'minot versiyasini kuzatish.

Vazifa osongina hal qilinadi - HTTP shabloniga agent qo'shish orqali. Agent joriy versiyani Mikrotik veb-saytidan oladi va trigger joriy versiyani joriy versiya bilan taqqoslaydi va nomuvofiqlik bo'lsa, ogohlantirish beradi.

10 marshrutizatoringiz bo'lsa, bunday algoritm juda muhim emas, lekin 3000 marshrutizator bilan nima qilish kerak? Serverga 3000 ta soΚ»rov yuborilsinmi? Albatta, bunday sxema ishlaydi, lekin 3000 ta so'rov g'oyasi menga to'g'ri kelmadi, men boshqa yechim topmoqchi edim. Bundan tashqari, bunday algoritmda hali ham kamchilik bor edi: boshqa tomon DoS hujumi uchun bitta IP-dan shunchalik ko'p so'rovlarni hisoblashi mumkin, ular shunchaki taqiqlashlari mumkin.

2 vazifasi. Turli HTTP agentlarida avtorizatsiya seansidan foydalanish.

Agar agent HTTP orqali "yopiq" sahifalardan ma'lumot olishi kerak bo'lsa, avtorizatsiya cookie fayli kerak bo'ladi. Buni amalga oshirish uchun odatda "login / parol" juftligi va cookie faylida sessiya identifikatorini o'rnatgan standart avtorizatsiya shakli mavjud.

Ammo muammo bor, bu qiymatni sarlavhada almashtirish uchun bitta HTTP agenti elementidan boshqa elementning ma'lumotlariga kirish mumkin emas.

Bundan tashqari, "Veb-skript" mavjud, u yana bir cheklovga ega, u tahlil qilish va keyinchalik saqlash uchun tarkibni olishga imkon bermaydi. Siz faqat sahifalarda kerakli o'zgaruvchilar mavjudligini tekshirishingiz yoki veb-skript bosqichlari o'rtasida avval olingan o'zgaruvchilarni o'tkazishingiz mumkin.

Ushbu vazifalar haqida bir oz o'ylab ko'rganimdan so'ng, men monitoring tizimining istalgan qismida mukammal ko'rinadigan makroslardan foydalanishga qaror qildim: shablonlarda, xostlarda, triggerlarda yoki elementlarda. Va veb-interfeys API orqali makrolarni yangilashingiz mumkin.

Zabbix yaxshi va batafsil API hujjatlariga ega. API orqali ma'lumotlar almashinuvi uchun Json ma'lumotlar formati qo'llaniladi. Tafsilotlar bilan tanishishingiz mumkin rasmiy hujjatlar.

Bizga kerak bo'lgan ma'lumotlarni olish va ularni makroda qayd etish bo'yicha harakatlar ketma-ketligi quyidagi diagrammada ko'rsatilgan.

Zabbix - makro chegaralarni kengaytirish

1 bosqichma

Birinchi qadam bitta yoki bir nechta harakatlardan iborat bo'lishi mumkin. Barcha asosiy mantiq birinchi bosqichlarda yotqizilgan va oxirgi 3 bosqich asosiy hisoblanadi.

Mening misolimda birinchi qadam birinchi vazifa uchun PBXda avtorizatsiya cookie-fayllarini olish edi. Ikkinchi vazifa uchun men Mikrotik proshivkaning joriy versiyasining raqamini oldim.

Mikrotik mikrodasturining joriy versiyalari URL manzili

Ushbu manzillarga Mikrotik uskunasining o'zi mikrodasturning eng so'nggi versiyasi olinganda kiriladi.

Birinchi qadam har bir holat uchun butunlay individualdir va uning ishining mantig'i boshqacha bo'lishi mumkin. Hammasi sizning vazifangizga bog'liq.

Veb-skriptlar bilan ishlashda sizga qaysi javob usuli kerakligini kuzatib boring. Sarlavhalar HTTP javobi yoki o'z-o'zidan Ρ‚Π΅Π»ΠΎ sarlavhasiz javob?
Agar avtorizatsiya cookie fayllari kerak bo'lsa, javob usulini o'rnating Sarlavhalar Yulduzcha misolida bo'lgani kabi.

Agar sizga mikrotik server javobida bo'lgani kabi ma'lumotlar kerak bo'lsa, qo'ying Tana sarlavhasiz javob.

2 bosqichma

Keling, ikkinchi bosqichga o'tamiz. Avtorizatsiya seansini olish:

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 β€” foydalanilayotgan JSON-RPC protokolining versiyasi;
Zabbix JSON-RPC 2.0 versiyasini amalga oshiradi;

  • usul - chaqiriladigan usul;
  • params - metod orqali o'tiladigan parametrlar;
  • id - ixtiyoriy so'rov identifikatori;
  • auth - foydalanuvchi autentifikatsiya kaliti; bizda hali yo'qligi sababli, uni null ga o'rnatamiz.

API bilan ishlash uchun men cheklangan huquqlarga ega alohida hisob yaratdim. Birinchidan, kerak bo'lmagan joyga kirishga ruxsat berishingiz shart emas. Ikkinchidan, 5.0 versiyasidan oldin makro orqali o'rnatilgan parolni o'qish mumkin edi. Shunga ko'ra, agar siz Zabbix administrator parolidan foydalansangiz, administrator hisobini o'g'irlash oson.

Bu, ayniqsa, uchinchi tomon skriptlari orqali API bilan ishlashda va hisob ma'lumotlarini yon tomonda saqlashda to'g'ri keladi.

5.0 versiyasidan boshlab makroda saqlangan parolni yashirish imkoniyati mavjud.

Zabbix - makro chegaralarni kengaytirish

API orqali ma'lumotlarni yangilash uchun alohida hisob yaratishda veb-interfeys orqali kerakli ma'lumotlar mavjudligini va uni yangilash mumkinligini tekshiring. Men tekshirmadim, keyin uzoq vaqt davomida APIda menga kerak bo'lgan makro nima uchun ko'rinmasligini tushunolmadim.

Zabbix - makro chegaralarni kengaytirish

API-da avtorizatsiyani olganimizdan so'ng, biz makrolar ro'yxatini olishni davom ettiramiz.

3 bosqichma

API xost makrosini nom bo'yicha yangilashga ruxsat bermaydi, avval siz makro identifikatorini olishingiz kerak. Bundan tashqari, ma'lum bir xost uchun makrolar ro'yxatini olish uchun siz ushbu xost identifikatorini bilishingiz kerak va bu qo'shimcha so'rovdir. Standart makrosdan foydalaning {HOST ID} so'rovda ruxsat berilmaydi. Men bunday cheklovni chetlab o'tishga qaror qildim:

Zabbix - makro chegaralarni kengaytirish

Men ushbu xost identifikatori bilan mahalliy makro yaratdim. Veb-interfeys orqali xost identifikatorini topish juda oson.

Berilgan xostdagi barcha makroslar roΚ»yxati bilan javobni naqsh boΚ»yicha filtrlash mumkin:

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

Zabbix - makro chegaralarni kengaytirish

Shunday qilib, biz kerakli makroning identifikatorini olamiz, qaerda MIKROTIK_VERSION biz izlayotgan makrosning nomi. Mening holimda makro qidirilmoqda MIKROTIK_VERSIONBu uy egasiga tayinlangan.

So'rovning o'zi quyidagicha ko'rinadi:

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
}

Argumentlar {sid} ikkinchi bosqichda olingan va doimiy ravishda ishlatiladi, bu erda API interfeysi bilan ishlash kerak.

Yakuniy 4 QADAM - makroni yangilash

Endi biz yangilanishi kerak bo'lgan so'l identifikatorini, avtorizatsiya cookie-faylini yoki routerning proshivka versiyasini bilamiz. Makroni o'zi yangilashingiz mumkin.

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} birinchi bosqichda olingan qiymatdir. Mening misolimda, joriy mikrotik proshivka versiyasi
{hostmacroid} - qiymat uchinchi bosqichda olingan - biz yangilayotgan makroning identifikatori.

topilmalar

Standart funksionallik bilan muammoni hal qilish yondashuvi ancha murakkab va uzoqroq. Ayniqsa, dasturlashni bilsangiz va skriptga kerakli mantiqni tezda qo'shsangiz.

Ushbu yondashuvning yaqqol ustunligi yechimning turli serverlar o'rtasida "ko'chirish" qobiliyatidir.

Shaxsan men uchun HTTP agenti boshqa elementning ma'lumotlariga kira olmasligi va ularni so'rov tanasi yoki sarlavhalarida almashtira olmasligi g'alati. ZBXNEXT-5993].

Tayyor shablon mumkin GitHub-da yuklab oling.

Manba: www.habr.com

a Izoh qo'shish