
Zgodovina naloge
Majhne firme se s ene strani soočajo z nujno potrebo po kakovostnem spremljanju svoje infrastrukture (še posebej v luči vseprisotne virtualizacije), medtem ko je z druge strani finančno težko nabaviti novo opremo. Pogosto se pojavljajo tudi težave s strežnikom/hardwarejem: pogosto so skupaj postavljeni 1-3 tower strežniki ob delovnih mestih uporabnikov ali v majhnem predalu.
Lažje je uporabiti že pripravljen paket (distribucijo), ki jo je dovolj preprosto naliti na kartico microSD in jo vstaviti v razširjen enoplatni računalnik (beaglebone, družina raspberry pi in orange pi, asus tinker board). Poleg tega je taka oprema poceni in jo je mogoče namestiti kjerkoli.
Definisanje zadatka
Projekt se je v veliki meri razvijal kot neka laboratorijska naloga z možnostjo uporabe rezultatov.
Kot sistem za spremljanje je bil izbran zabbix, ker je to močan, brezplačen in dobro dokumentiran sistem.
Vprašanje o strojni platformi je postalo nujno. Postaviti ločeno napravo za spremljanje tudi ni najboljša rešitev — bodisi je drago kupiti novo opremo, bodisi je treba iskati staro + v manjših podjetjih so pogoste težave s strežnikom/hardwarejem.
Uporaba sistema zbirke buildroot omogoča ustvarjanje specializiranih rešitev, ki jih lahko obvladujeta osebje z minimalnim znanjem o operacijskih sistemih družine Linux. Ta sistem je prijazen do novincev, hkrati pa ponuja široke možnosti prilagajanja v rokah izkušenega razvijalca. Odlično je primeren za nalogo poceni, a funkcionalnega spremljanja IT infrastrukture, ki zahteva minimalno pripravo osebja, ki ga uporablja.
Koraki rešitve
Sprva je bilo odločeno, da se ustvari programska oprema za x86_64 za zagon v qemu, saj je to priročna in hitra rešitev za odpravljanje napak. Nato je bila portirana na enoplatni računalnik arm (všeč mi je asus tinker board).
Kot sistem za zbiranje je bil izbran buildroot. Sprva ni vseboval paketa zabbix, zato ga je bilo treba portirati. Bile so težave z rusko lokalizacijo, ki so bile rešene z uporabo ustreznih popravkov (opomba: v novejših različicah buildroot ti popravki niso več potrebni).
Portiranje samega paketa zabbix bo opisano v posebnem članku.
Ker je vse moralo delovati kot programska oprema (neprenosljiva podoba sistema + obnovljive datoteke konfiguracij/zbirk podatkov), je bilo potrebno napisati svoje systemd cilje, storitve in časovnike (target, service, timer).
Odločeno je bilo, da se nosilec razdeli na dva razdelka - razdelek z datotekami sistema in razdelek z spremenljivimi konfiguracijami in datotekami zbirke podatkov zabbix.
Rešitev nalog, povezanih z zbirko podatkov, se je izkazala za nekoliko bolj zapleteno. Zbirke podatkov ni bilo želelo shraniti neposredno na nosilec. Hkrati lahko velikost zbirke preseže velikost možnega ramdisk-a. Zato smo izbrali kompromisno rešitev: zbirka podatkov se nahaja na drugem razdelku sd-kartice (sodobne SLC-kartice imajo do 30.000 ciklov zapisovanja), vendar je na voljo nastavitev, ki omogoča uporabo zunanjega nosilca (npr. usb-hdd).
Nadziranje temperature je bilo izvedeno preko naprave RODOS-5. Seveda je mogoče neposredno uporabiti dallas 1820, vendar je bilo hitreje in lažje priključiti USB.
Za x86_64 je bila izbrana grub2 kot nalagalnik. Potrebno je bilo napisati minimalno konfiguracijo za zagon.
Po odpravljanju napak na qemu je bilo izvedeno prenos na asus tinker board. V strukturi mojega overlay-a je bila prvotno zasnovana cross-platformnost - izločitev specifičnih konfiguracij za vsak trg (defconfig naprave, nalagalnik, generacija podobe z razdelkom sistema) in maksimalna enotnost pri nastavitvi datotečnega sistema/ustvarjanju podobe z podatki. Zaradi te priprave je prenos potekal hitro.
Priporočamo, da preberete uvodne članke:
Kako sestaviti
Po kloniranju repozitorija se pridobi naslednja struktura datotek:
[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.shbuildroot-2019.05.tar.gz - arhiv čistega buildroot
overlay - moj imenik z external-tree. V njem so shranjene vse potrebne datoteke za sestavljanje programske opreme z uporabo buildroot
README.md - opis projekta in navodila v angleščini.
run_me.sh - skript, ki pripravi sistem za sestavljanje. Razširi buildroot iz arhiva, priključi mu overlay (preko mehanizma external-tree) in omogoča izbiro ciljne naprave za sestavljanje.
[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Izberite defconfig, pritisnite A za prekinitev. Privzeta [0]Po tem zadostuje, da preidete v imenik buildroot-2019.05 in izvršite ukaz make.
Po končanem sestavljanju bodo vsi rezultati sestavljanja v imeniku 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 — slika nosilca za zapis na sd-kartico (preko dd ali rufus v Windows).
- qemu.qcow2 — slika nosilca za zagon v qemu.
- external.qcow2 — slika external-nosalca za bazo podatkov
- monitor-0.9-beta.tar.gz — arhiv za posodobitev preko spletnega vmesnika
Generiranje priročnikov
Ni smiselno večkrat pisati istega navodila. Najbolje je napisati enkrat v markdown, nato pa ga pretvoriti v PDF za prenos in HTML za spletni vmesnik. To je mogoče zahvaljujoč paketu pandoc.
Poleg tega je treba generirati vse te datoteke pred sestavitvijo sistemske slike, saj post-build skripti postanejo brez pomena. Zato je generacija izvedena v obliki paketa manuals. Ogledati si ga lahko v overlay/package/manuals.
Datoteka manuals.mk (ki opravlja vse delo)
################################################################################
#
# 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))-enota
Svet Linuxa aktivno prehaja na systemd, kar sem moral storiti tudi jaz.
Med prijetnimi novostmi je tudi prisotnost timerjev. Na to temo (in ne samo to) je napisana posebna članek, vendar bom na kratko povedal.
Obstajajo dejanja, ki jih je treba izvajati občasno. Potreboval sem, da se logrotate za čiščenje dnevnikov lighttpd in php-fpm izvaja. Najbolj bi bilo običajno pisati ukaze v cron, vendar sem se odločil uporabiti monotono timer systemd. Tako se logrotate zažene skozi strogo časovno obdobje.
Seveda je možna tudi ustvarjanje timerjev, ki se sprožijo na določene datume, vendar tega nisem potreboval.
Primer timerja:
- Datoteka timerja
[Unit] Description=RODOS temp daemon timer
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
[Install]
WantedBy=timers.target
- Datoteka storitve, ki jo aktivira timer:
```bash
[Unit]
Description=RODOS temp daemon
[Service]
ExecStart=/usr/bin/rodos.shPodprte plošče
Asus tinker board — glavna plošča, na kateri bi moralo vse delovati. Izbrana je bila kot cenovno dostopna in precej močna.
Beaglebone black — prva plošča, na kateri je bila testirana funkcionalnost (v času izbire močnejše plošče).
Qemu x86_64 — uporablja se za razvoj in odpravljanje napak.
Kako deluje
Ob zagonu se izvede dvostopenjski postopek obnavljanja nastavitev:
- začetek skripte settings_restore (preko storitve). Obnovi osnovne nastavitve sistema — časovni pas, lokalne nastavitve, omrežne nastavitve itd.
- začetek skripte prepare (preko storitve) — tukaj se pripravi zabbix, baza podatkov, izpiše se IP v konzolo.
Pri prvem zagonu se določi velikost drugega razdelka sd-kartice. V primeru, da še obstaja nedodeljen prostor — se nosilec ponovno razdeli, razdelek za podatke zavzema celoten prosti prostor. To je narejeno z namenom zmanjšanja velikosti namestitvenega obrazca (sdcard.img). Poleg tega se v tem trenutku ustvari delovni imenik postgresql. Zato bo prvi zagon z novim nosilcem daljši od naslednjih.
Ko priključite zunanji disk, ob zagonu išče prost disk in ga formatira v ext4 z oznako external.
Pozor! Pri priključenju zunanjega diska (prav tako pri njegovem izklopu ali zamenjavi) je potrebno narediti varnostno kopijo in obnovitev nastavitev!
Za spremljanje temperature se uporablja naprava RODOS 5. Proizvajalec daje izvorne kode svoje aplikacije za delo z napravo. Ob zagonu sistema se zažene časovnik rodos, ki zažene to aplikacijo enkrat na minuto. Trenutna temperatura se zapiše v datoteko /tmp/rodos_current_temp, po čemer lahko zabbix spremlja to datoteko kot senzor.
Nosilec za shranjevanje konfiguracije se montira v imenik /data.
Ob zagonu sistema in pripravi na delo se v konzoli prikaže sporočilo:
Sistem se začenja, prosimo počakajtePo zaključku pripravljalnih del se bo sporočilo spremenilo v izpis IP-naslova:
trenutni ip 192.168.1.32
Pripravljen za deloNastavitev zabbix za spremljanje temperature
Za spremljanje temperature je dovolj narediti 2 koraka:
- priključiti napravo RODOS na usb-port
- ustvariti podatkovni element v zabbix
Odprtje spletnega vmesnika zabbix:
- Odprtje razdelka Konfiguracija → Gosti
- Kliknite na Elemente v vrsti našega zabbix strežnika
- Kliknite na Ustvari element

Vnesite naslednje podatke:
- ime — po vaši izbiri (na primer, serverRoomTemp)
- Tip — zabbix agent
- Ključ — rodos
- Tip — numeričen
- Enote — C
- Obdobje shranjevanja zgodovine — čas shranjevanja zgodovine. Pustil sem 10 dni
- Obdobje shranjevanja trendov — čas shranjevanja dinamike sprememb. Pustil sem 30 dni
- Nova aplikacija — server Room Temp
In pritisnite gumb DODAJ.

Upravljanje nastavitev prek spletnega vmesnika
Spletni vmesnik je napisan v php. Ima osnovne funkcije:
- pregled stanja naprave
- sprememba omrežnih nastavitev

- sprememba gesla uporabnika
- izbira časovnega pasu
- varnostno kopiranje/obnovitev/resetiranje na tovarniške nastavitve
- možnost priključitve zunanjega diska
- Posodobitev sistema

Vstop v spletni vmesnik je zaščiten z geslom. Začetna stran — navodilo.
Naslov vmesnika zabbix: ${ip/dns}/zabbix
Naslov upravljačkog 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 sistem sa 4 jezgra, 2048 RAM, aktiviranim KVM, mrežnom karticom na mostu bridge0 i dva diska: za sistem i external za postgresql.
Slike se mogu konvertovati i pokretati u Virtualbox-u:
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdiNakon čega ih uvesti u virtualbox i povezati preko sata.
Zaključek
Tokom procesa postalo mi je zanimljivo napraviti gotov proizvod – sa ne previše lepim sučeljem (ne volim ih pisati), ali funkcionalan i jednostavan za podešavanje.
Poslednji pokušaj instalacije zabbix-appliance u KVM pokazao je ispravnost ovog koraka (nakon završetka instalacije sistem se ne pokreće). Moguće je da nešto radim pogrešno 😉
Izvor: habr.com


