Zabbix - макро шекараларды кеңейту

Клиент үшін шешім қабылдаған кезде мен әдемі және тұрақты Zabbix функционалдығымен шешкім келетін 2 тапсырма пайда болды.

1 тапсырмасы. Микротик маршрутизаторларында микробағдарламаның ағымдағы нұсқасын қадағалау.

Тапсырма оңай шешіледі - HTTP үлгісіне агент қосу арқылы. Агент ағымдағы нұсқаны Mikrotik веб-сайтынан алады, ал триггер ағымдағы нұсқаны ағымдағы нұсқамен салыстырады және сәйкессіздік болған жағдайда ескерту береді.

Сізде 10 маршрутизатор болған кезде, мұндай алгоритм маңызды емес, бірақ 3000 маршрутизатормен не істеу керек? Серверге 3000 сұрау жіберу керек пе? Әрине, мұндай схема жұмыс істейді, бірақ 3000 сұраныс идеясы маған сәйкес келмеді, мен басқа шешім тапқым келді. Сонымен қатар, мұндай алгоритмде әлі де кемшілік болды: екінші тарап DoS шабуылына бір IP-ден осындай санды сұрауларды санай алады, олар жай ғана тыйым сала алады.

2 тапсырмасы. Әртүрлі HTTP агенттерінде авторизация сеансын пайдалану.

Агент HTTP арқылы «жабық» беттерден ақпаратты алу қажет болғанда, авторизация cookie файлы қажет. Бұл үшін әдетте «логин/пароль» жұбы және cookie файлында сеанс идентификаторы орнатылатын стандартты авторизация пішіні бар.

Бірақ мәселе бар, бұл мәнді тақырыпта ауыстыру үшін бір HTTP агент элементінен басқа элементтің деректеріне қол жеткізу мүмкін емес.

Сондай-ақ «Веб-скрипт» бар, оның басқа шектеуі бар, ол талдау және одан әрі сақтау үшін мазмұнды алуға мүмкіндік бермейді. Сіз тек беттерде қажетті айнымалы мәндердің бар-жоғын тексере аласыз немесе веб-скрипт қадамдары арасында бұрын алынған айнымалы мәндерді өткізе аласыз.

Осы тапсырмалар туралы аздап ойланғаннан кейін мен мониторинг жүйесінің кез келген бөлігінде тамаша көрінетін макростарды пайдалануды шештім: үлгілерде, хосттарда, триггерлерде немесе элементтерде. Макростарды API интерфейсі арқылы жаңартуға болады.

Zabbix-те жақсы және егжей-тегжейлі API құжаттамасы бар. API арқылы деректер алмасу үшін Json деректер пішімі пайдаланылады. Толық ақпаратты мына жерден табуға болады ресми құжаттама.

Бізге қажетті деректерді алу және оларды макросқа жазу әрекеттерінің тізбегі төмендегі диаграммада көрсетілген.

Zabbix - макро шекараларды кеңейту

қадам 1

Ең бірінші қадам бір әрекеттен немесе бірнеше әрекеттерден тұруы мүмкін. Барлық негізгі логика алғашқы қадамдарда қаланған, ал соңғы 3 қадам негізгі болып табылады.

Менің мысалда бірінші қадам бірінші тапсырма үшін АТС-те авторизация кукилерін алу болды. Екінші тапсырма үшін мен Микротик микробағдарламасының ағымдағы нұсқасының нөмірін алдым.

Mikrotik микробағдарламасының ағымдағы нұсқаларының URL мекенжайы

Бұл мекенжайларға микробағдарламаның ең соңғы қол жетімді нұсқасы алынған кезде Mikrotik жабдығының өзі қол жеткізе алады.

Бірінші қадам әрбір жағдай үшін толығымен жеке және оның жұмысының логикасы әртүрлі болуы мүмкін. Мұның бәрі сіздің тапсырмаңызға байланысты.

Веб-скрипттермен жұмыс істегенде, сізге қандай жауап әдісі қажет екенін қадағалаңыз. Атаулар HTTP жауабы немесе өздігінен тело тақырыптарсыз жауап?
Авторизация cookie файлдары қажет болса, жауап беру әдісін орнатыңыз Атаулар Жұлдызша жағдайындағыдай.

Егер сізге микротик сервер жауабы сияқты деректер қажет болса, қойыңыз Дене тақырыптарсыз жауап.

қадам 2

Екінші қадамға көшейік. Авторизация сеансын алу:

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 — қолданылып жатқан JSON-RPC протоколының нұсқасы;
Zabbix JSON-RPC 2.0 нұсқасын жүзеге асырады;

  • әдіс – шақырылатын әдіс;
  • params – әдіс арқылы берілетін параметрлер;
  • id – ерікті сұрау идентификаторы;
  • auth – пайдаланушының аутентификация кілті; бізде әлі жоқ болғандықтан, оны нөлге орнатайық.

API интерфейсімен жұмыс істеу үшін мен шектеулі құқықтары бар бөлек тіркелгіні жасадым. Біріншіден, сізге қажет емес жерге кіруге рұқсат берудің қажеті жоқ. Екіншіден, 5.0 нұсқасына дейін макрос арқылы орнатылған құпия сөзді оқуға болатын. Тиісінше, Zabbix әкімші құпия сөзін пайдалансаңыз, әкімші тіркелгісін ұрлау оңай.

Бұл, әсіресе, үшінші тарап сценарийлері арқылы API-мен жұмыс істегенде және тіркелгі деректерін бүйірде сақтау кезінде дұрыс болады.

5.0 нұсқасынан бастап макроста сақталған құпия сөзді жасыру мүмкіндігі бар.

Zabbix - макро шекараларды кеңейту

API арқылы деректерді жаңарту үшін бөлек тіркелгіні жасау кезінде сізге қажет деректердің веб-интерфейс арқылы қолжетімділігін және оны жаңарту мүмкіндігін тексеруді ұмытпаңыз. Мен тексерген жоқпын, содан кейін API-де маған қажет макрос неге көрінбейтінін ұзақ уақыт бойы түсіне алмадым.

Zabbix - макро шекараларды кеңейту

API-де рұқсат алғаннан кейін біз макростар тізімін алуға кірісеміз.

қадам 3

API хост макросын аты бойынша жаңартуға мүмкіндік бермейді, алдымен макрос идентификаторын алу керек. Сонымен қатар, белгілі бір хост үшін макростар тізімін алу үшін сіз осы хосттың идентификаторын білуіңіз керек және бұл қосымша сұрау. Әдепкі макросты пайдаланыңыз {HOST ID} сұрауда рұқсат етілмейді. Мен келесідей шектеуді айналып өтуді шештім:

Zabbix - макро шекараларды кеңейту

Мен осы хосттың идентификаторымен жергілікті макрос жасадым. Веб-интерфейс арқылы хост идентификаторын табу өте оңай.

Берілген хосттағы барлық макростар тізімі бар жауапты үлгі бойынша сүзуге болады:

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

Zabbix - макро шекараларды кеңейту

Осылайша, біз қажетті макростың идентификаторын аламыз, қайда MIKROTIK_VERSION — біз іздеп отырған макростың аты. Менің жағдайда макрос ізделеді MIKROTIK_VERSIONБұл хостқа тағайындалды.

Сұраныстың өзі келесідей көрінеді:

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
}

Айнымалысы {сид} екінші қадамда алынған және API интерфейсімен жұмыс істеу қажет болатын тұрақты түрде пайдаланылады.

Соңғы 4 ҚАДАМ – макросты жаңарту

Енді біз жаңартуды қажет ететін макрос идентификаторын, авторизация кукиін немесе маршрутизатордың микробағдарлама нұсқасын білеміз. Макростың өзін жаңартуға болады.

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} бірінші қадамда алынған мән болып табылады. Менің мысалда ағымдағы mikrotik микробағдарламасының нұсқасы
{hostmacroid} - мән үшінші қадамда алынды - біз жаңартып жатқан макростың идентификаторы.

қорытындылар

Стандартты функционалдылықпен мәселені шешу тәсілі әлдеқайда күрделі және ұзағырақ. Әсіресе бағдарламалауды білсеңіз және сценарийге қажетті логиканы тез қоса алсаңыз.

Бұл тәсілдің айқын артықшылығы әртүрлі серверлер арасындағы шешімнің «тасымалдауы» болып табылады.

Мен үшін HTTP агентінің басқа элементтің деректеріне қол жеткізе алмайтыны және оларды сұрау мәтінінде немесе тақырыптарында ауыстыра алмайтыны таңқаларлық. ZBXNEXT-5993].

Дайын үлгі мүмкін GitHub сайтында жүктеп алыңыз.

Ақпарат көзі: www.habr.com

пікір қалдыру