
Povijest problema
Male tvrtke, s jedne strane, trebaju kvalitetan nadzor svoje infrastrukture (posebno u svjetlu raširene virtualizacije), s druge strane, financijski im je teško nabaviti novu opremu. Problemi s poslužiteljem/hardverom također su česti: često postoje 1-3 tower poslužitelja pored korisničkih radnih stanica ili u maloj niši/ormaru.
Lakše je koristiti gotovu montažu (distribuciju) koju samo trebate učitati na microSD karticu i umetnuti u uobičajeno jednopločno računalo (obitelji beaglebone, raspberry pi i orange pi, asus tinker board). Osim toga, takva oprema je jeftina i može se instalirati bilo gdje.
Formuliranje problema
Projekt se u mnogočemu razvio kao svojevrsni laboratorijski rad s mogućnošću primjene rezultata.
Zabbix je odabran kao sustav za nadzor jer je moćan, besplatan i dobro dokumentiran sustav.
Problem s hardverskom platformom postao je akutan.Stavljanje zasebnog stroja pod nadzor također nije dobro rješenje - ili je skupo kupiti novu opremu ili tražiti staru opremu + u malim tvrtkama česti su problemi s poslužiteljem/ hardver.
Korištenje buildroot sustava za izgradnju omogućuje vam stvaranje specijaliziranih rješenja kojima mogu upravljati osobe s minimalnim znanjem o obitelji operativnih sustava. LinuxOvaj sustav je prilagođen početnicima, ali nudi široke mogućnosti prilagodbe za iskusne programere. Idealan je za pristupačno, ali potpuno funkcionalno praćenje IT infrastrukture, s minimalnim zahtjevima za obukom operativnog osoblja.
Koraci rješenja
Odlučeno je da se prvo stvori firmware za x86_64 koji će se izvoditi u qemu, budući da je to prikladno i brzo rješenje za otklanjanje pogrešaka. Zatim ga prebacite na računalo s jednom pločom (sviđala mi se Asusova tinker ploča).
buildroot je odabran kao sustav za izgradnju. U početku mu nedostaje zabbix paket, pa ga je bilo potrebno prenijeti.Bilo je problema s ruskim lokalitetom, koji su riješeni primjenom odgovarajućih zakrpa (napomena: u novijim verzijama buildroot-a te zakrpe više nisu potrebne).
Prijenos samog zabbix paketa bit će opisan u zasebnom članku.
Budući da bi sve trebalo raditi kao firmware (nepromjenjiva slika sustava + datoteke konfiguracije/baze podataka koje se mogu oporaviti), bilo je potrebno napisati vlastite systemd ciljeve, usluge i mjerače vremena (target, service, timer).
Odlučeno je da se medij podijeli u 2 odjeljka - odjeljak sa sistemskim datotekama i odjeljak s promjenjivim konfiguracijama i datotekama zabbix baze podataka.
Rješavanje problema vezanih uz bazu podataka pokazalo se malo težim. Nisam to htio plasirati direktno u medije. U isto vrijeme, veličina baze podataka može doseći veličinu koja premašuje veličinu mogućeg ramdiska. Stoga je odabrano kompromisno rješenje: baza podataka nalazi se na drugoj particiji SD kartice (moderne SLC kartice imaju do 30 ciklusa pisanja), ali postoji postavka koja dopušta korištenje vanjskih medija (na primjer, usb- hdd).
Praćenje temperature provedeno je putem uređaja RODOS-5. Naravno, Dallas 1820 možete koristiti izravno, ali bilo je brže i lakše priključiti USB.
grub86 je odabran kao bootloader za x64_2. Za pokretanje je bilo potrebno napisati minimalnu konfiguraciju.
Nakon otklanjanja pogrešaka na qemu-u, prenesen je na asus tinker ploču. Struktura mog preklapanja isprva je trebala biti višeplatformska - dodjeljivanje konfiguracija specifičnih za svaku ploču (defconfig ploče, bootloader, generiranje slike sa sistemskom particijom) i maksimalna uniformnost u prilagodbi datotečnog sustava/stvaranje slike s podacima. Zbog takve pripreme portiranje je prošlo brzo.
Preporučljivo je pročitati uvodne članke:
Kako sastaviti
Nakon kloniranja repozitorija dobiva se sljedeća struktura datoteka:
[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.shbuildroot-2019.05.tar.gz - čista buildroot arhiva
overlay je moj direktorij s vanjskim stablom. Ovdje je pohranjeno sve što vam je potrebno za izgradnju firmware-a pomoću buildroot-a.
README.md - opis projekta i priručnik na engleskom jeziku.
run_me.sh je skripta koja priprema sustav za izgradnju. Proširuje buildroot iz arhive, pričvršćuje sloj na njega (putem mehanizma vanjskog stabla) i omogućuje vam odabir ciljne ploče za sastavljanje
[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Select defconfig, press A for abort. Default [0]Nakon ovoga samo idite u direktorij buildroot-2019.05 i pokrenite naredbu make.
Nakon završetka izgradnje, svi rezultati izgradnje bit će u direktoriju 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
updatePotrebne datoteke:
- sdcard.img - medijska slika za snimanje na SD karticu (preko dd ili rufus pod wibdows).
- qemu.qcow2 - medijska slika za pokretanje u qemu.
- external.qcow2 - slika vanjskog medija za bazu podataka
- monitor-0.9-beta.tar.gz - arhiva za ažuriranje putem web sučelja
Generacija vodiča
Ne isplati se pisati iste upute nekoliko puta. A najlogičnije je da to jednom napišete u markdownu, pa pretvorite u PDF za preuzimanje i html za web sučelje. To je moguće zahvaljujući pandoc paketu.
U isto vrijeme, sve ove datoteke moraju biti generirane prije sastavljanja slike sustava; te skripte nakon izgradnje već su beskorisne. Stoga se generiranje vrši u obliku paketa priručnika. Možete pogledati sloj/paket/priručnike.
Datoteka manuals.mk (koja obavlja sav posao)
################################################################################
#
# 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
svijet Linux aktivno prelazi na systemd, i ja sam to morao učiniti.
Jedna od ugodnih inovacija je prisutnost mjerača vremena. Općenito, o njima (i ne samo o njima) piše se poseban članak, ali reći ću vam ukratko.
Postoje radnje koje se moraju izvoditi povremeno. Morao sam pokrenuti logrotate da obrišem zapise lighttpd i php-fpm. Uobičajena stvar bi bila pisanje naredbi u cron-u, ali odlučio sam koristiti systemd monotoni mjerač vremena. Dakle, logrotate radi u strogom vremenskom intervalu.
Naravno, moguće je napraviti timere koji se aktiviraju na određene datume, ali meni to nije trebalo.
Primjer mjerača vremena:
- Datoteka mjerača vremena
[Unit] Description=RODOS temp daemon timer
[Timer]
Pri pokretanju=1 min
OnUnitActiveSec=1 min
[Instalirati]
WantedBy=timers.target
- Файл сервиса, вызываемого таймером:
```bash
[Unit]
Description=RODOS temp daemon
[Service]
ExecStart=/usr/bin/rodos.shPodržane ploče
Asus tinker board je glavna ploča na kojoj bi sve trebalo raditi. Odabrano kao jeftino i vrlo moćno.
Beaglebone black je prva ploča na kojoj je testiran rad (prilikom odabira jače ploče).
Qemu x86_64 - koristi se za razvoj otklanjanja pogrešaka.
Kako to radi
Prilikom pokretanja dolazi do dvostupanjskog vraćanja postavki:
- pokretanje skripte settings_restore (putem usluge). Vraća osnovne postavke sustava - vremensku zonu, lokalizaciju, mrežne postavke itd.
- pokretanje skripte za pripremu (putem usluge) - ovdje se pripremaju zabbix i baza podataka, IP se ispisuje na konzolu.
Kada je prvi put pokrenete, određuje se veličina druge particije SD kartice. Ako još uvijek ima nedodijeljenog prostora, medij se ponovno particionira, a odjeljak s podacima zauzima sav slobodan prostor. Ovo se radi kako bi se smanjila veličina instalacijske slike (sdcard.img). Osim toga, postgresql radni direktorij se stvara u ovom trenutku. Zato će prvo lansiranje s novim nosačem biti duže od sljedećih.
Prilikom povezivanja vanjskog diska, u trenutku pokretanja traži slobodan disk i formatira ga u ext4 s eksternom oznakom.
Pažnja! Prilikom povezivanja vanjskog pogona (kao i odspajanja ili zamjene), morate napraviti sigurnosnu kopiju i vratiti postavke!
Za praćenje temperature koristi se uređaj RODOS 5. Proizvođač daje izvorni kod svog pomoćnog programa za rad s uređajem. Kada je sustav uključen, pokreće se rodos timer, koji pokreće ovaj uslužni program jednom u minuti. Trenutna temperatura se zapisuje u datoteku /tmp/rodos_current_temp, nakon čega zabbix može pratiti ovu datoteku kao senzor.
Medij za pohranjivanje konfiguracije montiran je u /data direktorij.
Prilikom pokretanja sustava i njegove pripreme za rad, na konzoli se pojavljuje sljedeća poruka:
System starting, please waitNakon završetka pripremnih radova, promijenit će se na prikaz IP adrese:
current ip 192.168.1.32
Ready to workPostavljanje zabbixa za praćenje temperature
Za praćenje temperature, samo napravite 2 koraka:
- spojite RODOS uređaj na USB priključak
- stvoriti podatkovnu stavku u zabbixu
Otvorite zabbix web sučelje:
- Otvorite odjeljak Konfiguracija → Domaćini
- Kliknite na Stavke u retku našeg zabbix poslužitelja
- Kliknite na Create item

Unesite sljedeće podatke:
- ime - po vlastitom nahođenju (na primjer, ServerRoomTemp )
- Vrsta - zabbix agent
- Ključ - Rodos
- Vrsta-numerički
- Jedinice - C
- Razdoblje pohranjivanja povijesti — razdoblje pohranjivanja povijesti. ostalo 10 dana
- Razdoblje pohranjivanja trenda—razdoblje pohranjivanja dinamike promjena. Preostalo 30 dana
- Nova aplikacija - server Sobna temp
I pritisnite tipku DODAJ.

Upravljanje postavkama putem web sučelja
Web sučelje je napisano u PHP-u. Postoje glavne funkcije:
- pogledajte status uređaja
- mijenjanje mrežnih postavki

- mijenjanje korisničke lozinke
- izbor vremenske zone
- sigurnosno kopiranje/vraćanje/vraćanje na tvorničke postavke
- mogućnost povezivanja vanjskog pogona
- Ažuriranje sustava

Prijava na web sučelje zaštićena je lozinkom. Početna stranica - priručnik.
Adresa Zabbix sučelja: ${ip/dns}/zabbix
Adresa sučelja za upravljanje: ${ip/dns}/manage

Izvođenje u 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 -uređaj 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
Ova naredba će pokrenuti sustav sa 4 jezgre, 2048 RAM-a, omogućenim KVM-om, mrežnom karticom na bridge0 i dva diska: jedan za sustav i jedan vanjski za postgresql.
Slike se mogu pretvoriti i pokrenuti u Virtualboxu:
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdiZatim ih uvezite u virtualbox i spojite preko sata.
Zaključak
U procesu sam se zainteresirao za izradu proizvoda gotovog za korištenje - s ne baš lijepim sučeljem (ne volim ih pisati), ali onim koje radi i lako ga je konfigurirati.
Posljednji pokušaj instaliranja zabbix-uređaja u KVM pokazao je da je ovaj korak bio ispravan (nakon što je instalacija završena, sustav se ne pokreće). Možda radim nešto krivo 😉
Izvor: www.habr.com


