
Uzdevuma vēsture
Nelielām uzņēmumu pusēm ir nepieciešama kvalitatīva infrastruktūras uzraudzība (īpaši mūsdienu virtualizācijas apstākļos), taču no otras puses, tiem finansiāli ir grūti iegādāties jaunu aparatūru. Bieži vien rodas problēmas ar serveriem/aparatūru: bieži vien 1-3 torņa serveri atrodas tuvu lietotāju darbam vai nelielā nišā/skrūvētājā.
Ieteicams izmantot jau gatavu izplatīšanu, kuru vienkārši var ievietot microSD kartē un ievietot populārā vienplates datorā (beaglebone, raspberry pi un orange pi ģimene, asus tinker board). Turklāt šāda aparatūra ir lēta un to var uzstādīt jebkurā vietā.
Uzdevuma formulēšana
Šis projekts galvenokārt attīstījās kā laboratorijas darbs ar iespēju pielietot rezultātus.
Kā uzraudzības sistēma tika izvēlēts zabbix, jo tas ir jaudīgs, bezmaksas un labi dokumentēts risinājums.
Akūta problēma par aparatūras platformu. Uzdot atsevišķu mašīnu uzraudzībai nav arī labākais risinājums — vai nu ir dārgi jāiegādājas jauna aparatūra, vai arī jāmeklē veca, plus nelielos uzņēmumos bieži ir problēmas ar serveriem/aparatūru.
Buildroot uzbūves sistēmas izmantošana ļauj izveidot specializētus risinājumus, kurus var izmantot darbinieki ar minimālām Linux OS zināšanām. Šī sistēma ir draudzīga iesācējiem, bet tajā pašā laikā piedāvā plašas personalizācijas iespējas pieredzējušiem izstrādātājiem. Tā ir lieliski piemērota uzdevumam veidot lētu, bet pilnībā funkcionālu IT infrastruktūras uzraudzību, minimāli prasot no tās lietotājiem sagatavošanās.
Risinājuma soļi
Sākotnēji tika nolemts izveidot mikroshēmu x86_64 platformai palaišanai qemu, jo tas ir ērts un ātrs risinājums atkļūdošanai. Pēc tam tas tika portēts uz vienplates datoriem ar arm arhitektūru (man patika asus tinker board).
Kā būves sistēma bija izvēlēts buildroot. Sākotnēji tajā nebija zabbix pakotnes, tādēļ bija jāveic tās portēšana. Radās problēmas ar krievu lokalizāciju, kuras tika atrisinātas ar attiecīgu plākšņu uzlikšanu (piezīme: jaunākajās buildroot versijās šīs plāksnes vairs nav nepieciešamas).
Zabbix pakotnes pārvietošana tiks aprakstīta atsevišķā rakstā.
Jo viss ir jāstrādā kā programmaparatūra (nemainīgs sistēmas attēls + atjaunojamas konfigurācijas/datu bāzes faili), bija nepieciešams uzrakstīt savus systemd mērķus, pakalpojumus un taimerus (target, service, timer).
Tika pieņemts lēmums sadalīt nesēju divās nodalījumos — sistēmas failu nodalījums un nodalījums ar mainīgajām konfigurācijām un zabbix datu bāzes failiem.
Nedaudz sarežģītāk bija risināt uzdevumus, kas saistīti ar datu bāzi. Negribējās to izvietot tieši nesējā. Tajā pašā laikā datu bāzes izmērs var pārsniegt iespējamo ramdisk izmēru. Tāpēc tika izvēlēts kompromisa risinājums: datu bāze tiek izvietota otrajā sd kartes nodalījumā (mūsdienu SLC kartes iztur līdz 30 000 ierakstu ciklu), bet ir iestatījums, kas ļauj izmantot ārēju nesēju (piemēram, usb-hdd).
Temperatūras uzraudzība tika realizēta caur RODOS-5 ierīci. Protams, var izmantot dallas 1820 tieši, bet ātrāk un vienkāršāk bija pievienot USB.
x86_64 nepieciešamais ielādētājs tika izvēlēts grub2. Bija jāuzraksta minimālais konfigurācijas fails palaišanai.
Pēc atkļūdošanas qemu tika veikta pārvietošana uz asus tinker board. Manā pārklājuma struktūrā sākotnēji bija plānota krustplatforma — konkrētu plāksnīšu konfigurāciju izdalīšana (defconfig, ielādētājs, sistēmas nodalījuma attēla ģenerēšana) un maksimāla līdzība failu sistēmas noregulēšanā/attēla ar datiem veidošanā. Ņemot vērā šādu sagatavošanu, pārvietošana noritēja ātri.
Ieteicams izlasīt ievada rakstus:
Kā salikt
Pēc repozitorija klonēšanas tiek iegūta šāda failu struktūra:
[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.shbuildroot-2019.05.tar.gz — tīra buildroot arhīvs.
overlay — mans katalogs ar external-tree. Tajā tiek glabāts viss nepieciešamais, lai izveidotu programmaparatūru ar buildroot palīdzību.
README.md — projekta apraksts un rokasgrāmata angļu valodā.
run_me.sh — skripts, kas sagatavo būvniecības sistēmu. Tas izpako buildroot no arhīva, pievieno overlay (caur external-tree mehānismu) un ļauj izvēlēties mērķa plāksni būvniecībai.
[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Izvēlieties defconfig, nospiediet A, lai pārtrauktu. Noklusējums [0]Pēc tam pietiek pāriet uz katalogu buildroot-2019.05 un izpildīt komandu make.
Pēc kompilācijas pabeigšanas visi kompilācijas rezultāti būs katalogā output/images:
[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
updateNepieciešamie faili:
- sdcard.img — nesēja attēls ierakstīšanai uz sd kartes (izmantojot dd vai rufus zem windows).
- qemu.qcow2 — nesēja attēls palaišanai qemu.
- external.qcow2 — external-nēsēja attēls datu bāzei
- monitor-0.9-beta.tar.gz — arhīvs atjaunināšanai caur tīmekļa saskarni
Rokasgrāmatu ģenerēšana
Nav vērts rakstīt vienu un to pašu instrukciju vairākkārt. Ir loģiskāk uzrakstīt to vienu reizi markdown formatā, pēc tam konvertēt par PDF lejupielādei un html tīmekļa saskarnei. To iespējams izdarīt, izmantojot pandoc pakotni.
Tomēr visus šos failus jāģenerē pirms sistēmas attēla izveides, tāpēc post-build skripti jau ir bezjēdzīgi. Tāpēc ģenerācija tiek veikta kā packages manuals. To var apskatīt overlay/package/manuals.
Fails manuals.mk (kurš veic visu darbu)
################################################################################
#
# 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 pasaule aktīvi pāriet uz systemd, un arī man bija jāveic tas.
No patīkamām jaunām funkcijām – taimeru pieejamība. Par to (un ne tikai par to) raksta atsevišķu rakstu, bet īsumā pastāstīšu.
Ir darbības, kuras jāveic regulāri. Man bija nepieciešams palaist logrotate, lai notīrītu lighttpd un php-fpm žurnālus. Visredzamu būtu uzrakstīt komandas cron, bet es nolēmu izmantot systemd monotono taimeru. Tādā veidā logrotate tiek palaists stingrā laika intervālā.
Protams, ir iespēja izveidot taimerus, kas aktivizējas noteiktās datēs, bet man tas nebija nepieciešams.
Taimeru piemērs:
- Taimeru fails
[Unit] Description=RODOS temp daemon taimer
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
[Install]
WantedBy=timers.target
- Servisa fails, ko izsauc taimeris:
```bash
[Unit]
Description=RODOS temp daemon
[Service]
ExecStart=/usr/bin/rodos.shAtbalstītās plates
Asus tinker board — galvenā plate, uz kuras viss jādarbojas. Izvēlēta, jo ir lēta un diezgan jaudīga.
Beaglebone black — pirmā plate, uz kuras tika pārbaudīta darbība (izvēloties jaudīgāku plati).
Qemu x86_64 — tiek izmantots izstrādei un atkļūdošanai.
Kā tas darbojas
Palaidē notiek divu pakāpju iestatījumu atjaunošana:
- skripta settings_restore palaišana (caur servisu). Tas atjauno galvenos sistēmas iestatījumus — laika joslu, lokalizāciju, tīkla iestatījumus u.c.
- Skripta prepare palaišana (caur pakalpojumu) — šeit tiek sagatavots zabbix, datubāze, IP tiek attēlots konsolē.
Pirmajā palaišanā tiek noteikta otrā daļas izmērs sd kartē. Ja ir brīvas neizmantotas vietas — datu nesējs tiek pārformatēts, un daļa datiem aizņem visu brīvo vietu. Tas tiek darīts, lai samazinātu instalācijas attēla izmēru (sdcard.img). Turklāt šajā brīdī tiek izveidots darba katalogs postgresql. Tādēļ pirmā palaišana ar jauno nesēju būs ilgāka nekā turpmākās.
Pievienojot ārējo disku, sākuma brīdī tiek meklēts brīvs disks un formatēts ext4 ar etiketēm external.
Uzmanību! Pievienojot ārējo disku (kā arī to atvienojot vai aizstājot), ir jāveic dublēšana un iestatījumu atjaunošana!
Temperatūras monitorēšanai tiek izmantota ierīce RODOS 5. Ražotājs sniedz savas utilītas avota kodu darbam ar ierīci. Iespējojot sistēmu, tiek palaists taimeris rodos, kas šīs utilītas izmanto reizi minūtē. Pašreizējā temperatūra tiek ierakstīta failā /tmp/rodos_current_temp, pēc tam zabbix var monitorēt šo failu kā sensoru.
Konfigurācijas uzglabāšanas nesējs tiek montēts katalogā /data.
Sistēmas palaišanas un sagatavošanas brīdī konsolē tiek parādīts ziņojums:
Sistēma sākas, lūdzu, uzgaidietPabeidzot sagatavošanas darbus, tas tiek nomainīts uz IP adreses attēlojumu:
Pašreizējā ip 192.168.1.32
Gatavs darbamZabbix konfigurācija temperatūras monitorēšanai
Lai veiktu temperatūras monitorēšanu, pietiek veikt 2 soļus:
- pievienot ierīci RODOS usb portā
- izveidot datu ierakstu zabbix
Atveram zabbix tīmekļa saskarni:
- Atveram sadaļu Konfigurācija → Host
- Noklikšķinām uz Ierakstiem mūsu zabbix servera rindā
- Noklikšķinām uz Izveidot ierakstu

Ievadām sekojošos datus:
- nosaukums — pēc jūsu izvēles (piemēram, serverRoomTemp)
- Tips — zabbix aģents
- Atslēga — rodos
- Tips — skaitlisks
- Vienības — C
- Vēstures uzglabāšanas periods — vēstures uzglabāšanas termiņš. atstāju 10 dienas
- Tendences uzglabāšanas periods — izmaiņu dinamika. Atstāju 30 dienas
- Jauna lietojumprogramma — servera istabas temperatūra
Un nospiežam pogu PIEVIENOT.

Iestatījumu pārvaldība caur tīmekļa saskarni
Tīmekļa saskarne ir izveidota php. Ir pamata funkcijas:
- ierīces stāvokļa pārskats
- tīkla iestatījumu izmaiņas

- lietotāja paroles maiņa
- laika zonas izvēle
- dublēšana/atjaunošana/rūpnīcas iestatījumu atiestatīšana
- ārējā diska pievienošanas iespēja
- Sistēmas atjaunināšana

Ienākšana tīmekļa saskarnē ir aizsargāta ar paroli. Sākumlapā ir rokasgrāmata.
Zabbix saskarnes adrese: ${ip/dns}/zabbix
Pārvaldības saskarnes adrese: ${ip/dns}/manage

Palaišana 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=threads
Šī komanda palaidīs sistēmu ar 4 kodoliem, 2048 RAM, aktivizētu KVM, tīkla karti tilta bridge0 un diviem diskiem: vienu sistēmai un otru external postgresql.
Attēlus var konvertēt un palaist Virtualbox:
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdiPēc tam importējiet tos Virtualbox un pievienojiet pa sata.
Secinājums
Procesā es ieinteresējos izveidot gatavu produktu — ar ne īpaši skaistu saskarni (nepatīk tās rakstīt), bet darbīgu un viegli konfigurējamu.
Pēdējā mēģinājuma uzstādīt zabbix-appliance KVM pierādījums par šo soli (pēc instalācijas pabeigšanas sistēma nesākas). Iespējams, es kaut ko daru nepareizi 😉
Avots: habr.com


