Zabbix - макро хил хязгаарыг өргөжүүлэх

Үйлчлүүлэгчид зориулсан шийдэл гаргахад би Zabbix-ийн байнгын ажиллагаатай, сайхан шийдэхийг хүссэн 2 даалгавар гарч ирэв.

1 даалгавар. Микротик чиглүүлэгч дээрх програмын одоогийн хувилбарыг хянаж байна.

Даалгаврыг амархан шийддэг - HTTP загварт агент нэмэх замаар. Агент нь Mikrotik вэбсайтаас одоогийн хувилбарыг хүлээн авдаг бөгөөд гох нь одоогийн хувилбарыг одоогийн хувилбартай харьцуулж, зөрүү гарсан тохиолдолд анхааруулга өгдөг.

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

2 даалгавар. Өөр өөр HTTP агентуудад зөвшөөрлийн сессийг ашиглах.

Агент HTTP-ээр дамжуулан "хаалттай" хуудсуудаас мэдээлэл авах шаардлагатай үед зөвшөөрлийн күүки хэрэгтэй. Үүнийг хийхийн тулд ихэвчлэн "нэвтрэх / нууц үг" хосолсон стандарт зөвшөөрлийн маягт байдаг бөгөөд күүки дэх сессийн ID-г тохируулдаг.

Гэхдээ асуудал байна, энэ утгыг Толгой хэсэгт орлуулахын тулд нэг HTTP агентаас өөр зүйлийн өгөгдөлд хандах боломжгүй байна.

Мөн "Вэб скрипт" байдаг бөгөөд энэ нь өөр хязгаарлалттай бөгөөд энэ нь танд дүн шинжилгээ хийх, цаашид хадгалах агуулгыг авах боломжийг олгодоггүй. Та зөвхөн хуудаснууд дээр шаардлагатай хувьсагч байгаа эсэхийг шалгах эсвэл вэб скриптийн алхамуудын хооронд өмнө нь хүлээн авсан хувьсагчдыг дамжуулах боломжтой.

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

Zabbix нь сайн, нарийвчилсан API баримт бичигтэй. API-ээр өгөгдөл солилцохын тулд Json өгөгдлийн форматыг ашигладаг. Дэлгэрэнгүй мэдээллийг эндээс авах боломжтой албан ёсны баримт бичиг.

Бидэнд хэрэгтэй өгөгдлийг олж авах, тэдгээрийг макрод бүртгэх үйлдлүүдийн дарааллыг доорх диаграммд харуулав.

Zabbix - макро хил хязгаарыг өргөжүүлэх

1 алхам

Эхний алхам нь нэг үйлдэл эсвэл олон үйлдлээс бүрдэж болно. Бүх үндсэн логикийг эхний алхамуудад тавьсан бөгөөд сүүлийн 3 алхам нь гол зүйл юм.

Миний жишээн дээр эхний алхам бол PBX дээр эхний даалгаварт зориулсан зөвшөөрлийн күүкиг авах явдал байв. Хоёрдахь даалгаврын хувьд би Mikrotik програмын одоогийн хувилбарын дугаарыг авсан.

Mikrotik програмын одоогийн хувилбаруудын 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 - хэрэглэгчийн баталгаажуулалтын түлхүүр; Бидэнд хараахан байхгүй байгаа тул үүнийг null гэж тохируулъя.

API-тай ажиллахын тулд би хязгаарлагдмал эрхтэй тусдаа данс үүсгэсэн. Нэгдүгээрт, та шаардлагагүй газарт нэвтрэх эрх өгөх шаардлагагүй. Хоёрдугаарт, 5.0 хувилбараас өмнө макрогоор дамжуулан тохируулсан нууц үгийг уншиж болно. Үүний дагуу, хэрэв та Zabbix администраторын нууц үг ашигладаг бол админ дансыг хулгайлахад хялбар байдаг.

Энэ нь гуравдагч этгээдийн скриптээр дамжуулан API-тай ажиллах, итгэмжлэлийг хажуу талд нь хадгалах үед ялангуяа үнэн байх болно.

5.0 хувилбараас хойш макрод хадгалагдсан нууц үгээ нуух сонголт байдаг.

Zabbix - макро хил хязгаарыг өргөжүүлэх

API-ээр дамжуулан өгөгдлийг шинэчлэх тусдаа данс үүсгэхдээ вэб интерфэйсээр дамжуулан шаардлагатай өгөгдөл байгаа эсэх, түүнийг шинэчлэх боломжтой эсэхийг шалгаарай. Би шалгаагүй, дараа нь надад хэрэгтэй макро яагаад API дээр харагдахгүй байгааг удаан хугацаанд ойлгохгүй байсан.

Zabbix - макро хил хязгаарыг өргөжүүлэх

API-д зөвшөөрөл авсны дараа бид макросын жагсаалтыг авах болно.

3 алхам

API нь хостын макро нэрээр нь шинэчлэхийг зөвшөөрдөггүй тул та эхлээд макро ID-г авах ёстой. Түүнээс гадна, тодорхой хостын макроны жагсаалтыг авахын тулд та энэ хостын ID-г мэдэх шаардлагатай бөгөөд энэ нь нэмэлт хүсэлт юм. Өгөгдмөл макро ашиглах {HOST ID} хүсэлт гаргахыг зөвшөөрөхгүй. Би ийм хязгаарлалтыг тойрч гарахаар шийдсэн:

Zabbix - макро хил хязгаарыг өргөжүүлэх

Би энэ хостын ID-тай локал макро үүсгэсэн. Вэб интерфэйсээс хост ID-г олох нь маш амархан.

Өгөгдсөн хост дээрх бүх макросын жагсаалт бүхий хариултыг загвараар шүүж болно:

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

Zabbix - макро хил хязгаарыг өргөжүүлэх

Тиймээс бид хэрэгтэй макро ID-г хаанаас авдаг 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 АЛХАМ - макро шинэчлэх

Одоо бид шинэчлэх шаардлагатай макро ID, зөвшөөрлийн күүки эсвэл чиглүүлэгчийн програм хангамжийн хувилбарыг мэдэж байна. Та макро өөрөө шинэчлэх боломжтой.

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
}

{микротик_хувилбар} эхний алхамд олж авсан утга юм. Миний жишээнд одоогийн микротик програмын хувилбар
{hostmacroid} - утгыг гурав дахь алхамд олж авсан - бидний шинэчилж буй макроны id.

үр дүн нь

Стандарт функцээр асуудлыг шийдэх арга нь илүү төвөгтэй бөгөөд урт юм. Ялангуяа та програмчлалыг мэддэг бөгөөд скриптэд шаардлагатай логикийг хурдан нэмж чаддаг бол.

Энэ аргын илэрхий давуу тал нь өөр өөр серверүүдийн хооронд шийдлийн "зөөврийн чадвар" юм.

Миний хувьд HTTP агент өөр зүйлийн өгөгдөлд хандаж, хүсэлтийн үндсэн хэсэг эсвэл толгой хэсэгт орлуулах боломжгүй байгаа нь хачирхалтай. ZBXNEXT-5993].

Дууссан загвар болно GitHub дээр татаж авах.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх