Probleem skiednis
Lytse bedriuwen, oan 'e iene kant, hawwe hege kwaliteit tafersjoch op har ynfrastruktuer nedich (benammen yn it ljocht fan wiidferspraat virtualisaasje), oan' e oare kant is it finansjeel lestich foar har om nije apparatuer te keapjen. Server-/hardwareproblemen binne ek gewoan: faak binne d'r 1-3 toerservers neist brûker wurkstasjons of yn in lytse niche / kast.
It is makliker te brûken in ready-made gearkomste (ferdieling), dat jo gewoan moatte uploade nei in microSD card en ynfoegje yn in mienskiplike single-board kompjûter (beaglebone, raspberry pi en oranje pi famyljes, asus tinker board). Derneist is sokke apparatuer goedkeap en kin oeral ynstalleare wurde.
Probleemintwurding
Op in protte manieren ûntwikkele it projekt as in soarte fan laboratoariumwurk mei de mooglikheid om de resultaten ta te passen.
Zabbix waard keazen as it tafersjochsysteem omdat it in krêftich, fergees en goed dokumintearre systeem is.
It probleem mei it hardwareplatfoarm is akuut wurden. hardware.
It brûken fan it buildroot-bouwsysteem lit jo spesjalisearre oplossingen meitsje dy't kinne wurde eksploitearre troch personiel mei minimale kennis fan Linux-bestjoeringssystemen. Dit systeem is freonlik foar begjinners, mar biedt tagelyk genôch oanpassingsmooglikheden yn 'e hannen fan in betûfte ûntwikkelder. It is perfekt foar it oplossen fan it probleem fan goedkeape, mar folslein funksjonele tafersjoch fan IT-ynfrastruktuer, mei minimale easken foar de oplieding fan it personiel dat it wurket.
Oplossingsstappen
It waard besletten om yn earste ynstânsje firmware te meitsjen foar x86_64 om te rinnen yn qemu, om't dit in handige en rappe oplossing is foar debuggen. Dan portearje it nei in earm single-board komputer (ik mocht fan it asus tinker board).
buildroot waard selektearre as it bousysteem. Yn it earstoan mist it it zabbix-pakket, dus it moast wurde oerdroegen mei de Russyske locale, dy't oplost waarden troch it tapassen fan de passende patches (notysje: yn nijere ferzjes fan buildroot binne dizze patches net mear nedich).
It portearjen fan it zabbix-pakket sels sil wurde beskreaun yn in apart artikel.
Sûnt alles moat wurkje as firmware (net te feroarjen systeemôfbylding + herstelbere konfiguraasje / databankbestannen), wie it nedich om jo eigen systeemdoelen, tsjinsten en timers te skriuwen (doel, tsjinst, timer).
It waard besletten om de media te splitsen yn 2-seksjes - in seksje mei systeembestannen en in seksje mei feroare konfiguraasjes en zabbix-databasebestannen.
It oplossen fan problemen yn ferbân mei de databank die bliken wat dreger te wêzen. Ik woe it net direkt op 'e media pleatse. Tagelyk kin de grutte fan 'e databank in grutte berikke dy't de grutte fan in mooglike ramdisk grutter is. Dêrom waard in kompromisoplossing keazen: de databank leit op 'e twadde dieling fan' e SD-kaart (moderne SLC-kaarten hawwe oant 30 skriuwsyklusen), mar d'r is in ynstelling dy't it brûken fan eksterne media mooglik makket (bygelyks usb- hdd).
Temperatuermonitoring waard útfierd fia it RODOS-5-apparaat. Fansels kinne jo de Dallas 1820 direkt brûke, mar it wie flugger en makliker om in USB yn te stekken.
grub86 waard selektearre as de bootloader foar x64_2. It wie nedich om in minimale konfiguraasje te skriuwen om it te starten.
Nei it debuggen op qemu, waard it oerdroegen oan it asus tinkerboard. De struktuer fan myn overlay wie yn earste ynstânsje bedoeld om cross-platfoarm te wêzen - it tawizen fan konfiguraasjes spesifyk foar elk boerd (board defconfig, bootloader, it generearjen fan in ôfbylding mei in systeempartition) en maksimale uniformiteit by it oanpassen fan it bestânsysteem / it meitsjen fan in ôfbylding mei gegevens. Troch sa'n tarieding gie it portearjen fluch.
It is tige oan te rieden om de ynliedende artikels te lêzen:
Hoe te sammeljen
Nei it klonen fan it repository wurdt de folgjende triemstruktuer krigen:
[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.sh
buildroot-2019.05.tar.gz - skjin buildroot-argyf
overlay is myn map mei eksterne-beam. Dit is wêr alles wat jo nedich binne om de firmware te bouwen mei buildroot wurdt opslein.
README.md - beskriuwing fan it projekt en hânlieding yn it Ingelsk.
run_me.sh is in skript dat it bousysteem taret. Wreidet buildroot út fan it argyf, hechtet der in overlay oan (fia it eksterne beammeganisme) en lit jo it doelboerd selektearje foar montage
[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Select defconfig, press A for abort. Default [0]
Gean hjirnei gewoan nei de map buildroot-2019.05 en fier it kommando make.
Sadree't de bou foltôge is, sille alle bouresultaten yn 'e útfier / ôfbyldings map wêze:
[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
Fereaske triemmen:
- sdcard.img - mediaôfbylding foar opname op in SD-kaart (fia dd of rufus ûnder wibdows).
- qemu.qcow2 - mediaôfbylding om te rinnen yn qemu.
- external.qcow2 - eksterne media ôfbylding foar de databank
- monitor-0.9-beta.tar.gz - argyf foar bywurkjen fia de webynterface
Generaasje fan gidsen
It is net wurdich om deselde ynstruksjes ferskate kearen te skriuwen. En it meast logyske ding is om it ien kear te skriuwen yn markdown, en dan omsette nei PDF foar downloaden en html foar de webynterface. Dit is mooglik troch it pandoc-pakket.
Tagelyk moatte al dizze bestannen generearre wurde foardat it systeemôfbylding gearstald is, dy post-build-skripts binne al nutteloos. Dêrom wurdt de generaasje dien yn 'e foarm fan in hânboekpakket. Jo kinne sjen op overlay / pakket / hânboeken.
It bestân manuals.mk (dat al it wurk docht)
################################################################################
#
# 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
De Linux-wrâld beweecht aktyf nei systemd, en ik moast it ek dwaan.
Ien fan 'e noflike ynnovaasjes is de oanwêzigens fan timers. Yn 't algemien wurdt in apart artikel oer har skreaun (en net allinich oer har), mar ik sil it jo koart fertelle.
D'r binne aksjes dy't periodyk moatte wurde útfierd. Ik moast logrotate útfiere om de lighttpd- en php-fpm-logs te wiskjen. It gewoane ding soe wêze om de kommando's yn cron te skriuwen, mar ik besleat de systemd monotone timer te brûken. Dus logrotate rint op in strang tiidsinterval.
Fansels is it mooglik om timers te meitsjen dy't op bepaalde datums fjoerje, mar ik hie dit net nedich.
Foarbyld fan timer:
- Timer triem
[Unit] Description=RODOS temp daemon timer
OnUnitActiveSec=1min [Ynstallearje] WantedBy=timers.target
- Файл сервиса, вызываемого таймером:
```bash
[Unit]
Description=RODOS temp daemon
[Service]
ExecStart=/usr/bin/rodos.sh
Stipe boards
Asus tinker board is it haadboerd wêrop alles moat wurkje. Selektearre as goedkeap en heul krêftich.
Beaglebone swart is it earste boerd wêrop operaasje waard hifke (by de seleksje fan in machtiger boerd).
Qemu x86_64 - brûkt foar debuggen ûntwikkeling.
Hoe't it wurket
By it opstarten komt in twa-etappe restauraasje fan ynstellings foar:
- it útfieren fan it settings_restore-skript (fia de tsjinst). It herstelt basissysteemynstellingen - tiidsône, locale, netwurkynstellingen, ensfh.
- it tariede skript útfiere (fia de tsjinst) - hjir wurde zabbix en de databank taret, de IP wurdt útfierd nei de konsole.
As jo it earst begjinne, wurdt de grutte fan 'e twadde dieling fan' e SD-kaart bepaald. As d'r noch net-allokearre romte is, wurdt de media opnij ferdield, en de gegevensseksje nimt alle frije romte yn. Dit wurdt dien om de grutte fan de ynstallaasjeôfbylding (sdcard.img) te ferminderjen. Derneist wurdt de postgresql-wurkmap op dit punt oanmakke. Dêrom sil de earste lansearring mei in nije drager langer duorje dan de folgjende.
By it ferbinen fan in eksterne skiif, siket it op it momint fan opstarten nei in frije skiif en formattearret it yn ext4 mei it eksterne label.
Oandacht! By it ferbinen fan in eksterne skiif (lykas it loskoppelen of ferfangen), moatte jo in reservekopy meitsje en de ynstellingen weromsette!
It RODOS 5-apparaat wurdt brûkt foar temperatuermonitoring. De fabrikant leveret de boarnekoade fan har nut foar it wurkjen mei it apparaat. As it systeem ynskeakele is, begjint de rodos-timer, dy't dit hulpprogramma ien kear yn 'e minút rint. De hjoeddeistige temperatuer wurdt skreaun nei de triem /tmp/rodos_current_temp, wêrnei't zabbix dizze triem as sensor kin kontrolearje.
De konfiguraasje opslachmedia is monteard yn 'e /data-map.
By it opstarten fan it systeem en it tarieden op operaasje, ferskynt it folgjende berjocht yn 'e konsole:
System starting, please wait
Nei it foltôgjen fan it tariedende wurk sil it feroarje nei it werjaan fan it IP-adres:
current ip 192.168.1.32
Ready to work
It ynstellen fan zabbix foar temperatuermonitoring
Om de temperatuer te kontrolearjen, nim dan gewoan 2 stappen:
- ferbine it RODOS-apparaat oan 'e USB-poarte
- meitsje gegevens item yn zabbix
Iepenje de zabbix-webynterface:
- Iepenje de seksje Konfiguraasje → Hosts
- Klikje op Items yn 'e line fan ús zabbix-tsjinner
- Klikje op Item oanmeitsje
Fier de folgjende gegevens yn:
- namme - nei jo goedtinken (bygelyks serverRoomTemp )
- Type - zabbix agent
- Key - Rodos
- Type-numerike
- Ienheden - C
- Skiednis opslach perioade - skiednis opslach perioade. lofts 10 dagen
- Trend opslachperioade - opslachperioade foar de dynamyk fan feroaringen. 30 dagen oerbleaun
- Nije applikaasje - tsjinner Room Temp
En druk op de ADD knop.
Behear ynstellings fia web ynterface
De webynterface is skreaun yn PHP. D'r binne haadfunksjes:
- sjoch apparaat status
- feroarje netwurk ynstellings
- brûker wachtwurd feroarje
- tiidsône seleksje
- reservekopy / weromsette / fabryk weromsette
- mooglikheid om te ferbinen in eksterne skiif
- Systeemupdate
Oanmelde by de webynterface is wachtwurd beskerme. Startside - hânboek.
Zabbix-ynterface-adres: ${ip/dns}/zabbix
Behearynterfaceadres: ${ip/dns}/manage
Running yn 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
Dit kommando sil in systeem begjinne mei 4 kearnen, 2048 RAM, KVM ynskeakele, in netwurkkaart op bridge0 en twa skiven: ien foar it systeem en ien ekstern foar postgresql.
Ofbyldings kinne wurde konvertearre en rinne yn Virtualbox:
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdi
Ymportearje se dan yn virtualbox en ferbine fia sata.
konklúzje
Yn it proses waard ik ynteressearre yn it meitsjen fan in klear te brûken produkt - mei in net heul moaie ynterface (ik skriuw se net leuk), mar ien dy't wurket en maklik te konfigurearjen is.
De lêste besykjen om zabbix-apparaat yn KVM te ynstallearjen liet sjen dat dizze stap korrekt wie (nei't de ynstallaasje foltôge is, begjint it systeem net). Miskien doch ik wat ferkeard 😉
Boarne: www.habr.com