Zabbix - макро чек араларды кеңейтүү

Кардар үчүн чечим кабыл алып жатканда, мен Zabbixтин үзгүлтүксүз иштеши менен кооз жана чечүүнү каалаган 2 тапшырма пайда болду.

Тапшырма 1. Микротик роутерлеринде учурдагы микропрограмманын версиясына көз салуу.

Милдет оңой чечилет - HTTP шаблонуна агент кошуу менен. Агент микротик веб-сайтынан учурдагы версияны алат, ал эми триггер учурдагы версияны учурдагы версия менен салыштырып, дал келбеген учурда эскертүү берет.

Сизде 10 роутер болгондо, мындай алгоритм критикалык эмес, бирок 3000 роутер менен эмне кылуу керек? Серверге 3000 суроо жөнөтөсүзбү? Албетте, мындай схема иштейт, бирок 3000 суроо идеясы мага туура келбеди, мен башка чечим тапкым келди. Мындан тышкары, мындай алгоритмде дагы эле кемчилик бар болчу: экинчи тарап DoS чабуулу үчүн бир IPден ушунча сандагы суроо-талаптарды санай алат, алар жөн гана тыюу салышы мүмкүн.

Тапшырма 2. Ар кандай HTTP агенттеринде авторизациялоо сессиясын колдонуу.

Агент HTTP аркылуу "жабык" барактардан маалымат алуу керек болгондо, авторизация куки керек болот. Бул үчүн, адатта, "логин/парол" түгөйү жана кукиде сеанс идентификаторун коюу менен стандарттуу авторизация формасы бар.

Бирок маселе бар, бул маанини Баш тилкеге ​​алмаштыруу үчүн бир HTTP агентинен башка нерсенин маалыматтарына кирүү мүмкүн эмес.

Ошондой эле "Веб скрипт" бар, анын дагы бир чектөөсү бар, ал талдоо жана андан ары сактоо үчүн мазмунду алууга мүмкүндүк бербейт. Сиз барактарда керектүү өзгөрмөлөрдүн бар-жоктугун гана текшере аласыз же веб скрипт кадамдарынын ортосунда мурда кабыл алынган өзгөрмөлөрдү өткөрө аласыз.

Бул тапшырмалар жөнүндө бир аз ойлонуп көргөндөн кийин, мен мониторинг системасынын каалаган бөлүгүндө: шаблондордо, хосттордо, триггерлерде же элементтерде эң сонун көрүнүп турган макросторду колдонууну чечтим. Жана веб интерфейс API аркылуу макросторду жаңырта аласыз.

Zabbix жакшы жана деталдуу API документтерге ээ. API аркылуу маалымат алмашуу үчүн Json маалымат форматы колдонулат. чоо-жайын табууга болот расмий документтер.

Бизге керектүү маалыматтарды алуу жана аларды макродо жазуу боюнча аракеттердин ырааттуулугу төмөнкү диаграммада көрсөтүлгөн.

Zabbix - макро чек араларды кеңейтүү

кадам 1

Биринчи кадам бир же бир нече аракеттерден турушу мүмкүн. Бардык негизги логика биринчи кадамдарда коюлат, ал эми акыркы 3 кадам негизги болуп саналат.

Менин мисалымда, биринчи кадам биринчи тапшырма үчүн АТСте авторизация кукилерин алуу болду. Экинчи тапшырма үчүн мен Микротик микропрограммасынын учурдагы версиясынын номерин алдым.

Микротик микропрограммасынын учурдагы версияларынын URL дареги

Бул даректерге Микротик жабдыктын өзү эң акыркы жеткиликтүү микропрограмма версиясы алынганда кире алат.

Биринчи кадам ар бир учур үчүн толугу менен жеке жана анын ишинин логикасы ар кандай болушу мүмкүн. Мунун баары сиздин милдетиңизден көз каранды.

Веб скрипт менен иштөөдө сизге кайсы жооп ыкмасы керек экенине көз салыңыз. Аталыштар HTTP жооп же өз алдынча тело баш аты жок жоопбу?
Эгер авторизация кукилери керек болсо, жооп берүү ыкмасын коюңуз Аталыштар Жылдызчадагыдай.

Эгер сизге микротик сервердин жоопундагыдай маалымат керек болсо, коюңуз дене баш аты жок жооп.

кадам 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 версиясын ишке ашырат;

  • метод - деп аталган ыкма;
  • парамдар - метод аркылуу өтүүчү параметрлер;
  • id ыктыярдуу сурам идентификатору;
  • auth - колдонуучунун аутентификация ачкычы; бизде али жок болгондуктан, келгиле, аны нөл деп коёлу.

API менен иштөө үчүн мен чектелген укуктары менен өзүнчө аккаунт түздүм. Биринчиден, сизге кереги жок жерге кирүүнүн кереги жок. Экинчиден, 5.0 версиясына чейин макро аркылуу коюлган сырсөздү окууга болот. Демек, Zabbix администраторунун сырсөзүн колдонсоңуз, администратордун эсебин уурдоо оңой.

Бул үчүнчү тараптын скрипттери аркылуу API менен иштөөдө жана эсептик дайындарды капталда сактоодо өзгөчө туура болот.

5.0 версиясынан бери макродо сакталган сырсөздү жашыруу мүмкүнчүлүгү бар.

Zabbix - макро чек араларды кеңейтүү

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

Zabbix - макро чек араларды кеңейтүү

API'де уруксат алгандан кийин, макростордун тизмесин алууга киришебиз.

кадам 3

API хост макросун аты боюнча жаңыртууга жол бербейт, адегенде макрос ID алышыңыз керек. Андан тышкары, белгилүү бир хост үчүн макростордун тизмесин алуу үчүн, сиз бул хосттун идентификаторун билишиңиз керек жана бул кошумча өтүнүч. Демейки макросту колдонуңуз {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
}

Variable {сид} экинчи кадамда алынган жана сиз 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 боюнча жүктөп алуу.

Source: www.habr.com

Комментарий кошуу