Buildroot: Kreante multiplatforman firmvaro kun zabbix-servilo

Buildroot: Kreante multiplatforman firmvaro kun zabbix-servilo

Problemhistorio

Malgrandaj kompanioj, unuflanke, bezonas altkvalitan monitoradon de sia infrastrukturo (precipe pro la disvastigita virtualigo), aliflanke, estas finance malfacile por ili aĉeti novajn ekipaĵojn. Problemoj pri servilo/aparataro ankaŭ estas oftaj: ofte estas 1-3 turserviloj apud uzantaj laborstacioj aŭ en malgranda niĉo/ŝranko.

Estas pli facile uzi pretan muntadon (distribuo), kiun vi nur bezonas alŝuti al mikroSD-karto kaj enmeti en komunan unu-tabulkomputilon (familioj beaglebone, raspberry pi kaj oranĝa pi, asus tinker-tabulo). Krome, tia ekipaĵo estas malmultekosta kaj povas esti instalita ie ajn.

Formulado de la problemo

Multmaniere, la projekto disvolviĝis kiel speco de laboratoria laboro kun la ebleco apliki la rezultojn.

Zabbix estis elektita kiel la monitora sistemo ĉar ĝi estas potenca, libera kaj bone dokumentita sistemo.

La problemo kun la aparataro platformo akraiĝis.Meti apartan maŝinon sub monitoradon ankaŭ ne estas tre bona solvo - aŭ estas multekoste aĉeti novajn ekipaĵojn, aŭ serĉi malnovajn ekipaĵojn + en malgrandaj kompanioj estas oftaj problemoj kun servilo/ aparataro.

Uzante la buildroot-konstrusistemon ebligas al vi krei specialajn solvojn, kiuj povas esti funkciigitaj de dungitaro kun minimuma scio pri Linukso-operaciumoj. Ĉi tiu sistemo estas amika al komencantoj, sed samtempe provizas ampleksajn personigajn ŝancojn en la manoj de sperta programisto. Ĝi estas perfekta por solvi la problemon de malmultekosta, sed plene funkcia monitorado de IT-infrastrukturo, kun minimumaj postuloj por trejnado de la dungitaro funkciiganta ĝin.

Solvopaŝoj

Oni decidis komence krei firmware por x86_64 por funkcii en qemu, ĉar ĉi tio estas oportuna kaj rapida solvo por sencimigi. Poste portigu ĝin al braka unu-tabulo komputilo (mi ŝatis la asus tinker-tabulo).

buildroot estis elektita kiel la konstrusistemo. Komence mankas al ĝi la pakaĵo zabbix, do ĝi devis esti portita.Estis problemoj pri la rusa lokaĵo, kiuj estis solvitaj per aplikado de la taŭgaj flikiloj (rimarku: en pli novaj versioj de buildroot, ĉi tiuj flikiloj ne plu estas bezonataj).

Porti la zabbix-pakaĵon mem estos priskribita en aparta artikolo.

Ĉar ĉio devus funkcii kiel firmvaro (neŝanĝebla sistembildo + reakireblaj agordaj/datumbazaj dosieroj), estis necese skribi viajn proprajn sistemajn celojn, servojn kaj tempigilojn (celo, servo, tempigilo).

Estis decidite dividi la amaskomunikilaron en 2 sekciojn - sekcion kun sistemdosieroj kaj sekcion kun ŝanĝeblaj agordoj kaj zabbix-datumbazaj dosieroj.

Solvi problemojn rilate al la datumbazo montriĝis iom pli malfacila. Mi ne volis meti ĝin rekte en la amaskomunikilaron. Samtempe, la grandeco de la datumbazo povas atingi grandecon kiu superas la grandecon de ebla ramdisko. Tial oni elektis kompromisan solvon: la datumbazo situas sur la dua sekcio de la SD-karto (modernaj SLC-kartoj havas ĝis 30 000 skribciklojn), sed ekzistas agordo kiu permesas la uzon de eksteraj amaskomunikiloj (ekzemple usb-). hdd).

Temperaturmonitorado estis efektivigita per la RODOS-5-aparato. Kompreneble, vi povas uzi la Dallas 1820 rekte, sed estis pli rapide kaj pli facile ŝtopi USB-on.

grub86 estis elektita kiel la ekŝargilo por x64_2. Necesis verki minimuman agordon por lanĉi ĝin.

Post senararigado sur qemu, ĝi estis adaptita al la asus tinker-tabulo. La strukturo de mia supermetaĵo estis komence celita esti transplatforma - asigni agordojn specifajn por ĉiu tabulo (tabulo defconfig, ekŝargilo, generado de bildo kun sistema diskparto) kaj maksimuma unuformeco en personigo de la dosiersistemo/kreado de bildo kun datumoj. Pro tia preparo, pordado rapide iris.

Estas tre rekomendite legi la enkondukajn artikolojn:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Kiel kunveni

La projekto estas konservita sur github
Post klonado de la deponejo, la sekva dosierstrukturo estas akirita:

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

buildroot-2019.05.tar.gz - pura buildroot-arkivo
overlay estas mia dosierujo kun ekstera-arbo. Ĉi tie estas stokita ĉio, kion vi bezonas por konstrui la firmvaro per buildroot.
README.md - priskribo de la projekto kaj manlibro en la angla.
run_me.sh estas skripto kiu preparas la konstrusistemon. Vastigas buildroot de la arkivo, almetas superkovraĵon al ĝi (per la ekstera-arba mekanismo) kaj permesas vin elekti la celtabulo por kunigo.

[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Select defconfig, press A for abort. Default [0]

Post ĉi tio, simple iru al la dosierujo buildroot-2019.05 kaj rulu la make komandon.
Post kiam la konstruo finiĝos, ĉiuj konstrurezultoj estos en la dosierujo eligo/bildoj:

[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

Bezonataj dosieroj:

  • sdcard.img - amaskomunikila bildo por registri sur SD-karto (per dd aŭ rufus sub wibdows).
  • qemu.qcow2 - amaskomunikila bildo rulebla en qemu.
  • external.qcow2 - ekstera amaskomunikilaro bildo por la datumbazo
  • monitor-0.9-beta.tar.gz — архив для обновления через web-интерфейс

Generacio de Gvidistoj

Ne indas skribi la samajn instrukciojn plurfoje. Kaj la plej logika afero estas skribi ĝin unufoje en markdown, kaj poste konverti ĝin al PDF por elŝuto kaj html por la retinterfaco. Ĉi tio eblas danke al la pandoc-pakaĵo.

Samtempe, ĉiuj ĉi tiuj dosieroj devas esti generitaj antaŭ ol la sistembildo estas kunvenita; tiuj postkonstruitaj skriptoj jam estas senutilaj. Tial, la generacio estas farita en formo de manlibropakaĵo. Vi povas rigardi supermetaĵon/pakaĵon/manlibrojn.

La manuals.mk dosiero (kiu faras la tutan laboron)

################################################################################
#
# 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))

sistemo

La Linukso-mondo aktive moviĝas al systemd, kaj ankaŭ mi devis fari ĝin.
Unu el la agrablaj novigoj estas la ĉeesto de temporiziloj. Ĝenerale, aparta artikolo estas verkita pri ili (kaj ne nur pri ili), sed mi rakontos al vi mallonge.

Estas agoj, kiuj devas esti faritaj periode. Mi bezonis ruli logrotate por forigi la protokolojn lighttpd kaj php-fpm. La kutima afero estus skribi la ordonojn en cron, sed mi decidis uzi la systemd monotonan tempigilon. Do logrotate funkcias je strikta tempointervalo.

Kompreneble, eblas krei tempigilojn, kiuj ekfunkciigas en certaj datoj, sed mi ne bezonis ĉi tion.
Ekzemplo de tempigilo:

  • Timer-dosiero
    
    [Unit]
    Description=RODOS temp daemon timer

[Temigilo] OnBootSec=1min
OnUnitActiveSec=1min

[Instali] WantedBy=timers.target

- Файл сервиса, вызываемого таймером:
```bash
[Unit]
Description=RODOS temp daemon

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

Subtenataj tabuloj

Asus tinkerboard estas la ĉefa tabulo sur kiu ĉio devus funkcii. Elektita kiel malmultekosta kaj tre potenca.

Beaglebone nigra estas la unua tabulo sur kiu operacio estis testita (dum la elekto de pli potenca tabulo).

Qemu x86_64 - uzata por sencimiga evoluo.

Kiel ĝi funkcias

Ĉe ekfunkciigo, du-etapa restarigo de agordoj okazas:

  • rulante la skripton settings_restore (per la servo). Ĝi restarigas bazajn sistemajn agordojn - horzono, loko, retaj agordoj ktp.
  • rulante la prepar-skripton (per la servo) - ĉi tie zabbix kaj la datumbazo estas pretaj, la IP estas eligita al la konzolo.

Kiam vi unue komencas ĝin, la grandeco de la dua sekcio de la SDa karto estas determinita. Se ankoraŭ estas neasignita spaco, la amaskomunikilaro estas redividita, kaj la datumsekcio okupas la tutan liberan spacon. Ĉi tio estas farita por redukti la grandecon de la instala bildo (sdcard.img). Aldone, la labordosierujo postgresql estas kreita ĉi-momente. Tial la unua lanĉo kun nova portanto daŭros pli longe ol la postaj.

Konektante eksteran diskon, en la momento de ekfunkciigo ĝi serĉas senpagan diskon kaj formatas ĝin en ext4 kun la ekstera etikedo.

Atentu! Konektante eksteran diskon (same kiel malkonekti aŭ anstataŭi ĝin), vi devas fari sekurkopion kaj restarigi la agordojn!

La aparato RODOS 5 estas uzata por monitorado de temperaturo.La fabrikanto provizas la fontkodon de sia utileco por labori kun la aparato. Kiam la sistemo estas ŝaltita, la rodos-tempigilo komenciĝas, kiu funkciigas ĉi tiun ilon unufoje ĉiuminute. La nuna temperaturo estas skribita al la dosiero /tmp/rodos_current_temp, post kio zabbix povas kontroli ĉi tiun dosieron kiel sensilo.

La agorda stokada medio estas muntita en la dosierujo /data.

Komencante la sistemon kaj preparante ĝin por funkciado, la sekva mesaĝo aperas en la konzolo:

System starting, please wait

Post kompletigado de la prepara laboro, ĝi ŝanĝiĝos al montrado de la IP-adreso:

current ip 192.168.1.32
Ready to work

Agordante zabbix por monitorado de temperaturo

Por kontroli la temperaturon, simple prenu 2 paŝojn:

  • konekti la aparaton RODOS al la USB-haveno
  • krei datumon en zabbix

Malfermu la interfacon de zabbix:

  • Malfermu la sekcion Agordo → Gastigantoj
  • Alklaku Erojn en la linio de nia servilo zabbix
  • Alklaku Krei eron

Buildroot: Kreante multiplatforman firmvaro kun zabbix-servilo

Enigu la sekvajn datumojn:

  • nomo - laŭ via bontrovo (ekzemple, serverRoomTemp )
  • Tipo - zabbix agento
  • Ŝlosilo - Rodos
  • Tipo-numera
  • Unuoj - C
  • History storage period — historia konservadperiodo. restis 10 tagoj
  • Tendenca konservadperiodo - konservadperiodo por la dinamiko de ŝanĝoj. Restas 30 tagoj
  • Nova aplikaĵo - servilo Room Temp

Kaj premu la butonon ALDONI.
Buildroot: Kreante multiplatforman firmvaro kun zabbix-servilo

Administri agordojn per TTT-interfaco

La retinterfaco estas skribita en PHP. Estas ĉefaj funkcioj:

  • vidi la staton de la aparato
  • ŝanĝante retajn agordojn
    Buildroot: Kreante multiplatforman firmvaro kun zabbix-servilo
  • ŝanĝante uzantan pasvorton
  • elekto de horzono
  • sekurkopio/restarigo/fabriko rekomencigita
  • kapablo konekti eksteran diskon
  • Ĝisdatigo de sistemo
    Buildroot: Kreante multiplatforman firmvaro kun zabbix-servilo

Ensalutu al la retinterfaco estas pasvorta protektita. Komenca paĝo - manlibro.

Interfaco de Zabbix: ${ip/dns}/zabbix
Administra interfaco adreso: ${ip/dns}/manage
Buildroot: Kreante multiplatforman firmvaro kun zabbix-servilo

Kurante en 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 dosiero=eligo/bildoj/qemu.qcow2,format=qcow2,aio=fadenoj -device virtio-scsi-pci,id=scsi0 -drive dosiero=eligo/bildoj/ekstera.qcow2,format=qcow2,aio=fadenoj

Ĉi tiu komando komencos sistemon kun 4 kernoj, 2048 RAM, KVM ebligita, retkarto sur bridge0 kaj du diskoj: unu por la sistemo kaj unu ekstera por postgresql.

Bildoj povas esti konvertitaj kaj rulitaj en Virtualbox:

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

Poste importu ilin en virtualbox kaj konektu per sata.

konkludo

En la procezo, mi interesiĝis pri fari uzeblan produkton - kun ne tre bela interfaco (mi ne ŝatas skribi ilin), sed kiu funkcias kaj facile agordas.

La lasta provo instali zabbix-aparaton en KVM montris, ke ĉi tiu paŝo estis ĝusta (post kiam la instalado finiĝas, la sistemo ne komenciĝas). Eble mi faras ion malbone 😉

Maŝinoj

https://buildroot.org/

fonto: www.habr.com

Aldoni komenton