Zabbix - makro sərhədləri genişləndirir

Müştəri üçün bir həll hazırlayarkən, gözəl və müntəzəm Zabbix funksionallığı ilə həll etmək istədiyim 2 vəzifə ortaya çıxdı.

1 vəzifəsi. Mikrotik marşrutlaşdırıcılarında mövcud proqram təminatı versiyasının izlənməsi.

Tapşırıq asanlıqla həll olunur - HTTP şablonuna agent əlavə etməklə. Agent cari versiyanı Mikrotik saytından alır və trigger cari versiyanı cari versiya ilə müqayisə edir və uyğunsuzluq olduqda xəbərdarlıq verir.

10 marşrutlaşdırıcınız olduqda, belə bir alqoritm kritik deyil, lakin 3000 marşrutlaşdırıcı ilə nə etmək lazımdır? Serverə 3000 sorğu göndərilsin? Əlbəttə ki, belə bir sxem işləyəcək, amma 3000 sorğu ideyası mənə uyğun gəlmədi, başqa bir həll tapmaq istədim. Bundan əlavə, belə bir alqoritmdə hələ də çatışmazlıq var idi: digər tərəf DoS hücumu üçün bir İP-dən bu qədər sayda sorğuları saya bilər, sadəcə olaraq qadağan edə bilər.

2 vəzifəsi. Müxtəlif HTTP agentlərində avtorizasiya sessiyasından istifadə.

Agent HTTP vasitəsilə "qapalı" səhifələrdən məlumat almağa ehtiyac duyduqda, avtorizasiya kukisi tələb olunur. Bunu etmək üçün, adətən, "giriş / parol" cütü və kukidə sessiya identifikatorunu təyin edən standart avtorizasiya forması var.

Ancaq problem var, bu dəyəri Başlıqda əvəz etmək üçün bir HTTP agent elementindən başqa elementin məlumatlarına daxil olmaq mümkün deyil.

"Veb skripti" də var, onun başqa bir məhdudiyyəti var, təhlil etmək və daha sonra saxlamaq üçün məzmun əldə etməyə imkan vermir. Siz yalnız səhifələrdə lazımi dəyişənlərin olub-olmadığını yoxlaya və ya əvvəllər qəbul edilmiş dəyişənləri veb skript addımları arasında keçirə bilərsiniz.

Bu tapşırıqlar haqqında bir az fikirləşdikdən sonra mən monitorinq sisteminin istənilən hissəsində mükəmməl görünən makrolardan istifadə etmək qərarına gəldim: şablonlarda, hostlarda, tetikleyicilərdə və ya elementlərdə. Və siz veb interfeysi API vasitəsilə makroları yeniləyə bilərsiniz.

Zabbix yaxşı və ətraflı API sənədlərinə malikdir. API vasitəsilə məlumat mübadiləsi üçün Json məlumat formatından istifadə olunur. Təfərrüatları burada tapa bilərsiniz rəsmi sənədlər.

Bizə lazım olan məlumatları əldə etmək və onları makroda qeyd etmək üçün hərəkətlərin ardıcıllığı aşağıdakı diaqramda göstərilmişdir.

Zabbix - makro sərhədləri genişləndirir

1 addım

İlk addım tək və ya bir neçə hərəkətdən ibarət ola bilər. Bütün əsas məntiq ilk addımlarda qoyulur, son 3 addım isə əsasdır.

Mənim nümunəmdə ilk addım ilk tapşırıq üçün ATS-də icazə kukiləri əldə etmək idi. İkinci tapşırıq üçün Mikrotik proqram təminatının cari versiyasının nömrəsini aldım.

Mikrotik proqram təminatının cari versiyalarının URL-i

Bu ünvanlara Mikrotik avadanlığının özü ən son mövcud mikroproqram versiyası alındıqda daxil olur.

İlk addım hər bir hal üçün tamamilə fərdi və onun işinin məntiqi fərqli ola bilər. Hamısı vəzifənizdən asılıdır.

Veb skriptləri ilə işləyərkən hansı cavab metoduna ehtiyacınız olduğunu izləyin. Başlıqlar HTTP cavabı və ya özünü тело başlıqsız cavab?
Əgər avtorizasiya kukiləri lazımdırsa, cavab metodunu təyin edin Başlıqlar Asterisk vəziyyətində olduğu kimi.

Mikrotik server cavabında olduğu kimi məlumatlara ehtiyacınız varsa, qoyun Bədən başlıqsız cavab.

2 addım

İkinci mərhələyə keçək. Avtorizasiya sessiyasının alınması:

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 istifadə olunan JSON-RPC protokolunun versiyasıdır;
Zabbix JSON-RPC 2.0 versiyasını həyata keçirir;

  • metod - çağırılan üsul;
  • params - metodla ötürülən parametrlər;
  • id ixtiyari sorğu identifikatorudur;
  • auth - istifadəçinin autentifikasiya açarı; bizdə hələ olmadığı üçün onu null olaraq təyin edək.

API ilə işləmək üçün məhdud hüquqlu ayrıca hesab yaratdım. Birincisi, ehtiyacınız olmayan yerə giriş icazəsi vermək lazım deyil. İkincisi, 5.0 versiyasından əvvəl makro vasitəsilə təyin edilmiş parol oxuna bilərdi. Müvafiq olaraq, Zabbix administrator parolundan istifadə etsəniz, admin hesabını oğurlamaq asandır.

Bu, üçüncü tərəf skriptləri vasitəsilə API ilə işləyərkən və etimadnamələri yan tərəfdə saxlayarkən xüsusilə doğru olacaq.

5.0 versiyasından bəri makroda saxlanan parolu gizlətmək imkanı var.

Zabbix - makro sərhədləri genişləndirir

API vasitəsilə məlumatların yenilənməsi üçün ayrıca hesab yaratarkən, ehtiyac duyduğunuz məlumatların veb interfeysi vasitəsilə mövcud olub-olmadığını və onu yeniləməyin mümkün olub olmadığını yoxlayın. Yoxlamadım, sonra uzun müddət mənə lazım olan makronun API-də niyə görünmədiyini başa düşə bilmədim.

Zabbix - makro sərhədləri genişləndirir

API-də icazə aldıqdan sonra makroların siyahısını əldə etməyə davam edirik.

3 addım

API sizə host makrosunu adla yeniləməyə icazə vermir, əvvəlcə makro identifikatorunu almalısınız. Üstəlik, müəyyən bir host üçün makroların siyahısını əldə etmək üçün bu hostun identifikatorunu bilməlisiniz və bu əlavə sorğudur. Standart makrodan istifadə edin {HOST ID} sorğuda icazə verilmir. Mən məhdudiyyəti belə keçməyə qərar verdim:

Zabbix - makro sərhədləri genişləndirir

Bu hostun identifikatoru ilə yerli makro yaratdım. Veb interfeysindən host ID-ni tapmaq çox asandır.

Verilmiş hostda bütün makroların siyahısı olan cavab nümunə ilə süzülə bilər:

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

Zabbix - makro sərhədləri genişləndirir

Beləliklə, bizə lazım olan makronun identifikatorunu haradan alırıq MIKROTIK_VERSION axtardığımız makronun adıdır. Mənim vəziyyətimdə makro axtarılır MIKROTIK_VERSIONBu ev sahibinə tapşırıldı.

Sorğunun özü belə görünür:

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
}

Dəyişən {sid} ikinci addımda əldə edilir və API interfeysi ilə işləməli olduğunuz yerdə daim istifadə olunacaq.

Son 4 ADDIM - makronun yenilənməsi

İndi biz yenilənməli olan makro identifikatorunu, avtorizasiya kukisini və ya marşrutlaşdırıcının proqram təminatı versiyasını bilirik. Makronun özünü yeniləyə bilərsiniz.

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_versiya} ilk addımda əldə edilən dəyərdir. Mənim nümunəmdə mövcud mikrotik proqram təminatının versiyası
{hostmacroid} - dəyər üçüncü addımda əldə edildi - yenilədiyimiz makronun id.

Tapıntılar

Problemin standart funksionallıqla həllinə yanaşma çox daha mürəkkəb və daha uzundur. Xüsusilə proqramlaşdırmanı bilirsinizsə və skriptə lazımi məntiqi tez əlavə edə bilsəniz.

Bu yanaşmanın aşkar üstünlüyü müxtəlif serverlər arasında həllin “daşıma qabiliyyəti”dir.

Şəxsən mənim üçün qəribədir ki, HTTP agenti başqa elementin məlumatlarına daxil ola bilməz və onları sorğunun mətnində və ya başlıqlarında əvəz edə bilməz. ZBXNEXT-5993].

Hazır şablon bilər GitHub-da yükləyin.

Mənbə: www.habr.com

Добавить комментарий