Խնդրի պատմություն
Փոքր ընկերությունները, մի կողմից, կարիք ունեն իրենց ենթակառուցվածքի բարձր որակի մոնիտորինգի (հատկապես համատարած վիրտուալացման լույսի ներքո), մյուս կողմից՝ նրանց համար ֆինանսապես դժվար է նոր սարքավորումներ ձեռք բերել: Սերվերի/ապարատային խնդիրները նույնպես տարածված են. հաճախ օգտատերերի աշխատատեղերի կողքին կամ փոքր խորշում/պահարանում կան 1-3 աշտարակային սերվերներ:
Ավելի հեշտ է օգտագործել պատրաստի հավաքույթը (բաշխումը), որը պարզապես անհրաժեշտ է բեռնել microSD քարտ և տեղադրել ընդհանուր մեկ տախտակով համակարգչի մեջ (beaglebone, raspberry pi և orange pi ընտանիքներ, asus tinker board): Բացի այդ, նման սարքավորումները էժան են և կարող են տեղադրվել ցանկացած վայրում:
Խնդրի ձևակերպում
Շատ առումներով նախագիծը զարգացավ որպես լաբորատոր աշխատանքի մի տեսակ՝ արդյունքները կիրառելու հնարավորությամբ։
Zabbix-ն ընտրվել է որպես մոնիտորինգի համակարգ, քանի որ այն հզոր, ազատ և լավ փաստաթղթավորված համակարգ է:
Սարքավորման պլատֆորմի հետ կապված խնդիրը սրվել է։ Առանձին մեքենան մոնիտորինգի տակ դնելը նույնպես այնքան էլ լավ լուծում չէ՝ կա՛մ թանկ է նոր սարքավորումներ գնելը, կա՛մ հին սարքավորումներ փնտրելը + փոքր ընկերություններում հաճախակի են խնդիրներ սերվերի հետ/ ապարատային.
Buildroot build համակարգի օգտագործումը թույլ է տալիս ստեղծել մասնագիտացված լուծումներ, որոնք կարող են շահագործվել Linux օպերացիոն համակարգերի նվազագույն իմացությամբ անձնակազմի կողմից: Այս համակարգը բարեկամական է սկսնակների համար, բայց միևնույն ժամանակ ապահովում է հարմարեցման լայն հնարավորություններ փորձառու մշակողի ձեռքում: Այն կատարյալ է ՏՏ ենթակառուցվածքի էժան, բայց լիովին ֆունկցիոնալ մոնիտորինգի խնդիրը լուծելու համար՝ այն շահագործող անձնակազմի վերապատրաստման նվազագույն պահանջներով:
Լուծման քայլեր
Որոշվեց սկզբում ստեղծել որոնվածը x86_64-ի համար qemu-ում աշխատելու համար, քանի որ սա հարմար և արագ լուծում է վրիպազերծման համար: Այնուհետև տեղափոխեք այն միակողմանի համակարգչի վրա (ինձ դուր եկավ asus tinker board-ը):
buildroot-ը ընտրվել է որպես build համակարգ: Ի սկզբանե նրան զուրկ է zabbix փաթեթը, ուստի այն պետք է տեղափոխվեր:Խնդիրներ կային ռուսերենի տեղայնացման հետ կապված, որոնք լուծվեցին համապատասխան patches-ի կիրառմամբ (նշում. buildroot-ի նոր տարբերակներում այդ patches-ն այլևս անհրաժեշտ չէ):
Ինքնին zabbix փաթեթի տեղափոխումը նկարագրվելու է առանձին հոդվածում:
Քանի որ ամեն ինչ պետք է աշխատի որպես որոնվածը (անփոփոխելի համակարգի պատկեր + վերականգնվող կազմաձևման/տվյալների բազայի ֆայլեր), անհրաժեշտ էր գրել ձեր սեփական համակարգային թիրախները, ծառայությունները և ժամանակաչափերը (թիրախ, ծառայություն, ժամանակաչափ):
Որոշվեց մեդիան բաժանել 2 բաժնի՝ համակարգի ֆայլերով բաժին և փոփոխվող կոնֆիգուրացիաներով և zabbix տվյալների բազայի ֆայլերով բաժին։
Տվյալների բազայի հետ կապված խնդիրների լուծումը մի փոքր ավելի բարդ է ստացվել։ Ես չէի ուզում այն ուղղակիորեն տեղադրել լրատվամիջոցների վրա: Միևնույն ժամանակ տվյալների բազայի չափը կարող է հասնել այնպիսի չափի, որը գերազանցում է հնարավոր ռամդիսկի չափը: Հետևաբար, ընտրվել է փոխզիջումային լուծում. տվյալների բազան գտնվում է SD քարտի երկրորդ բաժնում (ժամանակակից SLC քարտերն ունեն մինչև 30 գրման ցիկլեր), բայց կա մի պարամետր, որը թույլ է տալիս օգտագործել արտաքին մեդիա (օրինակ՝ usb-): HDD):
Ջերմաստիճանի մոնիտորինգն իրականացվել է RODOS-5 սարքի միջոցով։ Իհարկե, դուք կարող եք ուղղակիորեն օգտագործել Dallas 1820-ը, բայց ավելի արագ և հեշտ էր միացնել USB-ը:
grub86-ն ընտրվել է որպես x64_2-ի բեռնիչ: Այն գործարկելու համար անհրաժեշտ էր գրել նվազագույն կոնֆիգուրացիա։
Qemu-ում վրիպազերծելուց հետո այն տեղափոխվեց asus tinker board: Իմ ծածկույթի կառուցվածքը ի սկզբանե նախատեսված էր լինել խաչաձև հարթակ՝ հատկացնելով յուրաքանչյուր տախտակին հատուկ կոնֆիգուրացիաներ (board defconfig, bootloader, պատկեր ստեղծելով համակարգի բաժանմամբ) և առավելագույն միատեսակություն ֆայլային համակարգը հարմարեցնելու/պատկեր ստեղծելու տվյալների հետ: Նման պատրաստության շնորհիվ տեղափոխումն արագ անցավ։
Խստորեն խորհուրդ է տրվում կարդալ ներածական հոդվածները.
Ինչպես հավաքել
Պահեստը կլոնավորելուց հետո ստացվում է հետևյալ ֆայլի կառուցվածքը.
[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.sh
buildroot-2019.05.tar.gz - մաքուր buildroot արխիվ
overlay-ն իմ գրացուցակն է արտաքին ծառի հետ: Այստեղ է պահվում այն ամենը, ինչ ձեզ անհրաժեշտ է buildroot-ի միջոցով որոնվածը ստեղծելու համար:
README.md - նախագծի և ձեռնարկի նկարագրությունը անգլերենով:
run_me.sh-ը սկրիպտ է, որը պատրաստում է build համակարգը: Ընդլայնում է buildroot-ը արխիվից, կցում է դրա վրա ծածկույթ (արտաքին ծառի մեխանիզմի միջոցով) և թույլ է տալիս ընտրել հավաքման նպատակային տախտակը
[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Select defconfig, press A for abort. Default [0]
Դրանից հետո պարզապես գնացեք buildroot-2019.05 գրացուցակ և գործարկեք make հրամանը:
Կառուցումն ավարտվելուց հետո կառուցման բոլոր արդյունքները կլինեն ելքային/պատկերների գրացուցակում.
[alexey@comp buildroot-2019.05]$ ls -1 output/images/
boot.img
boot.vfat
bzImage
data
data.img
external.img
external.qcow2
grub-eltorito.img
grub.img
intel-ucode
monitor-0.9-beta.tar.gz
qemu.qcow2
rootfs.cpio
sdcard.img
sys
update
Պահանջվող ֆայլեր.
- sdcard.img - մեդիա պատկեր՝ SD քարտի վրա ձայնագրելու համար (dd կամ rufus միջոցով wibdows):
- qemu.qcow2 - մեդիա պատկեր, որը գործարկվում է qemu-ում:
- external.qcow2 - արտաքին մեդիա պատկեր տվյալների բազայի համար
- monitor-0.9-beta.tar.gz - արխիվ վեբ ինտերֆեյսի միջոցով թարմացնելու համար
Ուղեցույցների սերունդ
Չարժե նույն հրահանգները մի քանի անգամ գրել։ Իսկ ամենատրամաբանականը մեկ անգամ գրել markdown-ում, հետո ներբեռնելու համար վերափոխել PDF, իսկ վեբ ինտերֆեյսի համար՝ html։ Դա հնարավոր է pandoc փաթեթի շնորհիվ։
Միևնույն ժամանակ, այս բոլոր ֆայլերը պետք է գեներացվեն մինչև համակարգի պատկերը հավաքելը, այդ հետկառուցված սցենարներն արդեն անօգուտ են: Ուստի գեներացումը կատարվում է ձեռնարկների փաթեթի տեսքով։ Դուք կարող եք դիտել ծածկույթ / փաթեթ / ձեռնարկներ:
Manus.mk ֆայլը (որն անում է ամբողջ աշխատանքը)
################################################################################
#
# manuals
#
################################################################################
MANUALS_VERSION:= 1.0.0
MANUALS_SITE:= ${BR2_EXTERNAL_monitorOverlay_PATH}/package/manuals
MANUALS_SITE_METHOD:=local
define MANUALS_BUILD_CMDS
pandoc -s -o ${TARGET_DIR}/var/www/manual_en.pdf ${BR2_EXTERNAL_monitorOverlay_PATH}/../README.md
pandoc -f markdown -t html -o ${TARGET_DIR}/var/www/manual_en.html ${BR2_EXTERNAL_monitorOverlay_PATH}/../README.md
endef
$(eval $(generic-package))
systemd
Linux-ի աշխարհն ակտիվորեն անցնում է systemd-ին, և ես նույնպես ստիպված էի դա անել:
Հաճելի նորամուծություններից է ժամանակաչափերի առկայությունը։ Ընդհանրապես, նրանց մասին առանձին հոդված է գրվում (և ոչ միայն նրանց մասին), բայց ես ձեզ կարճ կասեմ.
Կան գործողություններ, որոնք պետք է պարբերաբար կատարվեն։ Ես պետք է գործարկեի logrotate-ը, որպեսզի մաքրեմ lighttpd և php-fpm տեղեկամատյանները: Սովորականը կլինի հրամանները cron-ով գրելը, բայց ես որոշեցի օգտագործել systemd monotonic timer: Այսպիսով, logrotate-ն աշխատում է խիստ ժամանակային ընդմիջումով:
Конечно, есть возможность создания таймеров, срабатывающих в определённые даты, но мне это не потребовалось.
Ժամաչափի օրինակ.
- Ժամաչափի ֆայլ
[Unit] Description=RODOS temp daemon timer
OnUnitActiveSec=1ր [Տեղադրեք] WantedBy=timers.target
- Файл сервиса, вызываемого таймером:
```bash
[Unit]
Description=RODOS temp daemon
[Service]
ExecStart=/usr/bin/rodos.sh
Աջակցված տախտակներ
Asus tinker board-ը հիմնական տախտակն է, որի վրա ամեն ինչ պետք է աշխատի: Ընտրված է որպես էժան և շատ հզոր:
Beaglebone black-ն առաջին տախտակն է, որի վրա փորձարկվել է գործողությունը (ավելի հզոր տախտակի ընտրության ժամանակ):
Qemu x86_64 - օգտագործվում է վրիպազերծման մշակման համար:
Ինչպես է այն աշխատում
Գործարկման ժամանակ տեղի է ունենում պարամետրերի երկփուլ վերականգնում.
- գործարկել settings_restore սկրիպտը (ծառայության միջոցով): Այն վերականգնում է համակարգի հիմնական կարգավորումները՝ ժամային գոտի, տեղայնացում, ցանցի կարգավորումներ և այլն:
- գործարկել նախապատրաստման սցենարը (ծառայության միջոցով) - այստեղ պատրաստվում են zabbix-ը և տվյալների բազան, IP-ն դուրս է բերվում վահանակ:
Երբ դուք առաջին անգամ սկսում եք այն, որոշվում է SD քարտի երկրորդ բաժանման չափը: Եթե դեռ կա չբաշխված տարածք, մեդիան վերաբաշխվում է, և տվյալների բաժինը զբաղեցնում է ամբողջ ազատ տարածքը: Սա արվում է տեղադրման պատկերի չափը նվազեցնելու համար (sdcard.img): Բացի այդ, այս պահին ստեղծվում է postgresql աշխատանքային գրացուցակը: Այդ իսկ պատճառով նոր կրիչով առաջին գործարկումը ավելի երկար կլինի, քան հաջորդները։
Արտաքին սկավառակը միացնելիս գործարկման պահին այն փնտրում է անվճար սկավառակ և արտաքին պիտակով ձևաչափում է ext4:
Ուշադրություն. Արտաքին սկավառակը միացնելիս (ինչպես նաև այն անջատելիս կամ փոխարինելիս), դուք պետք է կրկնօրինակեք և վերականգնեք կարգավորումները:
RODOS 5 սարքը օգտագործվում է ջերմաստիճանի մոնիտորինգի համար: Արտադրողը տրամադրում է իր օգտակար ծառայության սկզբնական կոդը սարքի հետ աշխատելու համար: Երբ դուք միացնում եք համակարգը, միանում է rodos timer-ը, որն աշխատում է այս կոմունալ ծրագիրը րոպեն մեկ անգամ: Ընթացիկ ջերմաստիճանը գրվում է /tmp/rodos_current_temp ֆայլում, որից հետո zabbix-ը կարող է վերահսկել այս ֆայլը որպես սենսոր:
Կազմաձևման պահպանման մեդիան տեղադրված է /data գրացուցակում:
Համակարգը գործարկելիս և այն շահագործման նախապատրաստելիս վահանակում հայտնվում է հետևյալ հաղորդագրությունը.
System starting, please wait
Նախապատրաստական աշխատանքն ավարտելուց հետո այն կվերածվի IP հասցեի ցուցադրման.
current ip 192.168.1.32
Ready to work
Ջերմաստիճանի մոնիտորինգի համար zabbix-ի կարգավորում
Ջերմաստիճանը վերահսկելու համար պարզապես կատարեք 2 քայլ.
- միացրեք RODOS սարքը USB պորտին
- ստեղծել տվյալների տարր zabbix-ում
Բացեք zabbix վեբ ինտերֆեյսը.
- Բացեք բաժինը Կազմաձևում → Հոսթեր
- Սեղմեք Items մեր zabbix սերվերի տողում
- Սեղմեք Ստեղծել նյութը
Մուտքագրեք հետևյալ տվյալները.
- անունը - ձեր հայեցողությամբ (օրինակ, serverRoomTemp)
- Տեսակը - zabbix գործակալ
- Բանալի - Ռոդոս
- Տիպ-թվային
- Միավորներ - Գ
- Պատմության պահպանման ժամկետ — պատմության պահպանման ժամկետ: մնացել է 10 օր
- Միտման պահպանման ժամկետը` փոփոխությունների դինամիկայի պահպանման ժամկետը: Մնացել է 30 օր
- Նոր հավելված՝ սերվեր Room Temp
Եվ սեղմեք ADD կոճակը:
Կառավարեք կարգավորումները վեբ ինտերֆեյսի միջոցով
Վեբ ինտերֆեյսը գրված է PHP-ով: Կան հիմնական գործառույթներ.
- դիտել սարքի կարգավիճակը
- փոխելով ցանցի կարգավորումները
- օգտվողի գաղտնաբառը փոխելը
- ժամային գոտու ընտրություն
- կրկնօրինակում / վերականգնում / գործարանային վերակայում
- արտաքին սկավառակը միացնելու ունակությունը
- Համակարգի թարմացում
Վեբ ինտերֆեյսի մուտքը պաշտպանված է գաղտնաբառով: Մեկնարկային էջ - ձեռնարկ:
Zabbix ինտերֆեյսի հասցե՝ ${ip/dns}/zabbix
Կառավարման միջերեսի հասցե՝ ${ip/dns}/manage
Վազում է qemu-ում
qemu-system-x86_64 -smp 4 -m 4026M -enable-kvm -machine q35,accel=kvm -device intel-iommu -cpu host -net nic -net bridge,br=bridge0 -device virtio-scsi-pci,id= scsi0 -drive file=output/images/qemu.qcow2,format=qcow2,aio=threads -device virtio-scsi-pci,id=scsi0 -drive file=output/images/external.qcow2,format=qcow2,aio=թելեր
Այս հրամանը կգործարկի 4 միջուկով համակարգ, 2048 օպերատիվ հիշողություն, միացված KVM, ցանցային քարտ bridge0-ի վրա և երկու սկավառակ՝ մեկը համակարգի, մյուսը՝ արտաքին՝ postgresql-ի համար:
Պատկերները կարող են փոխակերպվել և գործարկվել Virtualbox-ում.
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdi
Այնուհետև դրանք ներմուծեք վիրտուալ տուփ և միացեք sata-ի միջոցով:
Ամփոփում
Ընթացքում ես հետաքրքրվեցի պատրաստի օգտագործման արտադրանք պատրաստելով՝ ոչ շատ գեղեցիկ ինտերֆեյսով (ես չեմ սիրում դրանք գրել), բայց այնպիսին, որն աշխատում է և հեշտ է կարգավորել:
KVM-ում zabbix-appliance-ի տեղադրման վերջին փորձը ցույց տվեց, որ այս քայլը ճիշտ էր (տեղադրումն ավարտելուց հետո համակարգը չի սկսվում): Երևի ես ինչ-որ բան սխալ եմ անում 😉
Source: www.habr.com