Storia di u prublema
L'imprese chjuche, da una banda, necessitanu un monitoraghju d'alta qualità di a so infrastruttura (in particulare in vista di a virtualizazione generalizata), da l'altra banda, hè finanziariamente difficiuli per elli cumprà novi equipaghji. I prublemi di u servitore / hardware sò ancu cumuni: spessu ci sò 1-3 servitori di torre vicinu à e stazioni di travagliu di l'utilizatori o in un picculu nichu / armariu.
Hè più faciule d'utilizà una assemblea (distribuzione) pronta, chì vi basta à cullà in una carta microSD è inserisce in un computer unicu cumune (famiglie beaglebone, raspberry pi è orange pi, asus tinker board). Inoltre, tali equipaghji ùn sò micca prezzu è ponu esse stallati in ogni locu.
Formulazione di u prublema
In parechji manere, u prughjettu sviluppatu cum'è una spezia di travagliu di laboratoriu cù a pussibilità di applicà i risultati.
Zabbix hè statu sceltu cum'è u sistema di surviglianza perchè hè un sistema putente, liberu è ben documentatu.
U prublema cù a piattaforma hardware hè diventata acuta Mettendu una macchina separata sottu monitoraghju ùn hè ancu una suluzione assai bona - o hè caru per cumprà un equipamentu novu, o per circà l'equipaggiu anticu + in picculi imprese ci sò prublemi frequenti cù u servitore /. hardware.
Utilizà u sistema di creazione di buildroot permette di creà suluzioni specializate chì ponu esse operate da u persunale cun cunniscenza minima di i sistemi operativi Linux. Stu sistema hè amichevule à i principianti, ma à u stessu tempu furnisce assai opportunità di persunalizazione in manu di un sviluppatore espertu. Hè perfettu per risolve u prublema di u monitoraghju di prezzu, ma cumpletamente funziunale di l'infrastruttura IT, cù requisiti minimi per a furmazione di u persunale chì l'operanu.
Passi di suluzione
Hè statu decisu di creà inizialmente firmware per x86_64 per eseguisce in qemu, postu chì questa hè una suluzione còmuda è rapida per debugging. Allora portà à un computer unicu di bracciu (mi piacia l'asus tinker board).
buildroot hè statu sceltu cum'è u sistema di creazione. In principiu, ùn mancava u pacchettu zabbix, cusì hà da esse purtatu Ci sò stati prublemi cù u locale russo, chì sò stati risolti cù l'applicazioni di i patches appropritati (nota: in e versioni più recenti di buildroot, sti patches ùn sò più necessarii).
Portà u pacchettu zabbix stessu serà descrittu in un articulu separatu.
Siccomu tuttu duverebbe travaglià cum'è firmware (immubiliare l'imaghjini di u sistema + i schedarii di cunfigurazione / basa di dati recuperabili), era necessariu di scrive u vostru propiu sistema di destinazione, servizii è timers (target, service, timer).
Hè statu decisu di split the media in 2 sezioni - una seccione cù i schedarii di u sistema è una seccione cù cunfigurazione cambiabile è i schedarii di basa di dati zabbix.
Risolve i prublemi ligati à a basa di dati hè diventatu un pocu più difficiule. Ùn vulia micca mette direttamente nantu à i media. À u listessu tempu, a dimensione di a basa di dati pò ghjunghje à una dimensione chì supera a dimensione di un pussibili ramdisk. Per quessa, hè stata scelta una suluzione di cumprumissu: a basa di dati hè situata nantu à a seconda partizione di a carta SD (carti SLC muderni anu finu à 30 000 cicli di scrittura), ma ci hè un paràmetru chì permette l'usu di media esterni (per esempiu, usb- hdd).
U monitoraghju di a temperatura hè stata implementata per mezu di u dispusitivu RODOS-5. Di sicuru, pudete aduprà u Dallas 1820 direttamente, ma era più veloce è più faciule per cunnette un USB.
grub86 hè statu sceltu cum'è u bootloader per x64_2. Era necessariu di scrive una cunfigurazione minima per lancià.
Dopu avè debugging in qemu, hè statu purtatu à a tavola asus tinker. A struttura di a mo overlay hè stata inizialmente pensata à esse cross-platform - assigning configs specifichi per ogni bordu (board defconfig, bootloader, genering an image with a system partition) è a massima uniformità in a persunalizazione di u sistema di fugliale / creazione di una maghjina cù dati. A causa di tale preparazione, u porting hè andatu prestu.
Hè assai cunsigliatu di leghje l'articuli introduttivi:
Cume riunisce
Dopu a clonazione di u repository, a struttura di u schedariu seguente hè ottenuta:
[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.sh
buildroot-2019.05.tar.gz - pulisce l'archiviu buildroot
overlay hè u mo cartulare cù l'arburu esternu. Questu hè induve tuttu ciò chì avete bisognu di custruisce u firmware cù buildroot hè almacenatu.
README.md - descrizzione di u prugettu è manuale in inglese.
run_me.sh hè un script chì prepara u sistema di creazione. Expands buildroot da l'archiviu, attache un overlay à questu (via u mecanismu di l'arburu esternu) è vi permette di selezziunà a tavola di destinazione per l'assemblea.
[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Select defconfig, press A for abort. Default [0]
Dopu questu, basta à andà in u cartulare buildroot-2019.05 è eseguite u cumandamentu make.
Una volta chì a custruzione hè cumpleta, tutti i risultati di a custruzzione seranu in u cartulare 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
Files richiesti:
- sdcard.img - media image per a registrazione nantu à una carta SD (via dd o rufus sottu wibdows).
- qemu.qcow2 - immagine media per eseguisce in qemu.
- external.qcow2 - imagine media esterna per a basa di dati
- monitor-0.9-beta.tar.gz - archiviu per l'aghjurnamentu via l'interfaccia web
Generazione di Guide
Ùn vale a pena scrive u listessu struzzioni parechje volte. È a cosa più logica hè di scrive una volta in markdown, è poi cunvertisce in PDF per scaricà è html per l'interfaccia web. Questu hè pussibule grazia à u pacchettu pandoc.
À u listessu tempu, tutti questi schedari devenu esse generati prima chì l'imaghjini di u sistema hè assemblatu quelli scripts post-build sò digià inutili. Dunque, a generazione hè fatta in forma di pacchettu manuali. Pudete vede overlay / pacchettu / manuali.
U schedariu manuals.mk (chì face tuttu u travagliu)
################################################################################
#
# 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
U mondu Linux si move attivamente in systemd, è aghju avutu ancu fà.
Una di l'innuvazioni piacevuli hè a presenza di timers. In generale, un articulu separatu hè scrittu annantu à elli (è micca solu nantu à elli), ma vi dicu brevemente.
Ci sò azzioni chì deve esse realizatu periodicamente. Aviu bisognu di eseguisce logrotate per sguassà i logs lighttpd è php-fpm. U solitu seria di scrive i cumandamenti in cron, ma decisu di utilizà u timer monotonicu systemd. Allora logrotate corre à un intervallu di tempu strettu.
Di sicuru, hè pussibule di creà timers chì sparanu in certe date, ma ùn aghju micca bisognu di questu.
Esempiu di timer:
- Timer File
[Unit] Description=RODOS temp daemon timer
OnUnitActiveSec=1min [Installa] WantedBy=timers.target
- Файл сервиса, вызываемого таймером:
```bash
[Unit]
Description=RODOS temp daemon
[Service]
ExecStart=/usr/bin/rodos.sh
Tavole supportate
Asus tinker board hè a scheda principale nantu à quale tuttu deve travaglià. Sceltu cum'è pocu prezzu è assai putente.
Beaglebone neru hè u primu bordu nantu à quale l'operazione hè stata pruvata (durante a selezzione di un tavulinu più putente).
Qemu x86_64 - utilizatu per u sviluppu di debugging.
Cumu travagliu
À l'iniziu, una restaurazione in dui fasi di i paràmetri si trova:
- esegue u script settings_restore (via u serviziu). Ripristina i paràmetri di basa di u sistema - fusu orariu, locale, paràmetri di rete, etc.
- esegue u script di preparazione (via u serviziu) - quì zabbix è a basa di dati sò preparati, l'IP hè uscita à a cunsola.
Quandu avete principiatu, a dimensione di a seconda partizione di a carta SD hè determinata. S'ellu ci hè sempre un spaziu micca allocatu, i media hè ripartizione, è a seccione di dati occupa tuttu u spaziu liberu. Questu hè fattu per riduce a dimensione di l'imaghjini di stallazione (sdcard.img). Inoltre, u cartulare di travagliu postgresql hè creatu à questu puntu. Hè per quessa chì u primu lanciamentu cù un novu traspurtadore duverà più di i successivi.
Quandu cunnette un discu esternu, à u mumentu di l'iniziu cerca un discu liberu è u formate in ext4 cù l'etichetta esterna.
Attenzione ! Quandu cunnette un discu esternu (cum'è disconnecting o rimpiazzà), avete bisognu di fà una copia di salvezza è restaurà i paràmetri!
U dispusitivu RODOS 5 hè utilizatu per u monitoraghju di a temperatura U fabricatore furnisce u codice fonte di a so utilità per travaglià cù u dispusitivu. Quandu u sistema hè attivatu, u cronometru rodos principia, chì eseguisce sta utilità una volta per minutu. A temperatura attuale hè scritta à u schedariu /tmp/rodos_current_temp, dopu chì zabbix pò monitorà stu schedariu cum'è sensor.
I media di almacenamento di cunfigurazione sò muntati in u cartulare /data.
Quandu si principia u sistema è si preparanu per u funziunamentu, u missaghju seguente appare in a cunsola:
System starting, please wait
Dopu avè finitu u travagliu preparatoriu, cambierà à visualizà l'indirizzu IP:
current ip 192.168.1.32
Ready to work
Configurazione di zabbix per u monitoraghju di a temperatura
Per monitorà a temperatura, basta à piglià 2 passi:
- cunnette u dispusitivu RODOS à u portu USB
- creà un articulu di dati in zabbix
Aprite l'interfaccia web zabbix:
- Aprite a sezione Configurazione → Hosts
- Cliccate nantu à Elementi in a linea di u nostru servitore zabbix
- Cliccate nant'à Crea articulu
Inserite i seguenti dati:
- nome - à a vostra discrezione (per esempiu, serverRoomTemp )
- Type - agent zabbix
- Chjave - Rodos
- Tipu-numericu
- Unità - C
- Periudu di almacenamiento di a storia - periodu di almacenamiento di a storia. manca 10 ghjorni
- Periudu di almacenamentu di tendenza - periodu di almacenamentu per a dinamica di cambiamenti. A manca 30 ghjorni
- Nova applicazione - Server Temp
È appughjà u buttone ADD.
Gestisce i paràmetri via l'interfaccia web
L'interfaccia web hè scritta in PHP. Ci sò funzioni principali:
- vede u statu di u dispusitivu
- cambià i paràmetri di a rete
- cambià a password d'utilizatore
- selezzione di u fusu orariu
- copia di salvezza / risturà / resettore di fabbrica
- capacità di cunnette un discu esternu
- Actualizazione di u sistema
U login à l'interfaccia web hè prutettu da password. Pagina iniziale - manuale.
Indirizzu di l'interfaccia Zabbix: ${ip/dns}/zabbix
Indirizzu di l'interfaccia di gestione: ${ip/dns}/manage
Corsa in 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
Stu cumandimu accuminciarà un sistema cù core 4, 2048 RAM, KVM attivatu, una carta di rete in bridge0 è dui dischi: unu per u sistema è un esternu per postgresql.
L'imaghjini ponu esse cunvertiti è eseguite in Virtualbox:
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdi
Allora impurtate in virtualbox è cunnette via sata.
cunchiusioni
In u prucessu, sò diventatu interessatu à fà un pruduttu prontu per l'usu - cù una interfaccia micca assai bella (ùn mi piace micca scrive), ma una chì travaglia è hè faciule da cunfigurà.
L'ultimu tentativu di installà zabbix-appliance in KVM hà dimustratu chì stu passu era currettu (dopu chì a stallazione hè finita, u sistema ùn principia micca). Forse facciu qualcosa di male 😉
Source: www.habr.com