Zabbix - மேக்ரோ எல்லைகளை விரிவுபடுத்துகிறது

ஒரு கிளையண்டிற்கான தீர்வை உருவாக்கும் போது, ​​நான் அழகாகவும் வழக்கமான Zabbix செயல்பாட்டுடன் தீர்க்க விரும்பிய 2 பணிகள் எழுந்தன.

பணி மைக்ரோடிக் ரவுட்டர்களில் தற்போதைய ஃபார்ம்வேர் பதிப்பைக் கண்காணித்தல்.

HTTP டெம்ப்ளேட்டில் ஒரு முகவரைச் சேர்ப்பதன் மூலம் - பணி எளிதில் தீர்க்கப்படுகிறது. Mikrotik இணையதளத்தில் இருந்து முகவர் தற்போதைய பதிப்பைப் பெறுகிறார், மேலும் தூண்டுதல் தற்போதைய பதிப்பை தற்போதைய பதிப்போடு ஒப்பிட்டு, முரண்பாடு ஏற்பட்டால் எச்சரிக்கையை வெளியிடுகிறது.

உங்களிடம் 10 ரவுட்டர்கள் இருக்கும்போது, ​​அத்தகைய அல்காரிதம் முக்கியமானதல்ல, ஆனால் 3000 ரவுட்டர்களை என்ன செய்வது? சேவையகத்திற்கு 3000 கோரிக்கைகளை அனுப்பவா? நிச்சயமாக, அத்தகைய திட்டம் வேலை செய்யும், ஆனால் 3000 கோரிக்கைகளின் யோசனை எனக்கு பொருந்தவில்லை, நான் மற்றொரு தீர்வைக் கண்டுபிடிக்க விரும்பினேன். கூடுதலாக, அத்தகைய வழிமுறையில் இன்னும் ஒரு குறைபாடு உள்ளது: மறுபுறம் ஒரு DoS தாக்குதலுக்காக ஒரு IP இலிருந்து பல கோரிக்கைகளை எண்ணலாம், அவர்கள் அதை தடை செய்யலாம்.

பணி வெவ்வேறு HTTP முகவர்களில் அங்கீகார அமர்வைப் பயன்படுத்துதல்.

ஒரு முகவர் HTTP வழியாக "மூடப்பட்ட" பக்கங்களிலிருந்து தகவலைப் பெற வேண்டியிருக்கும் போது, ​​ஒரு அங்கீகார குக்கீ தேவை. இதைச் செய்ய, வழக்கமாக "உள்நுழைவு / கடவுச்சொல்" ஜோடியுடன் நிலையான அங்கீகார படிவம் உள்ளது மற்றும் குக்கீயில் அமர்வு ஐடியை அமைக்கிறது.

ஆனால் ஒரு சிக்கல் உள்ளது, ஹெடரில் இந்த மதிப்பை மாற்ற ஒரு HTTP ஏஜென்ட் உருப்படியிலிருந்து மற்றொரு உருப்படியின் தரவை அணுக முடியாது.

ஒரு "வெப் ஸ்கிரிப்ட்" உள்ளது, இது மற்றொரு வரம்பைக் கொண்டுள்ளது, இது பகுப்பாய்வு மற்றும் மேலும் சேமிப்பிற்கான உள்ளடக்கத்தைப் பெற உங்களை அனுமதிக்காது. பக்கங்களில் தேவையான மாறிகள் உள்ளதா என்பதை மட்டுமே நீங்கள் சரிபார்க்க முடியும் அல்லது வலை ஸ்கிரிப்ட் படிகளுக்கு இடையில் முன்பு பெறப்பட்ட மாறிகளை அனுப்பலாம்.

இந்த பணிகளைப் பற்றி சிறிது யோசித்த பிறகு, கண்காணிப்பு அமைப்பின் எந்தப் பகுதியிலும் சரியாகத் தெரியும் மேக்ரோக்களைப் பயன்படுத்த முடிவு செய்தேன்: டெம்ப்ளேட்கள், ஹோஸ்ட்கள், தூண்டுதல்கள் அல்லது உருப்படிகளில். நீங்கள் வலை இடைமுகம் API மூலம் மேக்ரோக்களை புதுப்பிக்கலாம்.

Zabbix நல்ல மற்றும் விரிவான API ஆவணங்களைக் கொண்டுள்ளது. Api வழியாக தரவு பரிமாற்றத்திற்கு, Json தரவு வடிவம் பயன்படுத்தப்படுகிறது. விவரங்களைக் காணலாம் அதிகாரப்பூர்வ ஆவணங்கள்.

நமக்குத் தேவையான தரவைப் பெறுவதற்கும் அவற்றை மேக்ரோவில் பதிவுசெய்வதற்குமான செயல்களின் வரிசை கீழே உள்ள வரைபடத்தில் காட்டப்பட்டுள்ளது.

Zabbix - மேக்ரோ எல்லைகளை விரிவுபடுத்துகிறது

1 விலக

முதல் படியில் ஒரு செயல் அல்லது பல செயல்கள் இருக்கலாம். அனைத்து முக்கிய தர்க்கங்களும் முதல் படிகளில் வைக்கப்பட்டுள்ளன, மேலும் கடைசி 3 படிகள் முக்கியமானவை.

எனது எடுத்துக்காட்டில், முதல் பணிக்கான அங்கீகார குக்கீகளை PBX இல் பெறுவது முதல் படியாகும். இரண்டாவது பணிக்காக, மைக்ரோடிக் ஃபார்ம்வேரின் தற்போதைய பதிப்பின் எண்ணைப் பெற்றேன்.

Mikrotik firmware இன் தற்போதைய பதிப்புகளின் URL

சமீபத்திய ஃபார்ம்வேர் பதிப்பைப் பெறும்போது, ​​இந்த முகவரிகள் Mikrotik உபகரணங்களால் அணுகப்படும்.

ஒவ்வொரு வழக்கிற்கும் முதல் படி முற்றிலும் தனிப்பட்டது மற்றும் அதன் வேலையின் தர்க்கம் வேறுபட்டிருக்கலாம். இது அனைத்தும் உங்கள் பணியைப் பொறுத்தது.

வலை ஸ்கிரிப்டிங்குடன் பணிபுரியும் போது, ​​உங்களுக்கு எந்த மறுமொழி முறை தேவை என்பதைக் கண்காணிக்கவும். தலைப்புகள் 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 ஐ செயல்படுத்துகிறது;

  • முறை - எனப்படும் முறை;
  • அளவுருக்கள் - முறை மூலம் அனுப்பப்படும் அளவுருக்கள்;
  • ஐடி ஒரு தன்னிச்சையான கோரிக்கை அடையாளங்காட்டி;
  • அங்கீகாரம் - பயனர் அங்கீகார விசை; எங்களிடம் இன்னும் இல்லாததால், அதை பூஜ்யமாக அமைப்போம்.

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
}

மாறி {sid} இரண்டாவது கட்டத்தில் பெறப்பட்டது மற்றும் தொடர்ந்து பயன்படுத்தப்படும், அங்கு நீங்கள் 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} முதல் படியில் பெறப்பட்ட மதிப்பு. எனது எடுத்துக்காட்டில், தற்போதைய மைக்ரோடிக் ஃபார்ம்வேரின் பதிப்பு
{hostmacroid} - மதிப்பு மூன்றாவது கட்டத்தில் பெறப்பட்டது - நாங்கள் புதுப்பிக்கும் மேக்ரோவின் ஐடி.

கண்டுபிடிப்புகள்

நிலையான செயல்பாட்டுடன் சிக்கலைத் தீர்ப்பதற்கான அணுகுமுறை மிகவும் சிக்கலானது மற்றும் நீண்டது. குறிப்பாக உங்களுக்கு புரோகிராமிங் தெரிந்திருந்தால், தேவையான லாஜிக்கை ஸ்கிரிப்ட்டில் விரைவாக சேர்க்க முடியும்.

இந்த அணுகுமுறையின் வெளிப்படையான நன்மை வெவ்வேறு சேவையகங்களுக்கிடையேயான தீர்வின் "பெயர்வுத்திறன்" ஆகும்.

தனிப்பட்ட முறையில் என்னைப் பொறுத்தவரை, HTTP முகவரால் வேறொரு பொருளின் தரவை அணுக முடியாது மற்றும் கோரிக்கைப் பகுதி அல்லது தலைப்புகளில் அவற்றை மாற்ற முடியாது [ ZBXNEXT-5993].

முடிக்கப்பட்ட டெம்ப்ளேட் முடியும் GitHub இல் பதிவிறக்கவும்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்