Buildroot: Zabbix sunucusuyla platformlar arası ürün yazılımı oluşturma

Buildroot: Zabbix sunucusuyla platformlar arası ürün yazılımı oluşturma

Sorun geçmişi

Küçük ölçekli şirketler bir yandan altyapılarının yüksek kalitede izlenmesine ihtiyaç duyuyor (özellikle yaygın sanallaştırma ışığında), diğer yandan yeni ekipman satın almaları mali açıdan zor. Sunucu/donanım sorunları da yaygındır: genellikle kullanıcı iş istasyonlarının yanında veya küçük bir niş/dolapta 1-3 tower sunucu bulunur.

Sadece bir microSD karta yüklemeniz ve ortak bir tek kartlı bilgisayara (beaglebone, raspberry pi ve orange pi aileleri, asus tinker board) yerleştirmeniz gereken hazır bir montajı (dağıtım) kullanmak daha kolaydır. Ayrıca bu tür ekipmanlar ucuzdur ve her yere kurulabilir.

Sorunun formüle edilmesi

Proje birçok açıdan sonuçların uygulama olanağı sunan bir tür laboratuvar çalışması olarak geliştirildi.

Zabbix, güçlü, ücretsiz ve iyi belgelenmiş bir sistem olduğu için izleme sistemi olarak seçildi.

Donanım platformuyla ilgili sorun ciddi bir hal aldı. Ayrı bir makineyi izlemeye almak da pek iyi bir çözüm değil - ya yeni ekipman satın almak pahalıdır ya da eski ekipmanı aramak + küçük şirketlerde sunucu/ile ilgili sık sık sorunlar yaşanmaktadır. donanım.

Buildroot derleme sistemini kullanmak, Linux işletim sistemleri hakkında minimum bilgiye sahip personel tarafından çalıştırılabilecek özel çözümler oluşturmanıza olanak tanır. Bu sistem yeni başlayanlar için uygundur ancak aynı zamanda deneyimli bir geliştiricinin elinde geniş özelleştirme fırsatları da sağlar. BT altyapısının ucuz ancak tamamen işlevsel olarak izlenmesi sorununu, onu çalıştıran personelin eğitimi için minimum gereksinimlerle çözmek için mükemmeldir.

Çözüm adımları

Hata ayıklama için kullanışlı ve hızlı bir çözüm olduğundan, başlangıçta x86_64'ün qemu'da çalışması için ürün yazılımı oluşturmaya karar verildi. Daha sonra bunu tek kartlı bir bilgisayara bağlayın (asus Tinker Board'u beğendim).

Yapı sistemi olarak buildroot seçildi. Başlangıçta zabbix paketi yoktu, bu yüzden taşınması gerekiyordu. Rus yerel ayarında sorunlar vardı ve bunlar uygun yamaların uygulanmasıyla çözüldü (not: buildroot'un daha yeni sürümlerinde bu yamalara artık gerek yok).

Zabbix paketinin taşınması ayrı bir makalede anlatılacaktır.

Her şeyin aygıt yazılımı olarak çalışması gerektiğinden (değiştirilemez sistem görüntüsü + kurtarılabilir yapılandırma/veritabanı dosyaları), kendi sistem hedeflerinizi, hizmetlerinizi ve zamanlayıcılarınızı (hedef, hizmet, zamanlayıcı) yazmanız gerekiyordu.

Medyanın 2 bölüme ayrılmasına karar verildi - sistem dosyalarının bulunduğu bir bölüm ve değiştirilebilir yapılandırmaların ve zabbix veritabanı dosyalarının bulunduğu bir bölüm.

Veritabanıyla ilgili sorunları çözmek biraz daha zor çıktı. Doğrudan medyaya koymak istemedim. Aynı zamanda veritabanının boyutu olası bir ramdisk boyutunu aşan bir boyuta ulaşabilmektedir. Bu nedenle, uzlaşmacı bir çözüm seçildi: veritabanı, SD kartın ikinci bölümünde bulunur (modern SLC kartlarda 30'e kadar yazma döngüsü vardır), ancak harici medyanın kullanımına izin veren bir ayar vardır (örneğin, usb- hdd).

Sıcaklık takibi RODOS-5 cihazı üzerinden gerçekleştirildi. Elbette Dallas 1820'yi doğrudan kullanabilirsiniz, ancak USB takmak daha hızlı ve daha kolaydı.

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

Qemu'da hata ayıklandıktan sonra asus tinker board'a taşındı. Kaplamamın yapısının başlangıçta platformlar arası olması amaçlanmıştı; her karta özel yapılandırmalar tahsis etmek (kart yapılandırması, önyükleyici, sistem bölümüyle bir görüntü oluşturmak) ve dosya sistemini özelleştirmede/veri içeren bir görüntü oluşturmada maksimum tekdüzelik. Böyle bir hazırlık nedeniyle taşıma işlemi hızlı bir şekilde gerçekleşti.

Giriş makalelerini okumanız önemle tavsiye edilir:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Nasıl monte edilir

Proje github'da saklanıyor
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 - buildroot arşivini temizleyin
overlay, harici ağaçlı dizinimdir. Buildroot'u kullanarak ürün yazılımını oluşturmak için ihtiyacınız olan her şeyin depolandığı yer burasıdır.
README.md - İngilizce proje açıklaması ve kılavuzu.
run_me.sh derleme sistemini hazırlayan bir betiktir. Arşivden buildroot'u genişletir, ona bir katman ekler (harici ağaç mekanizması aracılığıyla) ve montaj için hedef panoyu seçmenize olanak tanır

[0] my_asus_tinker_defconfig
[1] my_beaglebone_defconfig
[2] x86_64_defconfig
Select defconfig, press A for abort. Default [0]

Bundan sonra buildroot-2019.05 dizinine gidin ve make komutunu çalıştırın.
Derleme tamamlandığında, tüm derleme sonuçları çıktı/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 kayıt yapmak için medya görüntüsü (wibdows altında dd veya rufus aracılığıyla).
  • qemu.qcow2 - qemu'da çalıştırılacak medya görüntüsü.
  • external.qcow2 - veritabanı için harici medya görüntüsü
  • monitör-0.9-beta.tar.gz - web arayüzü üzerinden güncelleme için arşiv

Rehberler Nesli

Aynı talimatları birkaç kez yazmaya değmez. Ve en mantıklısı, bunu bir kez işaretlemeye yazmak ve ardından indirmek için PDF'ye ve web arayüzü için html'ye dönüştürmektir. Pandoc paketi sayesinde bu mümkündür.

Aynı zamanda, tüm bu dosyaların sistem görüntüsü oluşturulmadan önce oluşturulması gerekir; bu derleme sonrası komut dosyaları zaten işe yaramaz. Bu nedenle üretim bir kılavuz paketi şeklinde yapılır. Kaplama/paket/kılavuzlara bakabilirsiniz.

Manuals.mk dosyası (tüm işi yapar)

################################################################################
#
# 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ı aktif olarak systemd'ye geçiyor ve ben de bunu yapmak zorundaydım.
Hoş yeniliklerden biri zamanlayıcıların varlığıdır. Genel olarak onlar hakkında ayrı bir makale yazılıyor (ve sadece onlar hakkında değil), ama size kısaca anlatacağım.

Periyodik olarak yapılması gereken işlemler vardır. Lighttpd ve php-fpm günlüklerini temizlemek için logrotate'i çalıştırmam gerekiyordu. Normalde komutları cron cinsinden yazmak olurdu ama ben systemd monotonik zamanlayıcısını kullanmaya karar verdim. Yani logrotate katı bir zaman aralığında çalışır.

Elbette belirli tarihlerde çalışan zamanlayıcılar oluşturmak mümkün ama buna ihtiyacım yoktu.
Zamanlayıcı örneği:

  • Zamanlayıcı Dosyası
    
    [Unit]
    Description=RODOS temp daemon timer

[Zamanlayıcı] OnBootSec=1 dk
OnUnitActiveSec=1 dk

[Yükle] WantedBy=timers.target

- Файл сервиса, вызываемого таймером:
```bash
[Unit]
Description=RODOS temp daemon

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

Desteklenen panolar

Asus Tinker Board her şeyin üzerinde çalışması gereken ana karttır. Ucuz ve çok güçlü olarak seçilmiştir.

Beaglebone siyahı, çalışmasının test edildiği ilk karttır (daha güçlü bir kartın seçimi sırasında).

Qemu x86_64 - geliştirmede hata ayıklamak için kullanılır.

Nasıl çalışıyor

Başlangıçta, ayarların iki aşamalı geri yüklemesi gerçekleşir:

  • settings_restore betiğini çalıştırarak (hizmet aracılığıyla). Temel sistem ayarlarını (saat dilimi, yerel ayar, ağ ayarları vb.) geri yükler.
  • hazırlama komut dosyasının çalıştırılması (hizmet aracılığıyla) - burada zabbix ve veritabanı hazırlanır, IP konsola gönderilir.

İlk başlattığınızda SD kartın ikinci bölümünün boyutu belirlenir. Hala ayrılmamış alan varsa, medya yeniden bölümlendirilir ve veri bölümü tüm boş alanı kaplar. Bu, kurulum görüntüsünün (sdcard.img) boyutunu azaltmak için yapılır. Ayrıca postgresql çalışma dizini de bu noktada oluşturulur. Bu nedenle yeni bir taşıyıcıyla ilk lansman, sonrakilerden daha uzun sürecektir.

Harici bir sürücüyü bağlarken, başlatma sırasında boş bir sürücüyü arar ve onu harici etiketle ext4 olarak biçimlendirir.

Dikkat! Harici bir sürücüyü bağlarken (ayrıca bağlantısını keserken veya değiştirirken), bir yedekleme yapmanız ve ayarları geri yüklemeniz gerekir!

RODOS 5 cihazı sıcaklık izleme için kullanılır. Üretici, cihazla çalışmak için yardımcı programın kaynak kodunu sağlar. Sistemi açtığınızda, bu yardımcı programı dakikada bir kez çalıştıran rodos zamanlayıcısı başlar. Mevcut sıcaklık /tmp/rodos_current_temp dosyasına yazılır, ardından zabbix bu dosyayı bir sensör olarak izleyebilir.

Yapılandırma depolama ortamı /data dizinine eklenir.

Sistemi başlatırken ve çalışmaya hazırlarken konsolda aşağıdaki mesaj belirir:

System starting, please wait

Hazırlık çalışmasını tamamladıktan sonra IP adresini gösterecek şekilde değişecektir:

current ip 192.168.1.32
Ready to work

Sıcaklık izleme için zabbix'i ayarlama

Sıcaklığı izlemek için 2 adımı uygulamanız yeterlidir:

  • RODOS cihazını USB bağlantı noktasına bağlayın
  • zabbix'te veri öğesi oluştur

Zabbix web arayüzünü açın:

  • Yapılandırma → Ana Bilgisayarlar bölümünü açın
  • Zabbix sunucumuzun satırındaki Öğelere tıklayın
  • Öğe oluştur'a tıklayın

Buildroot: Zabbix sunucusuyla platformlar arası ürün yazılımı oluşturma

Aşağıdaki verileri girin:

  • isim - sizin takdirinize bağlı olarak (örneğin, serverRoomTemp )
  • Tür - zabbix aracısı
  • Anahtar - Rodos
  • Tip-sayısal
  • Birimler - C
  • Geçmiş saklama süresi — geçmiş saklama süresi. 10 gün kaldı
  • Trend depolama süresi—değişiklik dinamikleri için depolama süresi. 30 gün kaldı
  • Yeni uygulama - sunucu Oda Sıcaklığı

Ve EKLE butonuna basın.
Buildroot: Zabbix sunucusuyla platformlar arası ürün yazılımı oluşturma

Ayarları web arayüzü üzerinden yönetin

Web arayüzü PHP ile yazılmıştır. Ana işlevler vardır:

  • cihaz durumunu görüntüle
  • ağ ayarlarını değiştirme
    Buildroot: Zabbix sunucusuyla platformlar arası ürün yazılımı oluşturma
  • kullanıcı şifresini değiştirme
  • saat dilimi seçimi
  • yedekleme/geri yükleme/fabrika ayarlarına sıfırlama
  • harici bir sürücüyü bağlama yeteneği
  • Sistem güncellemesi
    Buildroot: Zabbix sunucusuyla platformlar arası ürün yazılımı oluşturma

Web arayüzüne giriş şifre korumalıdır. Başlangıç ​​sayfası - manuel.

Zabbix arayüz adresi: ${ip/dns}/zabbix
Yönetim arayüzü adresi: ${ip/dns}/manage
Buildroot: Zabbix sunucusuyla platformlar arası ürün yazılımı oluşturma

Qemu'da koşmak

qemu-system-x86_64 -smp 4 -m 4026M -enable-kvm -machine q35,accel=kvm -device intel-iommu -cpu ana bilgisayar -net nic -net köprüsü,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 komut, 4 çekirdekli, 2048 RAM'li, KVM etkin, köprü0 üzerinde bir ağ kartı ve iki diski olan bir sistemi başlatacaktır: biri sistem için, diğeri postgresql için harici.

Görüntüler Virtualbox'ta dönüştürülebilir ve çalıştırılabilir:

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

Daha sonra bunları sanal kutuya aktarın ve sata aracılığıyla bağlanın.

Sonuç

Bu süreçte, çok güzel olmayan bir arayüze sahip (bunları yazmayı sevmiyorum), ancak çalışan ve yapılandırması kolay, kullanıma hazır bir ürün yapmakla ilgilenmeye başladım.

Zabbix cihazını KVM'ye kurmaya yönelik son deneme, bu adımın doğru olduğunu gösterdi (kurulum tamamlandıktan sonra sistem başlamıyor). Belki de yanlış bir şey yapıyorum 😉

malzemeler

https://buildroot.org/

Kaynak: habr.com

Yorum ekle