Ongelmahistoria
Pienet yritykset toisaalta tarvitsevat infrastruktuurinsa laadukasta seurantaa (etenkin laajalle levinneen virtualisoinnin valossa), toisaalta niiden on taloudellisesti vaikeaa hankkia uusia laitteita. Palvelin/laitteisto-ongelmat ovat myös yleisiä: usein 1-3 tornipalvelinta on käyttäjien työasemien vieressä tai pienessä nichessä/kaapissa.
On helpompi käyttää valmiita kokoonpanoa (jakelua), joka tarvitsee vain ladata microSD-kortille ja laittaa tavalliseen yksilevytietokoneeseen (beaglebone-, raspberry pi- ja orange pi -perheet, asus tinker board). Lisäksi tällaiset laitteet ovat edullisia ja ne voidaan asentaa minne tahansa.
Ongelma
Projekti kehittyi monella tapaa eräänlaisena laboratoriotyönä, jossa oli mahdollisuus soveltaa tuloksia.
Zabbix valittiin valvontajärjestelmäksi, koska se on tehokas, ilmainen ja hyvin dokumentoitu järjestelmä.
Laitealustan ongelma on kärjistynyt.. Erillisen koneen valvonta ei myöskään ole kovin hyvä ratkaisu - joko uusien laitteiden hankinta on kallista, tai vanhojen laitteiden etsiminen + pienissä yrityksissä usein ongelmia palvelimen kanssa/ laitteisto.
Buildroot build -järjestelmän avulla voit luoda erikoistuneita ratkaisuja, joita voivat käyttää henkilöstö, jolla on vain vähän Linux-käyttöjärjestelmien tuntemusta. Tämä järjestelmä on ystävällinen aloittelijoille, mutta tarjoaa samalla runsaasti räätälöintimahdollisuuksia kokeneen kehittäjän käsissä. Se sopii erinomaisesti IT-infrastruktuurin halvan, mutta täysin toimivan valvonnan ongelman ratkaisemiseen, ja sitä käyttävän henkilöstön koulutusvaatimukset ovat minimaaliset.
Ratkaisun vaiheet
Aluksi päätettiin luoda laiteohjelmisto x86_64:lle toimimaan qemussa, koska tämä on kätevä ja nopea ratkaisu virheenkorjaukseen. Sitten liitä se käsivarteen yksilevyiseen tietokoneeseen (pidin asus tinker boardista).
buildroot valittiin rakennusjärjestelmäksi. Aluksi siitä puuttui zabbix-paketti, joten se jouduttiin siirtämään.Venäläisen kielen kanssa oli ongelmia, jotka ratkaistiin käyttämällä sopivia korjaustiedostoja (huom: buildrootin uudemmissa versioissa näitä korjauksia ei enää tarvita).
Itse zabbix-paketin siirtäminen kuvataan erillisessä artikkelissa.
Koska kaiken pitäisi toimia laiteohjelmistona (muuttumaton järjestelmäkuva + palautettavat konfiguraatio-/tietokantatiedostot), oli tarpeen kirjoittaa omat järjestelmäkohteet, palvelut ja ajastimet (kohde, palvelu, ajastin).
Media päätettiin jakaa kahteen osaan - osioon järjestelmätiedostot ja osaan, jossa on muutettavat konfiguraatiot ja zabbix-tietokantatiedostot.
Tietokantaan liittyvien ongelmien ratkaiseminen osoittautui hieman vaikeammaksi. En halunnut laittaa sitä suoraan mediaan. Samalla tietokannan koko voi saavuttaa koon, joka ylittää mahdollisen muistilevyn koon. Siksi valittiin kompromissiratkaisu: tietokanta sijaitsee SD-kortin toisella osiolla (nykyaikaisissa SLC-korteissa on jopa 30 000 kirjoitusjaksoa), mutta siellä on asetus, joka mahdollistaa ulkoisen median käytön (esim. hdd).
Lämpötilan valvonta toteutettiin RODOS-5-laitteella. Voit tietysti käyttää Dallas 1820:tä suoraan, mutta USB:n liittäminen oli nopeampaa ja helpompaa.
grub86 valittiin x64_2:n käynnistyslataimeksi. Sen käynnistämiseksi piti kirjoittaa pieni konfiguraatio.
Kun qemulla oli virheenkorjaus, se siirrettiin asus tinker boardille. Peittokuvani rakenne oli alun perin tarkoitus olla monikäyttöinen - jokaiselle levylle ominaisten asetusten allokointi (levyn defconfig, käynnistyslatain, kuvan luominen järjestelmäosion avulla) ja maksimaalinen yhtenäisyys tiedostojärjestelmän mukauttamisessa / kuvan luomisessa tiedoilla. Tällaisen valmistelun ansiosta siirtäminen sujui nopeasti.
On erittäin suositeltavaa lukea johdantoartikkelit:
Kuinka koota
Arkiston kloonauksen jälkeen saadaan seuraava tiedostorakenne:
[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.sh
buildroot-2019.05.tar.gz - puhdista buildroot-arkisto
peittokuva on hakemistoni ulkoisen puun kanssa. Tähän on tallennettu kaikki, mitä tarvitset laiteohjelmiston rakentamiseen buildrootin avulla.
README.md - hankkeen kuvaus ja käsikirja englanniksi.
run_me.sh on skripti, joka valmistelee koontijärjestelmän. Laajentaa buildrootin arkistosta, liittää siihen peitteen (ulkoisen puumekanismin kautta) ja antaa sinun valita koottavan kohdelevyn
[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Select defconfig, press A for abort. Default [0]
Mene tämän jälkeen vain buildroot-2019.05-hakemistoon ja suorita make-komento.
Kun koonti on valmis, kaikki koontitulokset ovat tulos/kuvahakemistossa:
[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
Vaaditut tiedostot:
- sdcard.img - mediakuva tallennettavaksi SD-kortille (dd:n tai rufuksen kautta wibdowsin alla).
- qemu.qcow2 - qemussa suoritettava mediakuva.
- external.qcow2 - tietokannan ulkoinen mediakuva
- monitor-0.9-beta.tar.gz - arkisto verkkokäyttöliittymän kautta päivitettäväksi
Oppaiden sukupolvi
Ei kannata kirjoittaa samoja ohjeita useaan kertaan. Ja loogisin asia on kirjoittaa se kerran markdowniin ja muuntaa sitten PDF-muotoon lataamista varten ja html-muotoon verkkokäyttöliittymää varten. Tämä on mahdollista pandoc-paketin ansiosta.
Samanaikaisesti kaikki nämä tiedostot on luotava ennen kuin järjestelmäkuva on koottu; nuo jälkikoonnin skriptit ovat jo hyödyttömiä. Siksi sukupolvi tehdään käsikirjapaketin muodossa. Voit katsoa peittokuvaa/pakettia/opasta.
Manuals.mk-tiedosto (joka tekee kaiken työn)
################################################################################
#
# 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
Linux-maailma siirtyy aktiivisesti systemd-järjestelmään, ja minunkin piti tehdä se.
Yksi miellyttävistä innovaatioista on ajastimien läsnäolo. Yleensä heistä (eikä vain heistä) kirjoitetaan erillinen artikkeli, mutta kerron sinulle lyhyesti.
On toimintoja, jotka on suoritettava säännöllisesti. Minun piti suorittaa logrotate tyhjentääkseni lighttpd- ja php-fpm-lokit. Tavallinen asia olisi kirjoittaa komennot cronilla, mutta päätin käyttää systemd-monotonista ajastinta. Joten logrotate toimii tiukasti aikavälillä.
Tietenkin on mahdollista luoda ajastimia, jotka laukeavat tiettyinä päivinä, mutta en tarvinnut tätä.
Esimerkki ajastimesta:
- Ajastintiedosto
[Unit] Description=RODOS temp daemon timer
OnUnitActiveSec=1 min [Asenna] WantedBy=times.target
- Файл сервиса, вызываемого таймером:
```bash
[Unit]
Description=RODOS temp daemon
[Service]
ExecStart=/usr/bin/rodos.sh
Tuetut levyt
Asus tinker board on emolevy, jolla kaiken pitäisi toimia. Valittu edulliseksi ja erittäin tehokkaaksi.
Beaglebone black on ensimmäinen lauta, jolla testattiin toimintaa (tehokkaamman laudan valinnassa).
Qemu x86_64 - käytetään virheenkorjauskehitykseen.
Miten se toimii
Käynnistyksen yhteydessä asetusten palautus tapahtuu kaksivaiheisesti:
- Settings_restore-komentosarjan suorittaminen (palvelun kautta). Se palauttaa järjestelmän perusasetukset - aikavyöhyke, kieli, verkkoasetukset jne.
- valmisteluskriptin suorittaminen (palvelun kautta) - tässä zabbix ja tietokanta valmistetaan, IP tulostetaan konsoliin.
Kun käynnistät sen ensimmäisen kerran, SD-kortin toisen osion koko määritetään. Jos varaamatonta tilaa on vielä jäljellä, media ositetaan uudelleen ja tietoosio vie kaiken vapaan tilan. Tämä tehdään asennuskuvan (sdcard.img) koon pienentämiseksi. Lisäksi postgresql-työhakemisto luodaan tässä vaiheessa. Tästä syystä ensimmäinen julkaisu uudella operaattorilla on pidempi kuin myöhemmät.
Kun kytket ulkoisen aseman, se etsii käynnistyshetkellä vapaan aseman ja alustaa sen ext4:ksi ulkoisella tunnisteella.
Huomio! Kun liität ulkoisen aseman (sekä irrotat tai vaihdat sen), sinun on tehtävä varmuuskopio ja palautettava asetukset!
Lämpötilan valvontaan käytetään laitetta RODOS 5. Valmistaja toimittaa apuohjelman lähdekoodin laitteen kanssa työskentelyyn. Kun järjestelmä käynnistetään, rodos-ajastin käynnistyy, joka käynnistää tämän apuohjelman kerran minuutissa. Nykyinen lämpötila kirjoitetaan tiedostoon /tmp/rodos_current_temp, jonka jälkeen zabbix voi valvoa tätä tiedostoa anturina.
Määritysten tallennusväline on asennettu /data-hakemistoon.
Kun järjestelmä käynnistetään ja valmistetaan käyttöön, konsoliin tulee seuraava viesti:
System starting, please wait
Valmistelutyön jälkeen se muuttuu näyttämään IP-osoite:
current ip 192.168.1.32
Ready to work
Zabbixin asettaminen lämpötilan valvontaan
Seuraa lämpötilaa tekemällä vain 2 vaihetta:
- liitä RODOS-laite USB-porttiin
- Luo tietokohde zabbixissa
Avaa zabbix-verkkokäyttöliittymä:
- Avaa osio Asetukset → Isännät
- Napsauta Kohteet zabbix-palvelimemme riviltä
- Napsauta Luo kohde
Syötä seuraavat tiedot:
- nimi - oman harkintasi mukaan (esimerkiksi serverRoomTemp )
- Tyyppi - zabbix-agentti
- Avain - Rodos
- Tyyppi-numeerinen
- Yksiköt - C
- Historian tallennusaika — historian säilytysaika. jäljellä 10 päivää
- Trendin tallennusaika — muutosten dynamiikan tallennusaika. Jäljellä 30 päivää
- Uusi sovellus - palvelin Huonelämpötila
Ja paina LISÄÄ-painiketta.
Hallitse asetuksia verkkokäyttöliittymän kautta
Verkkokäyttöliittymä on kirjoitettu PHP:llä. Siinä on päätoiminnot:
- katso laitteen tila
- verkkoasetusten muuttaminen
- käyttäjän salasanan vaihtaminen
- aikavyöhykkeen valinta
- varmuuskopiointi/palautus/tehdasasetusten palautus
- mahdollisuus liittää ulkoinen asema
- Järjestelmän päivitys
Verkkokäyttöliittymään kirjautuminen on suojattu salasanalla. Aloitussivu - käsikirja.
Zabbix-käyttöliittymän osoite: ${ip/dns}/zabbix
Hallintaliittymän osoite: ${ip/dns}/manage
Juokse qemussa
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 -asematiedosto=tulostus/kuvat/qemu.qcow2,format=qcow2,aio=langat -laite virtio-scsi-pci,id=scsi0 -asematiedosto=lähtö/kuvat/ulkoinen.qcow2,format=qcow2,aio=säikeet
Tämä komento käynnistää järjestelmän, jossa on 4 ydintä, 2048 RAM, KVM käytössä, verkkokortti bridge0:ssa ja kaksi levyä: yksi järjestelmälle ja toinen ulkoinen postgresql:lle.
Kuvat voidaan muuntaa ja ajaa Virtualboxissa:
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdi
Tuo ne sitten virtualboxiin ja muodosta yhteys satan kautta.
Johtopäätös
Samalla innostuin valmistamaan käyttövalmis tuote - jolla ei ole kovin kaunis käyttöliittymä (en pidä niiden kirjoittamisesta), mutta joka toimii ja on helppo konfiguroida.
Viimeinen yritys asentaa zabbix-laite KVM:ään osoitti, että tämä vaihe oli oikein (järjestelmä ei käynnisty asennuksen jälkeen). Ehkä teen jotain väärin 😉
Lähde: will.com