Buildroot: zabbix-server ilə çox platformalı firmware yaratma

Buildroot: zabbix-server ilə çox platformalı firmware yaratma

Problemin tarixi

Kiçik ölçülü şirkətlər bir tərəfdən infrastrukturunun keyfiyyətli monitorinqinə ehtiyac duyurlar (xüsusən də geniş yayılmış virtualizasiya fonunda), digər tərəfdən isə yeni avadanlıq almaq maliyyə cəhətdən çətindir. Həmçinin, serverlərlə/hərtərəfli avadanlıqla bağlı tez-tez problemlərlə qarşılaşılır: çox vaxt 1-3 tower-server istifadəçi iş sahələrinin yanında və ya kiçik bir nişdə/podvalda yerləşir.

Artıq mövcud olan bir paket (distiribütiv) istifadə etmək daha asandır, bunun üçün sadəcə olaraq onu microSD karta yükləmək və geniş yayılmış bir kart kompüterinə (beaglebone, raspberry pi və orange pi ailələri, asus tinker board) daxil etmək kifayətdir. Bundan əlavə, belə avadanlıq ucuzdur və istənilən yerdə quraşdırıla bilər.

Məsələnin qoyulması

Layihə bir növ laboratoriya işi kimi inkişaf etdi, nəticələrin tətbiq olunma imkanları ilə.

Monitorinq sistemi kimi zabbix seçilmişdir, çünki bu güclü, pulsuz və yaxşı sənədləşdirilmiş bir sistemdir.

Avadanlıq platforması ilə bağlı açıq bir məsələ yarandı. Monitorinq üçün ayrıca bir maşın qoymaq da yaxşı bir həll deyil — ya yeni avadanlıq almaq bahalıdır, ya da köhnə avadanlıq axtarmaq + kiçik şirkətlərdə serverlərlə/hərtərəfli avadanlıqla bağlı tez-tez problemlər olur.

Buildroot qurma sisteminin istifadəsi, minimal Linux biliklərinə malik işçilər tərəfindən istismar edilə bilən spesifik həllər yaratmağa imkan verir. Bu sistem başlanğıc üçün dostdur, lakin təcrübəli inkişafçıların əlinə geniş yeni imkanlar təqdim edir. Bu, məsələnin ucuz, lakin tam funksional İT-infrastrukturu monitor olduqca az hazırlığı tələb edən bir həll olması üçün çox yaxşıdır.

Həll addımları

İlk olaraq, qemu-da işə salmaq üçün x86_64 arxitekturasına uyğun bir firmware yaratmaq qərarına gəldik, çünki bu, debuq üçün rahat və sürətli bir həlldir. Daha sonra bunu arm kart kompüterinə (mən asus tinker board-u bəyəndim) köçürmək.

Buildroot qurma sistemi seçilmişdir. İlk başda zabbix paketi yoxdur, buna görə onu köçürmək lazım oldu. Rus dili lokalizasiyasında problemlər var idi ki, bunlar müvafiq yamanmalar tətbiq etməklə həll olundu (qeyd: daha yeni buildroot versiyalarında bu yamanmalar artıq lazım deyil).

Zabbix paketinin köçürülməsi ayrı bir məqalədə təsvir ediləcək.

Hər şey firmware kimi işləməli olduğu üçün (dəyişməz sistem imici + bərpa olunan konfiqurasiya/fayl verilənlər bazası faylları), öz systemd target, xidmətləri və zamanlayıcıları (target, service, timer) yazmaq lazım idi.

Qurğunun 2 hissəyə bölünməsi qərarı alındı — sistem faylları üçün hissə və dəyişdirilə bilən konfiqurasiyalar və zabbix verilənlər bazası faylları üçün hissə.

Veritabanı ile ilgili sorunları çözmek biraz daha karmaşık oldu. Onu doğrudan depolama alanında barındırmak pek istenmiyordu. Aynı zamanda, veritabanının boyutu, olası bir ramdisk boyutunu aşabilir. Bu nedenle, bir uzlaşma çözümü seçildi: veritabanı, sd kartın ikinci bölümünde yer alıyor (modern SLC kartlar 30.000 yazma döngüsüne kadar sahip olabilir), ancak harici bir depolama cihazı (örneğin, usb-hdd) kullanmaya izin veren bir ayar var.

Sıcaklık izleme, RODOS-5 cihazı aracılığıyla gerçekleştirildi. Elbette, doğrudan dallas 1820 kullanmak mümkün, ancak USB'yi takmak daha hızlı ve pratikti.

x86_64 için önyükleyici olarak grub2 seçildi. Başlatmak için minimal bir yapılandırma yazmak gerekti.

qemu üzerindeki hata ayıklama işlemlerinin ardından asus tinker board'a taşındı. Benim özyapım yapımım başlangıçta platformlar arası çalışabilirliğe dayandırıldı — her kart için özel konfigürasyonların (kartın defconfig’i, önyükleyici, sistem bölümüne sahip imaj oluşturma) ayrılması ve dosya sisteminin ayarlanmasında maksimum tekdüzelik sağlandı. Bu tür bir hazırlıkla, taşınma işlemi hızlı bir şekilde gerçekleşti.

Giriş makalelerini okumak için şiddetle tavsiye edilir:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Nasıl toplayacağınız

Proje github'da saklanmaktadır
Depoyu klonladıktan sonra aşağıdaki dosya yapısı elde edilir:

[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.sh

buildroot-2019.05.tar.gz — temiz bir buildroot arşivi
overlay — external-tree için benim dizinim. Firmware’i buildroot ile toplamak için gerekli olan her şey burada saklanmaktadır.
README.md — projenin tanımı ve İngilizce kılavuzu.
run_me.sh — derleme sistemini hazırlayan bir betik. Arşivden buildroot'u açar, ona overlay ekler (external-tree mekanizması aracılığıyla) ve derleme için hedef kartı seçmenizi sağlar.

[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Defconfig seçin, iptal için A'ya basın. Varsayılan [0]

Bundan sonra, buildroot-2019.05 dizinine geçmek yeterlidir ve make komutunu çalıştırın.
Derleme işlemi tamamlandığında, tüm derleme sonuçları output/images dizininde olacaktır:

[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

Gerekli dosyalar:

  • sdcard.img — sd karta yazmak için kullanılan taşıyıcı imajı (dd veya windows altında rufus aracılığıyla).
  • qemu.qcow2 — qemu'da başlamak için gereken taşıyıcı imajı.
  • external.qcow2 — veritabanı için dış taşıyıcı imajı.
  • monitor-0.9-beta.tar.gz — web arayüzü aracılığıyla güncelleme için arşiv.

Kılavuzların oluşturulması.

Aynı talimatı birkaç kez yazmak doğru değil. En mantıklısı bir kez markdown formatında yazmak, ardından indirme için PDF ve web arayüzü için html'e dönüştürmektir. Bu, pandoc paketi sayesinde mümkündür.

Bununla yanaşı, bütün bu faylları sistemin imici toplanmadan əvvəl generasiya etməlisiniz, post-build skriptləri artıq faydasızdır. Buna görə də, generasiya manuals paket şəklində həyata keçirilib. Overlay/package/manuals-da baxa bilərsiniz.

Bütün işi görən manuals.mk faylı

################################################################################
#
# 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 dünyası sürətlə systemd-ə keçir, mən də bunu etmək məcburiyyətində qaldım.
Xoş yeniliklərdən biri - таймерlərin olmasıdır. Ümumiyyətlə, onlarla (və yalnız onlarla deyil) ayrıca bir məqalə yazılır, amma qısaca söhbət açım.

Bəzi əməliyyatlar dövri olaraq icra edilməlidir. Mənim üçün lighttpd və php-fpm jurnalının təmizlənməsi üçün logrotate-u işə salmaq lazım idi. Ən tanış olanı cron-da əmrləri yazmaq olardı, amma sistemd-in monoton таймерindən istifadə etməyə qərar verdim. Beləliklə, logrotate sərt vaxt intervalı ilə işə salınır.

Təyin olunmuş tarixlərdə işə düşən таймерlərin yaradılması imkanı əlbəttə var, amma mənə bu lazım olmadı.
Taymer nümunəsi:

  • Таймер faylı
    
    [Unit]
    Description=RODOS temp daemon таймер

[Timer]
OnBootSec=1dax
OnUnitActiveSec=1dax

[Install]
WantedBy=timers.target

- Таймер tərəfindən çağırılan xidmətin faylı:
```bash
[Unit]
Description=RODOS temp daemon

[Service]
ExecStart=\/usr\/bin\/rodos.sh

Dəstəklenen platalar

Asus tinker board — hamısının işləməsi üçün əsas platadır. Ucuz və olduqca güclü olduğu üçün seçilib.

Beaglebone black — işin sınandığı ilk platadır (daha güclü platanın seçilməsi dövründə).

Qemu x86_64 — inkişaf və debuq üçün istifadə olunur.

Necə işləyir

Başlanğıcda iki mərhələli parametrlərin bərpası baş verir:

  • settings_restore (xidmət vasitəsilə) skriptinin işə salınması. Bu, sistemin əsas parametrlərini bərpa edir — saat zonası, lokal, şəbəkə parametrləri və s.
  • prepare (xidmət vasitəsilə) skriptinin işə salınması — burada zabbix hazırlanır, verilənlər bazası yaradılır, IP konsolda görünür.

İlk işə salma zamanı sd-kartın ikinci bölməsinin ölçüsü müəyyən edilir. Hələ qeyd olunmamış yer varsa, daşıyıcı yenidən bölmələrə ayrılır, verilənlər üçün bölmə bütün boş yeri tutacaq şəkildə tənzimlənir. Bu, quraşdırma görüntüsünün ölçüsünü azaltmaq məqsədilə edilir (sdcard.img). Bundan əlavə, bu anda postgresql üçün işçi kataloq yaradılır. Məhz buna görə də yeni daşıyıcı ilə ilk işə salma sonrakılardan daha uzun olacaq.

Xarici disk qoşulanda, başlanğıcda boş diski axtarır və onu ext4 formatında external etiketlə formatlayır.

Diqqət! Xarici disk qoşulanda (həmçinin onun çıxarılmasında və ya dəyişdirilməsində) ehtiyat nüsxə çıxarmaq və parametrləri bərpa etmək lazımdır!

İstilik monitorinqi üçün RODOS 5 cihazı istifadə olunur. İstehsalçı, cihazla işləmək üçün öz proqram təminatının mənbələrini təqdim edir. Sistem işə düşəndə таймер rodos işə düşür, hansı ki bu proqramı hər dəqiqə işə salır. Cari temperatura /tmp/rodos_current_temp faylında qeydə alınır, bundan sonra zabbix bu faylı sensor olaraq izləyə bilər.

Konfiqurasiyanı saxlamaq üçün daşıyıcı /data kataloquna montaj edilir.

Sistemi işə salarkən və onun işə hazırlanması zamanı konsolda mesaj görünür:

Sistem başlayır, zəhmət olmasa gözləyin

Hazırlıq işləri bitdikdən sonra, IP ünvanının çıxışı ilə əvəz olunacaq:

hazır ip 192.168.1.32
İşə hazır

Zabbix-in temperatur monitorinqi üçün tənzimlənməsi

Temperaturu monitorinqi üçün yalnız 2 addım atmaq kifayətdir:

  • RODOS cihazını usb-portuna qoşmaq
  • Zabbix-də data item yaratmaq

Zabbix-in veb-interfeysini açırıq:

  • Konfiqurasiya → Hosts bölməsini açırıq
  • Zabbix serverimizin sətirində Items düyməsinə basırıq
  • Create item düyməsinə basırıq

Buildroot: zabbix-server ilə çox platformalı firmware yaratma

Aşağıdakı məlumatları daxil edin:

  • name — öz istəyinizə görə (məsələn, serverRoomTemp)
  • Type — zabbix agent
  • Key — rodos
  • Tip — ədədi
  • Vahid — C
  • Tarix saxlama müddəti — tarixçənin saxlanma müddəti. 10 gün qaldı
  • Dinamik dəyişikliklərin saxlama müddəti — 30 gün saxladım
  • Yeni tətbiq — server Room Temp

Və ADD düyməsinə basırıq.
Buildroot: zabbix-server ilə çox platformalı firmware yaratma

Veb-interfeys vasitəsilə tənzimləmələr

Veb-interfeys php ilə yazılmışdır. Əsas funksiyalar var:

  • Cihazın vəziyyətinin görünməsi
  • Şəbəkə tənzimləmələrinin dəyişdirilməsi
    Buildroot: zabbix-server ilə çox platformalı firmware yaratma
  • İstifadəçi parolunun dəyişdirilməsi
  • Saat zonasının seçilməsi
  • Ehtiyat nüsxə/yeni bərpa/qaytarma
  • Xarici diskin qoşulması imkanı
  • Sistemin yenilənməsi
    Buildroot: zabbix-server ilə çox platformalı firmware yaratma

Veb-interfeysə girişi parol qoruyur. Başlanğıc səhifəsi — rəhbərlik.

Zabbix-in interfeys ünvanı: ${ip/dns}/zabbix
İdarəetmə interfeysinin ünvanı: ${ip/dns}/manage
Buildroot: zabbix-server ilə çox platformalı firmware yaratma

QEMU-da işə salınması

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

Bu komanda sistemi 4 nüvəli, 2048 RAM ilə, KVM aktivləşdirilmiş, bridge0 körpüsündə şəbəkə kartı ilə və postgresql üçün iki disklə işə salacaq: biri sistem üçün, digəri xarici üçün.

İmajlardan Virtualbox-da istifadə edə bilərik:

qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi
qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdi

Bundan sonra onları virtualbox-a idxal edib SATA ilə qoşmaq.

Nəticə

Mənim üçün maraqlı oldu ki, işləməyə hazır bir məhsul hazırlayım — çox gözəl interfeys olmadan (onları yazmağı sevmirəm), amma işləyir və tənzimləmələri sadədir.

Sonuncu dəfə zabbix-appliance-i KVM-də quraşdırmağa cəhd edərkən bu addımın düzgünlüyünü təsdiqlədi (quraşdırma tamamlandıqdan sonra sistem işə düşmür). Ola bilsin ki, mən nəsə düzgün etmirəm 😉

Materiallar

https://buildroot.org/

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster