Buildroot. zabbix-server-ի միջոցով միջպլատֆորմային որոնվածի ստեղծում

Buildroot. zabbix-server-ի միջոցով միջպլատֆորմային որոնվածի ստեղծում

Խնդրի պատմություն

Փոքր ընկերությունները, մի կողմից, կարիք ունեն իրենց ենթակառուցվածքի բարձր որակի մոնիտորինգի (հատկապես համատարած վիրտուալացման լույսի ներքո), մյուս կողմից՝ նրանց համար ֆինանսապես դժվար է նոր սարքավորումներ ձեռք բերել: Սերվերի/ապարատային խնդիրները նույնպես տարածված են. հաճախ օգտատերերի աշխատատեղերի կողքին կամ փոքր խորշում/պահարանում կան 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, պատկեր ստեղծելով համակարգի բաժանմամբ) և առավելագույն միատեսակություն ֆայլային համակարգը հարմարեցնելու/պատկեր ստեղծելու տվյալների հետ: Նման պատրաստության շնորհիվ տեղափոխումն արագ անցավ։

Խստորեն խորհուրդ է տրվում կարդալ ներածական հոդվածները.
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Ինչպես հավաքել

Նախագիծը պահվում է github-ում
Պահեստը կլոնավորելուց հետո ստացվում է հետևյալ ֆայլի կառուցվածքը.

[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

[ժմչփ] OnBootSec=1 րոպե
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 սերվերի տողում
  • Սեղմեք Ստեղծել նյութը

Buildroot. zabbix-server-ի միջոցով միջպլատֆորմային որոնվածի ստեղծում

Մուտքագրեք հետևյալ տվյալները.

  • անունը - ձեր հայեցողությամբ (օրինակ, serverRoomTemp)
  • Տեսակը - zabbix գործակալ
  • Բանալի - Ռոդոս
  • Տիպ-թվային
  • Միավորներ - Գ
  • Պատմության պահպանման ժամկետ — պատմության պահպանման ժամկետ: մնացել է 10 օր
  • Միտման պահպանման ժամկետը` փոփոխությունների դինամիկայի պահպանման ժամկետը: Մնացել է 30 օր
  • Նոր հավելված՝ սերվեր Room Temp

Եվ սեղմեք ADD կոճակը:
Buildroot. zabbix-server-ի միջոցով միջպլատֆորմային որոնվածի ստեղծում

Կառավարեք կարգավորումները վեբ ինտերֆեյսի միջոցով

Վեբ ինտերֆեյսը գրված է PHP-ով: Կան հիմնական գործառույթներ.

  • դիտել սարքի կարգավիճակը
  • փոխելով ցանցի կարգավորումները
    Buildroot. zabbix-server-ի միջոցով միջպլատֆորմային որոնվածի ստեղծում
  • օգտվողի գաղտնաբառը փոխելը
  • ժամային գոտու ընտրություն
  • կրկնօրինակում / վերականգնում / գործարանային վերակայում
  • արտաքին սկավառակը միացնելու ունակությունը
  • Համակարգի թարմացում
    Buildroot. zabbix-server-ի միջոցով միջպլատֆորմային որոնվածի ստեղծում

Վեբ ինտերֆեյսի մուտքը պաշտպանված է գաղտնաբառով: Մեկնարկային էջ - ձեռնարկ:

Zabbix ինտերֆեյսի հասցե՝ ${ip/dns}/zabbix
Կառավարման միջերեսի հասցե՝ ${ip/dns}/manage
Buildroot. zabbix-server-ի միջոցով միջպլատֆորմային որոնվածի ստեղծում

Վազում է 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-ի տեղադրման վերջին փորձը ցույց տվեց, որ այս քայլը ճիշտ էր (տեղադրումն ավարտելուց հետո համակարգը չի սկսվում): Երևի ես ինչ-որ բան սխալ եմ անում 😉

Նյութեր

https://buildroot.org/

Source: www.habr.com

Добавить комментарий