Սա հոդվածի վերջին մասն է, ահա սկիզբը
Նախորդ անգամ, երբ ես գրեցի, թե ինչպես եմ իրականացրել սարքի մոնիտորինգը, հիմա մենք կխոսենք կառավարման մասին: Հաճախորդի կողմից «տեխնիկների» հետ քննարկումների ժամանակ ես հաճախ հանդիպում եմ նման փոքր սարքերի հնարավորությունների սահմանափակ ընկալման (ցածր հիշողության ռեսուրսներով և կատարողականությամբ), շատերը կարծում են, որ «ամենից շատ մեզ անհրաժեշտ է վերաբեռնում ուղարկելը, ավելին: լուրջ, մենք թիմ կուղարկենք»:
Բայց պրակտիկան ցույց է տալիս, որ դա ամբողջովին ճիշտ չէ:
- Ցանցի ախտորոշում և անսարքությունների վերացում: Ձեր երթուղիչի Ethernet պորտի հետևում սովորաբար կա մեկ այլ սարքաշար, որն ունի իր ներքին IP հասցեն: Երբեմն, դուք կարող եք (պետք է) «պինգ» անել այն: Կամ թունելի կառավարում. եթե հանկարծ թունելը չբարձրանա երթուղիչի վրա, որն աշխատում է 3G մոդեմի միջոցով, բայց մենք կարող ենք տեսնել հենց երթուղիչը:
- Համակարգի սպասարկում. Որոնվածի թարմացում, ծառայության սցենարի թարմացում:
- Հավասարակշռող ակտ. Սա կարելի է անվանել «այլասերվածություն», բայց «հավասարակշռող» հասկացությունը, ինչպես ես մեջբերում եմ. «Կրկեսի կատարողի ունակությունը հավասարակշռություն պահպանելու մարմնի անկայուն դիրքում» - ավելի լավ է տեղավորվում: Նման իրավիճակները առաջանում են հաճախորդի սահմանափակ բյուջեի պատճառով: Ստորև բերեցի մի քանի օրինակ, բայց... Դրանք ուղղակիորեն կապված չեն պատմվածքի թեմայի հետ, ես դրանք դնում եմ գրառումների մեջ
Wi-Fi մոնիտորինգՆորաձև թեմա վերջին հինգ տարիների ընթացքում, հիմնականում դաշնային մանրածախ ցանցերի շրջանում: Դուք հանգիստ զբոսնում եք առևտրի հարկերում, և ձեր բջջային հեռախոսը միացված Wi-Fi-ով, փորձելով «կպչել» ցանցի ինչ-որ շղթային, պարբերաբար ուղարկում է Probe Request փաթեթներ, որոնք կարող են վերլուծվել՝ հաշվարկելու համար։ դուք. Որքա՞ն հաճախ եք գալիս այս խանութ, ինչ պատճառներով եք քայլում հետագծերով և այլն: Այնուհետև հավաքվում են տվյալները, վերլուծվում, գծվում են ջերմային քարտեզներ, և մենեջերները նման նկարների համար գումար են «շորթում» ղեկավարությունից կամ ներդրողներից։ Դե, առայժմ․․․ «փող չկա, բայց դու դիմադրիր...», իսկ արդյունքը (իրական) արդեն պետք է ցույց տալ, սկսվում է հին բարի երգը՝ «Այո, այո, հետո իհարկե մենք։ կտեղադրի cis-ը և այն ամենը, ինչ ցանկանում եք, բայց հիմա մենք պետք է հաճախորդին ցույց տանք արդյունքը: Ի դեպ, մենք մոռացանք ասել, որ Հաճախորդը մեզ թույլ է տվել Wi-Fi-ի միջոցով մեր սարքավորումները միացնել իր «hotspot»-ին, բայց ընդհանուր հիմունքներով, այնպես, կարծես մենք հյուր հաճախորդներ լինենք»։ Եվ այսպես, մենք պետք է հավասարակշռող երթուղիչներ ստեղծենք. մի քանի WiFi ենթամիջերեսներ են բարձրացվում, որոնցից մեկը կպչում է թեժ կետին, իսկ երկրորդը վերահսկում է շրջակա միջավայրը, խելագարորեն վերբեռնում է tcpdump արդյունքը իր մեջ, այնուհետև ֆայլի բովանդակությունը փաթեթավորում է արխիվ և վտանգում: «չափից շատ ուտելուց» մահանալը փորձում է թքել FTP սերվերի բովանդակությունը: Զարմանալի չէ, որ հավասարակշռող երթուղիչը հաճախ «փչանում է» և ինչ-որ կերպ պետք է «վերակենդանացվի» հեռակա կարգով:
շառավիղԱվելի հեշտ է նկարագրել իրավիճակը այստեղ հաճախորդի այս հայտարարությամբ. «Մենք ցանկանում ենք թեժ կետերի ապակենտրոնացված ցանց, որը կաշխատի այն սարքավորումների վրա, որոնց մոդելը նախապես հայտնի չէ, ալիքների միջոցով, բայց որոնք մենք դեռ չգիտենք: Օ, մոռացանք ասել, որ մենք ոչ միայն ցանկանում ենք գովազդ ցուցադրել հաճախորդներին, այլև վերլուծել ամեն ինչ այն վայրի շուրջ, որտեղ տեղադրված է թեժ կետը: Ոչ, մենք դեռ չգիտենք, թե ինչու, բայց մենք դա կպարզենք, մի կասկածեք, մենք կարողացանք այս գաղափարը բերել»:
Եվ մենք չպետք է մոռանանք, որ նախկինում անհայտ բազմաթիվ հանգամանքների պատճառով հսկողությունը պետք է իրականացվի ոչ ստանդարտ պայմաններում, երբ մենք չենք կարող միանալ երթուղիչին անմիջապես IP-ի միջոցով՝ նավահանգիստով և ստիպված ենք պարզապես սպասել նրանից գործողության: Եթե մենք վերացարկենք ինքներս մեզ, ապա սերվերի և երթուղիչի միջև երկխոսությունը կարող է ներկայացվել այսպես.
- Ուղղորդիչ: Բարեւ Ձեզ. Ես այսինչ երթուղիչն եմ, ինձ համար առաջադրանքներ կա՞ն։
- Սերվերերթուղիչ այսինչ, ես գրանցել եմ, որ ողջ ես։ Ահա մարտահրավերը. ցույց տվեք ifconfig հրամանի արդյունքը:
- Ուղղորդիչ: Բարեւ Ձեզ. Ես այսինչ երթուղիչն եմ, վերջին անգամ խնդրեցիր ցույց տալ ifconfig-ի արդյունքը, ահա այն։ Ինձ համար առաջադրանքներ կա՞ն:
- Սերվերերթուղիչ այսինչ, ես գրանցել եմ, որ ողջ ես։ Ձեզ համար առաջադրանքներ չկան:
Ամենահետաքրքիր հարցը. ինչպե՞ս կարող է հեռավոր երթուղիչը որոշակի քանակությամբ տեղեկատվություն ուղարկել: Վերջին մասում ես նկարագրեցի, որ սահմանափակ ռեսուրսների պատճառով երթուղիչն ունի միայն «կտրված» wget, որն աշխատում է միայն GET-ի միջոցով և ոչ մի այլ բան. չկա FTP-հաճախորդ կամ curl: Ավելի ճիշտ, մեզ անհրաժեշտ է ունիվերսալ մեթոդ՝ անկախ պատկերների հավաքման առանձնահատկություններից։ Ես որոշեցի օգտագործել wget-ը: Ավելի ճիշտ, ինչպես ես «կանգնեցի» - ես պարզապես այլընտրանք չունեի :)
Պարզապես հերքումԻմ կառավարման լուծումն աշխատում է, ոչ շատ սահմանափակ, և ես վստահ եմ, որ այն ծուռ է, նույնիսկ եթե այն համապատասխանում է իմ հաճախորդների մեծ մասին: Ինչպե՞ս կարող եք դա անել խելամտորեն. գրել մի փոքրիկ օգտակար ծրագիր, որն ուղարկում է POST երկուական տվյալներ 80 պորտի միջոցով: Ներառեք այն (կոմունալը) երթուղիչի որոնվածում և մուտք գործեք այն bash-ի միջոցով: Բայց իրականությունն այն է, որ ա) մենք պետք է արագ, բ) մենք, հավանաբար, պետք է ամեն ինչ անենք գոյություն ունեցող «երթուղիչների կենդանաբանական այգում» գ) «մի վնասիր»: — եթե երթուղիչն աշխատում է և այլ առաջադրանքներ է կատարում, փորձեք փոփոխություններ կատարել, որոնք չեն ազդի առկա ֆունկցիոնալության վրա:
Անցնենք իրականացմանը։ Ենթադրենք, ձեր հաճախորդը ցանկանում է հեշտությամբ և բնականաբար վերագործարկել երթուղիչը zabbix-ից՝ «մկնիկի սեղմումով»: Այսօր մենք կսկսենք նկարագրել իրականացումը Zabbix-ի հետ:
«Կառավարում» -> «Սցենարներ» ընտրացանկում ավելացրեք նոր սցենար: Մենք այն անվանում ենք «Reboot», որպես հրաման մուտքագրում ենք «php /usr/share/zabbix/reboot.php {HOST.HOST}»:
Հաջորդը. «Մոնիտորինգ» ընտրացանկ -> «Վերջին տվյալներ» - «Աջ սեղմեք ցանկալի ցանցի հանգույցի վրա»: Ահա թե ինչպիսի տեսք կունենա ընտրացանկը սցենարը ավելացնելուց հետո:
Համապատասխանաբար, մենք տեղադրում ենք reboot.php սցենարը /usr/share/zabbix գրացուցակում (ձերը կարող է տարբեր լինել, ես օգտագործում եմ zabbixa արմատային գրացուցակը):
Անվտանգության հերքումԲացատրությունը սկրիպտում ավելի պարզ դարձնելու համար ես օգտագործում եմ միայն երթուղիչի ID-ն, բայց չեմ օգտագործում գաղտնաբառը։ Խորհուրդ չի տրվում դա անել արտադրական տարբերակում: Ինչու ես դա արեցի, քանի որ մեծ հարցն այն է, թե որտեղ պահել գաղտնաբառերը երթուղիչների համար: Ինքը՝ zabbixe-ում «գույքագրման տվյալներում». Հակասական պրակտիկա. Այլընտրանք. սահմանափակել արտաքին մուտքը դեպի reboot.php ֆայլը
Ֆայլ reboot.php
<?php
// присваиваем параметры с консоли переменным
$user = $argv[1];
// ВНИМАНИЕ. Вот здесь в целях безопасности все-таки прописывать пароль устройства! Но для демонстрации мы будем обращаться к базе данных без использования пароля.
//$password = $argv[2];
$conn=new mysqli("localhost","db_user","db_password","db_name");
if (mysqli_connect_errno()) {
exit();
}
$conn->set_charset("utf8");
// "Отправляем" команду reboot за счет изменения поля task таблицы users. В поле task можно отправлять любую команду.
$sql_users=$conn->prepare("UPDATE users SET task='reboot' WHERE id=? AND status='active';");
$sql_users->bind_param('s', $user);
$sql_users->execute();
$sql_users->close();
?>
Այսքանը: Հարցը բաց է մնում՝ «ինչպես ստանալ սարքից հրամանի կատարման արդյունքը»։ Եկեք նայենք առաջադրանքին՝ օգտագործելով ifconfig հրամանը որպես օրինակ: Այս հրամանը կարող է ուղարկվել սարքին.
message=`ifconfig`; wget "http://xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php?u=user&p=password!&m=$message" -O /tmp/out.txt
, Որտեղ:
message=`ifconfig` — ifconfig հրամանի արդյունքը վերագրում ենք $message փոփոխականին
wget "
u=user&p=գաղտնաբառ!&m=$հաղորդագրություն — հավատարմագրերը և հարցման փոփոխականի արժեքը m — վերագրում է $message փոփոխականի բովանդակությունը
-O /tmp/out.txt — մեզ այս դեպքում /tmp/out.txt ֆայլի ելք պետք չէ, բայց եթե այս պարամետրը նշված չէ, wget-ը չի աշխատում։
Ինչու սա չի աշխատում:Քանի որ դա անվտանգության պոտենցիալ փոս է: Ամենաանվնաս սխալը, որը կարող է պատահել, այն է, եթե, օրինակ, ձեր հրամանի ելքում կա «&» նիշը: Ուստի անհրաժեշտ է զտել և՛ այն ամենը, ինչ ուղարկվում է երթուղիչներից, և՛ այն ամենը, ինչ գալիս է սերվեր։ Այո, ես իսկապես ամաչում եմ: Ի պաշտպանություն իմ, ես կարող եմ միայն գրել, որ ամբողջ հոդվածը նվիրված է այն հարցին, թե ինչպես կառավարել երթուղիչները նախապես սահմանված որոնվածով և կապի ուղիներով, որոնք նախապես սահմանված չեն:
Դե, սկիզբ ապագայի համար. ես դեռ չեմ հասկացել, թե ինչպես օգտագործել ստանդարտ zabbix գործիքները, որպեսզի արտացոլեն արդյունքները (օրինակ՝ հրամանի կատարման արդյունքը), որոնք գալիս են սերվեր:
Հիշեցնում եմ ձեզ, որ բոլոր աղբյուրները կարելի է ձեռք բերել Git պահոցից հետևյալ հասցեով.
Source: www.habr.com