Buildroot: Opprette plattformuavhengig fastvare med zabbix-server

Buildroot: Opprette plattformuavhengig fastvare med zabbix-server

Historikk for oppgaven

SmÄ bedrifter, pÄ den ene siden, trenger kvalitetsmonitorering av infrastrukturen sin (spesielt med tanke pÄ den utbredte virtualiseringen), men pÄ den andre siden er det Þkonomisk utfordrende for dem Ä kjÞpe nytt utstyr. Det oppstÄr ogsÄ ofte problemer med server- og maskinvare: oftest stÄr det 1-3 tower-servere ved siden av brukerarbeidsplasser eller i et lite rom/sjakt.

Det er enklere Ä bruke en ferdig bygging (distribusjon) som kan lastes opp pÄ et microSD-kort og settes inn i en vanlig enkeltkortdatamaskin (beaglebone, raspberry pi-familien og orange pi, asus tinker board). I tillegg er slikt utstyr rimelig og kan installeres hvor som helst.

Definering av oppgaven

Prosjektet har i stor grad utviklet seg som et laboratoriumsarbeid med mulighet for Ă„ anvende resultatene.

Zabbix ble valgt som overvÄkingssystem fordi det er et kraftig, gratis og godt dokumentert system.

SpĂžrsmĂ„let om maskinvareplattformen ble akutt. Å bruke en egen maskin for overvĂ„kning er heller ikke en god lĂžsning — enten er det kostbart Ă„ kjĂžpe nytt utstyr, eller sĂ„ mĂ„ man lete etter gammelt + smĂ„ firmaer har ofte problemer med server- og maskinvare.

Bruken av byggesystemet buildroot lar deg lage spesialiserte lÞsninger som kan brukes av personale med minimal kunnskap om Linux-operativsystemer. Dette systemet er vennlig mot nybegynnere, men gir samtidig omfattende muligheter for tilpasning i hendene pÄ en erfaren utvikler. Det er perfekt for Ä lÞse oppgaven med kostnadseffektiv, men fullfunksjonell overvÄkning av IT-infrastrukturen, som krever minimalt med opplÊring for de som drifter det.

LĂžsningstrinn

Det ble besluttet Ă„ fĂžrst lage fastvaren for x86_64 for kjĂžring i qemu, da dette er en praktisk og rask lĂžsning for feilsĂžking. Deretter ble det portert til en enkeltdatamaskin med arm (jeg likte asus tinker board).

Buildroot ble valgt som byggesystem. I utgangspunktet manglet det zabbix-pakken, sÄ den mÄtte porteres. Det var problemer med russisk lokal, som ble lÞst ved Ä pÄfÞre de relevante oppdateringene (merking: i nyere versjoner av buildroot er ikke disse oppdateringene nÞdvendige).

Portering av zabbix-pakken vil bli beskrevet i en egen artikkel.

Siden alt mÄ fungere som fastvare (uendret systembilde + gjenopprettbare konfigurasjonsfiler/databasefiler), var det nÞdvendig Ä skrive egne systemd-mÄl, tjenester og timere (target, service, timer).

Det ble besluttet Ă„ dele lagringsmediet i 2 partisjoner — en partisjon for systemfiler og en partisjon for endringsbare konfigurasjoner og zabbix-databasefiler.

Det viste seg Ä vÊre litt mer komplisert Ä lÞse oppgaver relatert til databasen. Det var lite Þnskelig Ä plassere den direkte pÄ lagringsmediet. Samtidig kan stÞrrelsen pÄ databasen bli stÞrre enn stÞrrelsen pÄ et mulig ramdisk. Derfor ble det valgt en kompromisslÞsning: databasen plasseres pÄ den andre partisjonen til sd-kortet (moderne SLC-kort har opptil 30 000 skriveperioder), men det finnes en innstilling som lar deg bruke ekstern lagring (for eksempel usb-hdd).

Temperaturmonitorering ble realisert gjennom en enhet RODOS-5. SelvfĂžlgelig kan man bruke dallas 1820 direkte, men det var raskere og enklere Ă„ bruke USB.

Som bootloader for x86_64 ble grub2 valgt. Det var nĂždvendig Ă„ skrive en minimal konfigurasjon for oppstart.

Etter feilsĂžking pĂ„ qemu ble det utfĂžrt portering til asus tinker board. I strukturen til overlayen min var det opprinnelig planlagt plattformuavhengighet — Ă„ skille spesifikke konfigurasjoner for hvert brett (defconfig for brettet, bootloader, generering av bilde med systempartisjon) og maksimalt enhetlighet i tilpassing av filsystemet/oppretting av bilde med data. PĂ„ grunn av denne forberedelsen gikk porteringen raskt.

Det anbefales pÄ det sterkeste Ä lese de innledende artiklene:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Hvordan samle

Prosjektet lagres pÄ github
Etter kloning av depotet oppnÄs fÞlgende filstruktur:

[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.sh

buildroot-2019.05.tar.gz — arkiv av ren buildroot
overlay — min katalog med external-tree. Det er her alt nĂždvendig lagres for Ă„ bygge fastvaren med buildroot
README.md — prosjektbeskrivelse og veiledning pĂ„ engelsk.
run_me.sh — skript som forbereder byggesystemet. Den pakker ut buildroot fra arkivet, kobler det til overlay (gjennom external-tree-mekanismen) og lar deg velge mĂ„lbrett for bygging.

[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Velg defconfig, trykk A for Ă„ avbryte. Standard [0]

Etter dette er det bare Ä gÄ til katalogen buildroot-2019.05 og kjÞre kommandoen make.
Etter at byggingen er fullfĂžrt, vil alle byggeresultater vĂŠre 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
update

NĂždvendige filer:

  • sdcard.img — bilde av lagringsenheten for Ă„ skrive til sd-kortet (via dd eller rufus under windows).
  • qemu.qcow2 — bilde av lagringsenheten for Ă„ kjĂžre i qemu.
  • external.qcow2 — bilde av extern enhet for databasen.
  • monitor-0.9-beta.tar.gz — arkiv for oppdatering via webgrensesnitt.

Generering av manualer

Det er ikke nÞdvendig Ä skrive den samme instruksjonen flere ganger. Det er logisk Ä skrive det én gang i markdown, og deretter konvertere det til PDF for nedlasting og html for webgrensesnittet. Dette er mulig takket vÊre pandoc-pakken.

Samtidig mÄ alle disse filene genereres fÞr systembildet er bygget, da post-build skriptene allerede er ubrukelige. Derfor er genereringen utfÞrt i form av en pakke manualer. Dette kan sees i overlay/package/manuals.

Filen manuals.mk (som utfĂžrer alt arbeidet)

################################################################################
#
# 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-verdenen gÄr aktivt over til systemd, sÄ jeg mÄtte gjÞre det samme.
Av de hyggelige nyhetene er det timer. En egen artikkel skrives om dem (og ikke bare om dem), men jeg skal kort fortelle.

Det er handlinger som mÄ utfÞres regelmessig. Jeg mÄtte starte logrotate for Ä rense loggene til lighttpd og php-fpm. Den mest vanlige metoden ville vÊrt Ä skrive kommandoene i cron, men jeg valgte Ä bruke den monotone systemd-timeren. Slik at logrotate kjÞres med strenge tidsintervaller.

SelvfÞlgelig er det mulig Ä lage timere som utlÞses pÄ spesifikke datoer, men jeg trengte ikke det.
Eksempel pÄ timer:

  • Timerfil
    
    [Unit]
    Description=RODOS temp daemon timer

[Timer]
OnBootSec=1min
OnUnitActiveSec=1min

[Install]
WantedBy=timers.target

- Tjenestefilen som kalles av timeren:
```bash
[Unit]
Description=RODOS temp daemon

[Service]
ExecStart=/usr/bin/rodos.sh

StĂžttede kort

Asus tinker board — hovedkortet som alt skal fungere pĂ„. Valgt som rimelig og ganske kraftig.

Beaglebone black — det fĂžrste kortet hvor funksjonen ble testet (i perioden med Ă„ finne et mer kraftig kort).

Qemu x86_64 — brukes til utviklingsfeilsþking.

Slik fungerer det

Ved oppstart skjer det en to-trinns gjenoppretting av innstillinger:

  • kjĂžring av skriptet settings_restore (via tjenesten). Det gjenoppretter de grunnleggende systeminnstillingene — tidssone, lokale innstillinger, nettverksinnstillinger osv.
  • kĂžyring av skriptet prepare (via tenesta) — her blir zabbix forberedt, databasen oppretta, og IP-adressa blir vist i konsollen.

Ved fĂžrste oppstart skjer det en bestemmelse av stĂžrrelsen pĂ„ den andre partisjonen av sd-kortet. Dersom det fortsatt er ubrukt plass — blir lagringsmediet ompartisjonert, og partisjonen for data tar all ledig plass. Dette er gjort for Ă„ redusere stĂžrrelsen pĂ„ installasjonsbildet (sdcard.img). I tillegg blir det pĂ„ dette tidspunktet opprettet en arbeidsmappe for postgresql. Derfor vil den fĂžrste oppstarten med et nytt medium ta lengre tid enn pĂ„fĂžlgende oppstarter.

NÄr en ekstern disk kobles til, sÞker systemet under oppstart etter en ledig disk og formaterer den til ext4 med etikett external.

Merk! Ved tilkobling av en ekstern disk (ogsÄ ved frakobling eller utskifting) er det nÞdvendig Ä ta backup og gjenopprette innstillingene!

For temperaturmonitorering brukes enhet RODOS 5. Produsenten gir kildekoden til sitt verktÞy for Ä arbeide med enheten. NÄr systemet startes, aktiveres en timer for rodos, som starter dette verktÞyet hvert minutt. Den nÄvÊrende temperaturen blir skrevet til filen /tmp/rodos_current_temp, hvoretter zabbix kan overvÄke denne filen som en sensor.

Lagringsmediet for konfigurasjonen monteres i katalogen /data.

Ved oppstart av systemet og forberedelse for drift vises fĂžlgende melding i konsollen:

Systemet starter, vennligst vent

Etter fullfĂžring av forberedelsene, endres dette til visning av IP-adressen:

nÄvÊrende ip 192.168.1.32
Klar for arbeid

Konfigurasjon av zabbix for temperaturmonitorering

For temperaturmonitorering er det tilstrekkelig Ă„ gjĂžre 2 trinn:

  • koble RODOS-enheten til usb-porten
  • opprette dataelement i zabbix

Åpne webgrensesnittet til zabbix:

  • Åpne seksjonen Konfigurasjon → Vertar
  • Klikk pĂ„ Elementer i linjen til vĂ„r zabbix-server
  • Klikk pĂ„ Opprett element

Buildroot: Opprette plattformuavhengig fastvare med zabbix-server

Fyll inn fĂžlgende opplysninger:

  • navn — etter eget valg (for eksempel, serverRoomTemp)
  • Type — zabbix-agent
  • NĂžkkel — rodos
  • Type — numerisk
  • Enheter — C
  • Historikk lagringsperiode — periode for lagring av historikk. Jeg har satt 10 dager
  • Trend lagringsperiode — periode for lagring av endringsdynamikk. Jeg har satt 30 dager
  • Ny applikasjon — server Room Temp

Og klikk pÄ knappen LEGG TIL.
Buildroot: Opprette plattformuavhengig fastvare med zabbix-server

HÄndtering av innstillinger via webgrensesnittet

Webgrensesnittet er skrevet i php. Det har hovedfunksjoner:

  • visning av enhetens tilstand
  • endring av nettverksinnstillinger
    Buildroot: Opprette plattformuavhengig fastvare med zabbix-server
  • endring av brukerpĂ„logging
  • valgt tidssone
  • backup/gjenoppretting/nullstilling til fabrikkinnstillinger
  • mulighet for tilkobling av ekstern disk
  • Systemoppdatering
    Buildroot: Opprette plattformuavhengig fastvare med zabbix-server

Inngang til webgrensesnittet er passordbeskyttet. Hovedsiden er en veiledning.

Grensesnittadresse for zabbix: ${ip/dns}/zabbix
Administrasjonsgrensesnittadresse: ${ip/dns}/manage
Buildroot: Opprette plattformuavhengig fastvare med zabbix-server

Start 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

Denne kommandoen vil starte systemet med 4 kjerner, 2048 RAM, aktivert KVM, nettverkskort pÄ broen bridge0 og to disker: for systemet og ekstern for postgresql.

Images kan konverteres og kjĂžre i Virtualbox:

qemu-img convert -f qcow2  qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2  external.qcow2 -O vdi external.vdi

Deretter importere dem i virtualbox og koble dem til via sata.

Konklusjon

Underveis ble jeg interessert i Ă„ lage et ferdig produkt — med et ikke sĂ„ pent grensesnitt (jeg liker ikke Ă„ skrive dem), men som fungerer og er enkelt Ă„ konfigurere.

Den siste forsĂžket pĂ„ Ă„ installere zabbix-appliance i KVM viste riktigheten av dette steget (etter fullfĂžrt installasjon starter ikke systemet). Kanskje gjĂžr jeg noe galt 😉

Materialer

https://buildroot.org/

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster