
Povijest zadatka
Male tvrtke, s jedne strane, trebaju kvalitetno praćenje svoje infrastrukture (osobito u svjetlu sveprisutne virtualizacije), dok se s druge strane suočavaju s financijskim poteškoćama prilikom nabave nove opreme. Također se često javljaju problemi sa serverima/hardverom: često se postavljaju 1-3 tower servera pored korisničkih radnih mjesta ili u maloj niši/špajzi.
Pojednostavljuje se korištenje već gotove zbirke (distributiv) koju je dovoljno staviti na microSD karticu i umetnuti u popularno jednoplatno računalo (beaglebone, obitelj raspberry pi i orange pi, asus tinker board). Osim toga, takva oprema nije skupa i može se instalirati bilo gdje.
Postavljanje zadatka
Projekt se u mnogome razvijao kao neka vrsta laboratorijskog rada s mogućnošću primjene rezultata.
Kao sustav monitoringa odabran je Zabbix, jer je to moćan, besplatan i dobro dokumentiran sustav.
Pitanje s hardverskom platformom postalo je ključno. Postavljanje posebnog računala za praćenje također nije najbolje rješenje - ili je skupo nabaviti novu opremu, ili tražiti staru, a u malim tvrtkama česti su problemi sa serverima/hardverom.
Korištenje sustava izgradnje buildroot omogućuje stvaranje specijaliziranih rješenja koja mogu koristiti osoblje s minimalnim znanjem o operativnim sustavima iz obitelji Linux. Ovaj sustav je prijateljski nastrojen prema novacima, ali istovremeno pruža široke mogućnosti prilagodbe u rukama iskusnog programera. Odlično se uklapa u zadatak jeftinog, ali potpuno funkcionalnog nadzora IT infrastrukture, minimalno zahtjevnog prema pripremi osoblja koje ga koristi.
Koraci rješenja
Odlučeno je inicijalno stvoriti firmware za x86_64 za pokretanje u qemu, jer je to praktično i brzo rješenje za debagiranje. Nakon toga, portirati na jednoplatno računalo arm (sviđa mi se asus tinker board).
Za sustav izgradnje odabran je buildroot. U početku nije imao paket zabbix, pa je bilo potrebno portirati ga. Bilo je problema s ruskom lokalizacijom, koji su riješeni primjenom odgovarajućih ispravki (napomena: u novijim verzijama buildroota ove ispravke više nisu potrebne).
Portiranje samog paketa zabbix bit će opisano u zasebnom članku.
Budući da sve treba funkcionirati kao firmware (nepromjenjiva slika sustava + restaurabilne datoteke konfiguracija/baze podataka), bilo je potrebno napisati svoje systemd ciljeve, servise i tajmere (target, service, timer).
Odluka je donesena o podjeli medija na 2 particije — particiju sa datotekama sustava i particiju sa promjenjivim konfiguracijama i datotekama baze podataka zabbix.
Rješavanje problema vezanih uz bazu podataka pokazalo se malo složenijim. Nije bilo poželjno smještati je direktno na medij. U isto vrijeme, veličina baze može doseći veličinu koja premašuje moguće veličine ramdiska. Stoga je odabrano kompromisno rješenje: baza podataka se smješta na drugu particiju sd kartice (moderni SLC kartice imaju do 30.000 ciklusa zapisivanja), ali postoji postavka koja omogućava korištenje vanjskog medija (npr. usb-hdd).
Praćenje temperature realizirano je putem uređaja RODOS-5. Naravno, može se koristiti dallas 1820 direktno, ali je brže i jednostavnije priključiti USB.
Kao bootloader za x86_64 odabran je grub2. Bilo je potrebno napisati minimalnu konfiguraciju za pokretanje.
Nakon ispravke na qemu, izvršeno je portiranje na asus tinker board. U strukturi mog overlay-a prvotno je bila predviđena podrška za više platformi — izdvajanje specifičnih konfiguracija za svaku ploču (defconfig ploče, bootloader, generiranje slike sa particijom sustava) i maksimalna uniformnost u postavkama datotečnog sustava/kreiranje slike s podacima. Zbog takve pripreme, portiranje je prošlo brzo.
Toplo se preporučuje 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 — arhiva čistog buildroota
overlay — moj katalog s external-tree. U njemu se čuva sve potrebno za sastavljanje firmware-a uz pomoć buildroota
README.md — opis projekta i upute na engleskom jeziku.
run_me.sh — skripta koja priprema sustav za izgradnju. Raspakirava buildroot iz arhive, povezuje ga s overlay-om (putem mehanizma external-tree) i omogućava odabir ciljne ploče za izgradnju.
[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Odaberite defconfig, pritisnite A za prekid. Zadano [0]Nakon toga dovoljno je preći u direktorij buildroot-2019.05 i izvršiti 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
updatePotrebni datoteke:
- sdcard.img — slika medija za zapisivanje na sd-kartu (putem dd-a ili rufusa pod windowsima).
- qemu.qcow2 — slika medija 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 priručnika
Nema smisla pisati istu instrukciju više puta. Najlogičnije je napisati je jednom u markdown, a zatim konvertirati u PDF za preuzimanje i HTML za web sučelje. To je moguće zahvaljujući paketu pandoc.
Uz to, svi ti datoteke trebaju biti generirane prije nego što se izgradi slika sustava, pa su post-build skripte već beskorisne. Stoga je generacija izvršena u obliku paketa manuals. Može se vidjeti u overlay/package/manuals.
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 Linuxa aktivno prelazi na systemd, pa sam i ja to morao učiniti.
Od ugodnih novina — postojanje tajmera. O njima (i ne samo o njima) piše se poseban članak, ali ću ukratko objasniti.
Postoje radnje koje treba izvoditi periodički. Trebao sam pokrenuti logrotate za čišćenje logova lighttpd-a i php-fpm-a. Najobičnije bi bilo napisati naredbe u cron, ali odlučio sam koristiti monotoni tajmer systemd. Na taj način, logrotate se pokreće kroz strogo definirani vremenski interval.
Naravno, postoji mogućnost kreiranja tajmera koji se aktiviraju na određene datume, ali to mi nije bilo potrebno.
Primjer tajmera:
- Datoteka tajmera
[Unit] Description=RODOS temp daemon timer
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
[Install]
WantedBy=timers.target
- Datoteka usluge koja se poziva tajmerom:
```bash
[Unit]
Description=RODOS temp daemon
[Service]
ExecStart=/usr/bin/rodos.shPodržane ploče
Asus tinker board — glavna ploča na kojoj sve treba raditi. Odabrana je kao povoljna i prilično moćna.
Beaglebone black — prva ploča na kojoj je testirana funkcionalnost (u razdoblju odabira moćnije ploče).
Qemu x86_64 — koristi se za razvoj i debugiranje.
Kako radi
Pri pokretanju dolazi do dvostupanjskog vraćanja postavki:
- pokretanje skripte settings_restore (putem usluge). Obnavlja osnovne postavke sustava — vremensku zonu, lokalne postavke, mrežne postavke itd.
- pokretanje skripte prepare (putem servisa) — ovdje se priprema zabbix, baza podataka, a IP se ispisuje u konzolu.
Pri prvom pokretanju određuje se veličina druge particije SD kartice. Ako postoji preostali neodređen prostor, uređaj se ponovo particionira, a particija za podatke zauzima sav slobodan prostor. To je učinjeno s ciljem smanjenja veličine instalacijskog imaga (sdcard.img). Osim toga, u ovom trenutku se stvara radni katalog postgresql. Zbog toga će prvo pokretanje s novim medijem trajati dulje od sljedećih.
Pri povezivanju vanjskog diska, u trenutku pokretanja traži slobodan disk i formatira ga u ext4 s oznakom external.
Pažnja! Pri povezivanju vanjskog diska (kao i prilikom isključivanja ili zamjene), potrebno je napraviti backup i obnovu postavki!
Za praćenje temperature koristi se uređaj RODOS 5. Proizvođač daje izvorne kodove svoje pogodnosti za rad s uređajem. Pri uključivanju sustava pokreće se tajmer rodos koji ovu pogodnost pokreće svake minute. Trenutna temperatura se zapisuje u datoteku /tmp/rodos_current_temp, nakon čega zabbix može pratiti ovu datoteku kao senzor.
Medij za pohranu konfiguracije montira se u direktorij /data.
Pri pokretanju sustava i pripremi za rad, u konzoli se pojavljuje poruka:
Sistem se pokreće, molimo pričekajteNakon završetka pripremnih radova, promijenit će se u ispis IP adrese:
trenutni ip 192.168.1.32
Spreman za radPostavke zabbixa za praćenje temperature
Za praćenje temperature potrebno je napraviti 2 koraka:
- povezati uređaj RODOS na usb priključak
- izraditi data item u zabbixu
Otvorite web sučelje zabbixa:
- Otvorite odjeljak Konfiguracija → Hostovi
- Kliknite na Stavke u redu našeg zabbix poslužitelja
- Kliknite na Izradi stavku

Unesite sljedeće podatke:
- ime — po vašem izboru (na primjer, serverRoomTemp)
- Tip — zabbix agent
- Ključ — rodos
- Tip — numerički
- Jedinice — C
- Razdoblje pohrane povijesti — trajanje pohrane povijesti. Ostavio 10 dana
- Razdoblje pohrane trenda — trajanje pohrane dinamike promjena. Ostavio 30 dana
- Nova aplikacija — server Room Temp
I kliknite gumb DODAJ.

Upravljanje postavkama putem web sučelja
Web sučelje napisano je u php-u. Ima osnovne funkcije:
- pregled stanja uređaja
- izmjena mrežnih postavki

- izmjena lozinke korisnika
- odabir vremenske zone
- rezervno kopiranje/obnova/ponovno postavljanje na tvorničke postavke
- mogućnost povezivanja vanjskog diska
- Ažuriranje sustava

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

Pokretanje 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 -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
Ova komanda će pokrenuti sustav s 4 jezgre, 2048 RAM-a, aktiviranim KVM-om, mrežnom karticom na mostu bridge0 i dva diska: za sustav i vanjski za postgresql.
Slike se mogu konvertirati i pokretati u Virtualboxu:
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdiNakon toga ih uvesti u virtualbox i povezati putem sata.
Zaključak
U procesu sam se zainteresirao za izradu gotovog proizvoda — s ne baš lijepim sučeljem (ne volim ih pisati), ali funkcionalnom i jednostavnom za konfiguraciju.
Posljednji pokušaj instalacije zabbix-appliance u KVM-u pokazao je ispravnost ovog koraka (nakon završetka instalacije sustav se ne pokreće). Možda radim nešto pogrešno 😉
Izvor: habr.com


