Заббик - ширење граница макроа

Приликом израде решења за клијента појавила су се 2 задатка које сам желео да решим лепо и са редовном Заббик функционалношћу.

Циљ 1. Праћење тренутне верзије фирмвера на Микротик рутерима.

Задатак се решава лако - додавањем агента у ХТТП шаблон. Агент прима тренутну верзију са Микротик веб странице, а окидач упоређује тренутну верзију са тренутном и издаје упозорење у случају неслагања.

Када имате 10 рутера, такав алгоритам није критичан, али шта да радите са 3000 рутера? Послати 3000 захтева серверу? Наравно, таква шема ће функционисати, али сама идеја од ​​3000 захтева ми није одговарала, желео сам да пронађем друго решење. Поред тога, и даље је постојао недостатак таквог алгоритма: друга страна може да преброји толики број захтева са једног ИП-а за ДоС напад, може га једноставно забранити.

Циљ 2. Коришћење сесије ауторизације у различитим ХТТП агентима.

Када агент треба да прими информације са „затворених“ страница преко ХТТП-а, потребан је ауторизациони колачић. Да бисте то урадили, обично постоји стандардни формулар за ауторизацију са паром „пријава/лозинка“ и подешавањем ИД-а сесије у колачићу.

Али постоји проблем, немогуће је приступити подацима друге ставке из једне ставке ХТТП агента да би се ова вредност заменила у заглављу.

Постоји и „Веб скрипта“, има још једно ограничење, не дозвољава вам да добијете садржај за анализу и даље чување. Можете само проверити присуство потребних променљивих на страницама или прослеђивати претходно примљене променљиве између корака веб скрипте.

Након што сам мало размислио о овим задацима, одлучио сам да користим макрое који су савршено видљиви у било ком делу система за праћење: у шаблонима, хостовима, окидачима или ставкама. И можете ажурирати макрое преко АПИ-ја веб интерфејса.

Заббик има добру и детаљну АПИ документацију. За размену података преко АПИ-ја користи се Јсон формат података. Детаљи се могу наћи у званична документација.

Редослед акција за добијање података који су нам потребни и њихово снимање у макро приказан је на дијаграму испод.

Заббик - ширење граница макроа

Корак КСНУМКС

Први корак се може састојати од једне акције или више радњи. Сва главна логика је положена у првим корацима, а последња 3 корака су главна.

У мом примеру, први корак је био да добијете ауторизационе колачиће на ПБКС-у за први задатак. За други задатак добио сам број тренутне верзије Микротик фирмвера.

УРЛ тренутних верзија Микротик фирмвера

Овим адресама приступа сама Микротик опрема када се прими најновија доступна верзија фирмвера.

Први корак је потпуно индивидуалан за сваки случај и логика његовог рада може бити другачија. Све зависи од вашег задатка.

Када радите са веб скриптовима, пратите који вам је метод одговора потребан. Наслови ХТТП одговор или селф тело одговор без заглавља?
Ако су потребни колачићи за ауторизацију, подесите метод одговора Наслови као у случају Астериск.

Ако су вам потребни подаци, као у случају одговора микротик сервера, ставите тело одговор без заглавља.

Корак КСНУМКС

Пређимо на други корак. Добијање сесије ауторизације:

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
}

јсонрпц је верзија ЈСОН-РПЦ протокола која се користи;
Заббик имплементира ЈСОН-РПЦ верзију 2.0;

  • метод - метод који се позива;
  • парамс - параметри који се прослеђују методом;
  • ид је произвољан идентификатор захтева;
  • аутх - кључ за аутентификацију корисника; пошто га још немамо, поставимо га на нулл.

Да бих радио са АПИ-јем, направио сам посебан налог са ограниченим правима. Прво, не морате да дајете приступ тамо где вам није потребно. И друго, пре верзије 5.0, лозинка постављена преко макроа могла је да се прочита. Сходно томе, ако користите Заббик администраторску лозинку, администраторски налог је лако украсти.

Ово ће бити посебно тачно када радите са АПИ-јем преко скрипти трећих страна и чувате акредитиве са стране.

Од верзије 5.0 постоји опција за скривање лозинке сачуване у макроу.

Заббик - ширење граница макроа

Када креирате посебан налог за ажурирање података преко АПИ-ја, обавезно проверите да ли су подаци који су вам потребни доступни преко веб интерфејса и да ли је могуће да их ажурирате. Нисам проверио, а онда дуго нисам могао да разумем зашто макро који ми је био потребан није био видљив у АПИ-ју.

Заббик - ширење граница макроа

Након што добијемо ауторизацију у АПИ-ју, прелазимо на добијање листе макроа.

Корак КСНУМКС

АПИ вам не дозвољава да ажурирате макро хост по имену, прво морате да добијете ИД макроа. Штавише, да бисте добили листу макроа за одређени хост, морате знати ИД овог хоста, а ово је додатни захтев. Користите подразумевани макро {ХОСТ ИД} у захтеву није дозвољено. Одлучио сам да заобиђем ограничење овако:

Заббик - ширење граница макроа

Направио сам локални макро са ИД-ом овог хоста. Проналажење ИД-а домаћина је веома лако преко веб интерфејса.

Одговор са листом свих макроа на датом хосту може се филтрирати помоћу обрасца:

regex:{"hostmacroid":"([0-9]+)"[A-z0-9,":]+"{$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
}

Вариабле {сид} добијена у другом кораку и биће стално коришћена, где треба да радите са АПИ интерфејсом.

Последњи 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
}

{микротик_версион} је вредност добијена у првом кораку. У мом примеру, верзија тренутног фирмвера микротик
{хостмацроид} - вредност је добијена у трећем кораку - ид макроа који ажурирамо.

Налази

Приступ решавању проблема са стандардном функционалношћу је много компликованији и дужи. Нарочито ако знате програмирање и можете брзо да додате потребну логику у скрипту.

Очигледна предност овог приступа је „преносивост“ решења између различитих сервера.

За мене лично, чудно је да ХТТП агент не може да приступи подацима друге ставке и да их замени у телу или заглављу захтева [ ЗБКСНЕКСТ-5993].

Готови шаблон може преузмите на ГитХуб-у.

Извор: ввв.хабр.цом

Додај коментар