
Ărendehistorik
SmÄ företag Ä ena sidan behöver en kvalitativ övervakning av sin infrastruktur (speciellt med tanke pÄ den allmÀnna virtualiseringen), Ä andra sidan har de svÄrt ekonomiskt att köpa ny utrustning. Det Àr ocksÄ vanligt med problem pÄ server- och hÄrdvarusidan: ofta stÄr 1-3 tower-servrar bredvid anvÀndararbetsplatser eller i en liten nisch/grotta.
Det Àr enklare att anvÀnda en fÀrdig installation (distributionspaket) som bara behöver laddas upp pÄ ett microSD-kort och sÀttas in i en vanlig enkortsdator (beaglebone, familjen raspberry pi och orange pi, asus tinker board). Dessutom Àr sÄdan utrustning billig och kan installeras var som helst.
UppgiftsstÀllande
I stor utstrÀckning utvecklades projektet som ett slags laborationsarbete med möjlighet att tillÀmpa resultaten.
Zabbix valdes som övervakningssystem eftersom det Àr ett kraftfullt, gratis och vÀldokumenterat system.
FrĂ„gan om hĂ„rdvaruplattformen blev akut. Att stĂ€lla upp en separat maskin för övervakning Ă€r inte heller en bra lösning â antingen Ă€r det dyrt att köpa ny utrustning eller sĂ„ fĂ„r man leta efter gammal. I smĂ„ företag uppstĂ„r ofta problem med server- och hĂ„rdvarusidan.
AnvÀndningen av byggsystemet buildroot möjliggör skapandet av specialiserade lösningar som kan hanteras av personal med minimala kunskaper om Linux-operativsystemet. Detta system Àr vÀnligt för nybörjare men ger samtidigt stora möjligheter till anpassning i hÀnderna pÄ en erfaren utvecklare. Det passar utmÀrkt för uppgiften att övervaka IT-infrastrukturen kostnadseffektivt men funktionellt, med minimala krav pÄ den personal som anvÀnder det.
Lösningssteg
Det beslutades frÄn början att skapa en firmware för x86_64 för att köra i qemu, eftersom det Àr en bekvÀm och snabb lösning för felsökning. Efter det portades det till en enkortsdator arm (jag gillade asus tinker board).
Buildroot valdes som byggsystem. Ursprungligen saknades paketet zabbix, sÄ jag var tvungen att portera det. Det uppstod problem med den ryska lokaliseringen, som löstes genom att tillÀmpa lÀmpliga patchar (anmÀrkning: i nyare versioner av buildroot behövs dessa patchar inte lÀngre).
Porteringen av sjÀlva zabbix-paketet kommer att beskrivas i en separat artikel.
Eftersom allt ska fungera som en firmware (oförÀndrad systemavbild + ÄterstÀllbara konfigurationsfiler/databaser), var det nödvÀndigt att skriva egna systemd-mÄl, tjÀnster och timers (target, service, timer).
Det beslutades att dela upp lagringsmediet i tvĂ„ partitioner â en för systemfiler och en för förĂ€nderliga konfigurationer och zabbix-databaser.
Det visade sig vara lite svÄrare att lösa problemen relaterade till databasen. Att placera den direkt pÄ mediet var inte optimalt. Samtidigt kan databasens storlek överstiga storleken pÄ en möjlig ramdisk. DÀrför valdes en kompromisslösning: databasen placeras pÄ den andra partitionen av SD-kortet (moderna SLC-kort har upp till 30 000 skrivcykler), men det finns en instÀllning som gör det möjligt att anvÀnda extern lagring (till exempel usb-hdd).
Temperaturövervakning genomfördes via en RODOS-5-enhet. SjÀlvklart kan man anvÀnda Dallas 1820 direkt, men det var snabbare och enklare att koppla in USB.
Grub2 valdes som bootloader för x86_64. Det krÀvdes att skriva en minimal konfiguration för att starta.
Efter felsökning pĂ„ qemu genomfördes porteringen till Asus Tinker Board. I strukturen för min overlay lades det frĂ„n början stor vikt vid plattformsoberoende â att sĂ€rskilja plattaspecifika konfigurationer (defconfig för plattan, bootloader, generering av avbild med systempartition) och maximal enhetlighet i finjustering av filsystemet / skapande av avbild med data. Tack vare denna förberedelse gick porteringen snabbt.
Det rekommenderas starkt att lÀsa inledande artiklar:
Hur man bygger
Efter att ha klonat repositoryt fÄr man följande filstruktur:
[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.shbuildroot-2019.05.tar.gz â arkiv av ren buildroot
overlay â min katalog med external-tree. HĂ€r lagras allt som behövs för att bygga firmware med hjĂ€lp av buildroot
README.md â projektbeskrivning och instruktioner pĂ„ engelska.
run_me.sh â skript som förbereder byggsystemet. Det blĂ„ser upp buildroot frĂ„n arkivet, kopplar den till overlay (via mekanismen external-tree) och lĂ„ter dig vĂ€lja mĂ„tplattan för byggandet.
[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
VÀlj defconfig, tryck A för avbryt. Standard [0]Efter detta rÀcker det med att gÄ till katalogen buildroot-2019.05 och köra kommandot make.
Efter att byggningen Àr klar kommer alla byggresultat att finnas i katalogen 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
updateNödvÀndiga filer:
- sdcard.img â avbildning för skrivning pĂ„ sd-kort (via dd eller rufus under Windows).
- qemu.qcow2 â avbildning för att köra i qemu.
- external.qcow2 â avbildning av extern lagring för databasen
- monitor-0.9-beta.tar.gz â arkiv för uppdatering via webgrĂ€nssnitt
Generering av manualer
Det Àr inte vÀrt att skriva samma instruktion flera gÄnger. Logiskt sett bör man skriva en gÄng i markdown, för att sedan konvertera den till PDF för nedladdning och HTML för webgrÀnssnittet. Detta Àr möjligt tack vare paketet pandoc.
Samtidigt mÄste alla dessa filer genereras innan systemavbildningen Àr klar, sÄ dessa post-build-skript Àr redan vÀrdelösa. DÀrför har genereringen gjorts i form av paketet manuals. Det kan ses i overlay/package/manuals.
Filen manuals.mk (som utför allt arbete)
################################################################################
#
# 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-vÀrlden övergÄr aktivt till systemd, och jag var tvungen att göra detsamma.
Av de trevliga nyheterna Àr tillgÄngen pÄ timers. Det skrivs en separat artikel om dem (och inte bara om dem), men jag ska kort berÀtta.
Det finns ÄtgÀrder som mÄste utföras periodiskt. Jag behövde köra logrotate för att rensa loggarna frÄn lighttpd och php-fpm. Det skulle vara mest bekant att skriva kommandon i cron, men jag valde att anvÀnda systemd:s monotona timer. PÄ sÄ sÀtt körs logrotate med ett strikt tidsintervall.
Naturligtvis finns det möjlighet att skapa timers som triggas vid specifika datum, men jag behövde inte detta.
Exempel pÄ en timer:
- Timerfil
[Unit] Description=RODOS temp daemon timer
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
[Install]
WantedBy=timers.target
- TjÀnstefilen som anropas av timern:
```bash
[Unit]
Description=RODOS temp daemon
[Service]
ExecStart=/usr/bin/rodos.shStödda kort
Asus tinker board â huvudkortet dĂ€r allt bör fungera. Vald som ett billigt och ganska kraftfullt alternativ.
Beaglebone black â det första kortet dĂ€r arbetet testades (under perioden av att leta efter ett mer kraftfullt kort).
Qemu x86_64 â anvĂ€nds för utveckling och debugging.
Hur det fungerar
Vid start sker en tvÄstegs ÄterstÀllning av instÀllningar:
- körning av skriptet settings_restore (via service). Det Ă„terstĂ€ller systemets grundlĂ€ggande instĂ€llningar â tidszon, sprĂ„k, nĂ€tverksinstĂ€llningar och sĂ„ vidare.
- körning av skriptet prepare (via service) â hĂ€r förbereds zabbix, databasen, och IP visas pĂ„ konsolen.
Vid första starten bestÀms storleken pÄ den andra partitionen av sd-kortet. Om det fortfarande finns oallokerat utrymme omformateras enheten, och partitionen för data tar upp allt ledigt utrymme. Detta görs för att minska storleken pÄ installationsavbilden (sdcard.img). Dessutom skapas en arbetskatalog för postgresql vid detta tillfÀlle. DÀrför kommer den första starten med en ny enhet att ta lÀngre tid Àn de följande.
NÀr en extern disk ansluts, söker systemet vid start efter en ledig disk och formaterar den till ext4 med etiketten external.
Varning! Vid anslutning av en extern disk (liksom vid frÄnkoppling eller byte av den), Àr det nödvÀndigt att göra en backup och ÄterstÀlla instÀllningarna!
För att övervaka temperaturen anvÀnds enhet RODOS 5. Tillverkaren tillhandahÄller kÀllkoden för sitt verktyg för att arbeta med enheten. Vid systemstart startar en timer rodos som kör detta verktyg en gÄng per minut. Den aktuella temperaturen skrivs till filen /tmp/rodos_current_temp, varefter zabbix kan övervaka denna fil som en sensor.
Lagringsenheten för konfigurationer monteras i katalogen /data.
Vid systemstart och förberedelse för drift visas följande meddelande i konsolen:
Systemet startar, vÀnligen vÀntaEfter att förberedelsearbetet Àr klart, byts det ut mot utdata av IP-adressen:
aktuell ip 192.168.1.32
Redo att arbetaKonfigurering av zabbix för temperaturövervakning
För att övervaka temperaturen rÀcker det med att göra 2 steg:
- koppla enheten RODOS till usb-porten
- skapa datapost i zabbix
Ăppna webbgrĂ€nssnittet för zabbix:
- Ăppna avsnittet Konfiguration â VĂ€rdar
- Klicka pÄ Postar i raden för vÄr zabbix-server
- Klicka pÄ Skapa post

Ange följande uppgifter:
- namn â valfritt (till exempel serverRoomTemp)
- Typ â zabbix agent
- Nyckel â rodos
- Typ â numerisk
- Enheter â C
- Historisk lagringsperiod â period för lagring av historia. LĂ€mna 10 dagar
- Trend lagringsperiod â period för lagring av trendĂ€ndringar. LĂ€mna 30 dagar
- Ny tillĂ€mpning â server Room Temp
Och klicka pĂ„ knappen LĂGG TILL.

Hantera instÀllningar via webbgrÀnssnittet
WebbgrÀnssnittet Àr skrivet i php. Det finns grundlÀggande funktioner:
- visa enhetens status
- Àndra nÀtverksinstÀllningar

- Àndra anvÀndarlösenord
- vÀlj tidszon
- backup / ÄterstÀllning / ÄterstÀllning till fabriksinstÀllningar
- möjlighet att ansluta extern disk
- Systemuppdatering

Inloggning till webbgrĂ€nssnittet Ă€r skyddat med lösenord. Startside â manual.
WebbgrÀnssnittets adress zabbix: ${ip/dns}/zabbix
AdministrationsgrÀnsadress: ${ip/dns}/manage

Starta i 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
Detta kommando kommer att starta systemet med 4 kÀrnor, 2048 RAM, aktiverad KVM, nÀtverkskort anslutet till bridge0 och tvÄ diskar: en för systemet och en extern för PostgreSQL.
Bilder kan konverteras och köras i Virtualbox:
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdiEfter detta importerar du dem till Virtualbox och ansluter dem via SATA.
Slutsats
Under processen blev jag intresserad av att skapa en fĂ€rdig produkt â med ett inte sĂ„ vackert grĂ€nssnitt (jag gillar inte att skriva dem), men fungerande och enkel att konfigurera.
Det senaste försöket att installera zabbix-appliance i KVM visade att detta steg var korrekt (efter installationen startar inte systemet). Kanske gör jag nĂ„got fel đ
KĂ€lla: habr.com


