Buildroot: Mencipta perisian tegar merentas platform dengan pelayan zabbix

Buildroot: Mencipta perisian tegar merentas platform dengan pelayan zabbix

Sejarah masalah

Syarikat bersaiz kecil, di satu pihak, memerlukan pemantauan berkualiti tinggi ke atas infrastruktur mereka (terutamanya berdasarkan virtualisasi yang meluas), sebaliknya, sukar dari segi kewangan untuk mereka membeli peralatan baharu. Masalah pelayan/perkakasan juga biasa: selalunya terdapat 1-3 pelayan menara bersebelahan stesen kerja pengguna atau dalam ceruk/almari kecil.

Lebih mudah untuk menggunakan pemasangan siap sedia (pengedaran), yang anda hanya perlu muat naik ke kad microSD dan masukkan ke dalam komputer papan tunggal biasa (keluarga beaglebone, raspberry pi dan pi oren, papan tinker asus). Di samping itu, peralatan sedemikian adalah murah dan boleh dipasang di mana-mana sahaja.

Pernyataan masalah

Dalam banyak cara, projek itu dibangunkan sebagai sejenis kerja makmal dengan kemungkinan menerapkan hasilnya.

Zabbix dipilih sebagai sistem pemantauan kerana ia adalah sistem yang berkuasa, percuma dan didokumentasikan dengan baik.

Isu dengan platform perkakasan telah menjadi akut. Meletakkan mesin berasingan di bawah pemantauan juga bukan penyelesaian yang sangat baik - sama ada mahal untuk membeli peralatan baharu atau mencari peralatan lama + di syarikat kecil terdapat masalah kerap dengan pelayan/ perkakasan.

Menggunakan sistem binaan buildroot membolehkan anda mencipta penyelesaian khusus yang boleh dikendalikan oleh kakitangan yang mempunyai pengetahuan minimum tentang sistem pengendalian Linux. Sistem ini mesra kepada pemula, tetapi pada masa yang sama menyediakan peluang penyesuaian yang mencukupi di tangan pembangun yang berpengalaman. Ia sesuai untuk menyelesaikan masalah pemantauan infrastruktur IT yang murah tetapi berfungsi sepenuhnya, dengan keperluan minimum untuk latihan kakitangan yang mengendalikannya.

Langkah penyelesaian

Telah diputuskan untuk mula mencipta perisian tegar untuk x86_64 untuk dijalankan dalam qemu, kerana ini adalah penyelesaian yang mudah dan pantas untuk penyahpepijatan. Kemudian masukkannya ke komputer papan tunggal lengan (saya suka papan tinker asus).

buildroot telah dipilih sebagai sistem binaan. Pada mulanya, ia tidak mempunyai pakej zabbix, jadi ia terpaksa dialihkan. Terdapat masalah dengan lokasi Rusia, yang diselesaikan dengan menggunakan tampalan yang sesuai (nota: dalam versi buildroot yang lebih baharu, tampalan ini tidak diperlukan lagi).

Memindahkan pakej zabbix itu sendiri akan diterangkan dalam artikel berasingan.

Memandangkan segala-galanya harus berfungsi sebagai perisian tegar (imej sistem yang tidak boleh ditukar + fail konfigurasi/pangkalan data yang boleh dipulihkan), adalah perlu untuk menulis sasaran, perkhidmatan dan pemasa sistem anda sendiri (sasaran, perkhidmatan, pemasa).

Telah diputuskan untuk membahagikan media kepada 2 bahagian - satu bahagian dengan fail sistem dan satu bahagian dengan konfigurasi boleh ubah dan fail pangkalan data zabbix.

Menyelesaikan masalah yang berkaitan dengan pangkalan data ternyata menjadi lebih sukar. Saya tidak mahu meletakkannya terus di media. Pada masa yang sama, saiz pangkalan data boleh mencapai saiz yang melebihi saiz ramdisk yang mungkin. Oleh itu, penyelesaian kompromi telah dipilih: pangkalan data terletak pada partition kedua kad SD (kad SLC moden mempunyai sehingga 30 kitaran tulis), tetapi terdapat tetapan yang membenarkan penggunaan media luaran (contohnya, usb- hdd).

Pemantauan suhu telah dilaksanakan melalui peranti RODOS-5. Sudah tentu, anda boleh menggunakan Dallas 1820 secara terus, tetapi lebih cepat dan lebih mudah untuk memasangkan USB.

grub86 telah dipilih sebagai pemuat but untuk x64_2. Ia perlu menulis konfigurasi minimum untuk melancarkannya.

Selepas nyahpepijat pada qemu, ia dialihkan ke papan tinker asus. Struktur tindanan saya pada mulanya bertujuan untuk merentas platform - memperuntukkan konfigurasi khusus untuk setiap papan (defconfig papan, pemuat but, menjana imej dengan partition sistem) dan keseragaman maksimum dalam menyesuaikan sistem fail/membuat imej dengan data. Oleh kerana penyediaan sedemikian, pemindahan berjalan dengan cepat.

Adalah sangat disyorkan untuk membaca artikel pengenalan:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Bagaimana untuk berhimpun

Projek ini disimpan di github
Selepas mengkloning repositori, struktur fail berikut diperoleh:

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

buildroot-2019.05.tar.gz - bersihkan arkib buildroot
overlay ialah direktori saya dengan external-tree. Di sinilah semua yang anda perlukan untuk membina perisian tegar menggunakan buildroot disimpan.
README.md - penerangan projek dan manual dalam bahasa Inggeris.
run_me.sh ialah skrip yang menyediakan sistem binaan. Mengembangkan buildroot dari arkib, melampirkan tindanan padanya (melalui mekanisme pokok luaran) dan membolehkan anda memilih papan sasaran untuk pemasangan

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

Selepas ini, hanya pergi ke direktori buildroot-2019.05 dan jalankan arahan make.
Setelah binaan selesai, semua hasil binaan akan berada dalam direktori output/imej:

[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

Fail yang diperlukan:

  • sdcard.img - imej media untuk merakam pada kad SD (melalui dd atau rufus di bawah wibdows).
  • qemu.qcow2 - imej media untuk dijalankan dalam qemu.
  • external.qcow2 - imej media luaran untuk pangkalan data
  • monitor-0.9-beta.tar.gz - arkibkan untuk mengemas kini melalui antara muka web

Generasi Pembimbing

Ia tidak bernilai menulis arahan yang sama beberapa kali. Dan perkara yang paling logik ialah menulisnya sekali dalam penurunan harga, dan kemudian menukarnya kepada PDF untuk dimuat turun dan html untuk antara muka web. Ini boleh dilakukan terima kasih kepada pakej pandoc.

Pada masa yang sama, semua fail ini perlu dijana sebelum imej sistem dipasang; skrip pasca binaan itu sudah tidak berguna. Oleh itu, penjanaan dilakukan dalam bentuk pakej manual. Anda boleh melihat tindanan/pakej/manual.

Fail manuals.mk (yang melakukan semua kerja)

################################################################################
#
# 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))

sistem

Dunia Linux sedang aktif bergerak ke systemd, dan saya terpaksa melakukannya juga.
Salah satu inovasi yang menyenangkan ialah kehadiran pemasa. Secara umum, artikel berasingan sedang ditulis tentang mereka (dan bukan sahaja tentang mereka), tetapi saya akan memberitahu anda secara ringkas.

Terdapat tindakan yang mesti dilakukan secara berkala. Saya perlu menjalankan logrotate untuk mengosongkan log lighttpd dan php-fpm. Perkara biasa ialah menulis arahan dalam cron, tetapi saya memutuskan untuk menggunakan pemasa monotonik systemd. Jadi logrotate berjalan pada selang masa yang ketat.

Sudah tentu, adalah mungkin untuk mencipta pemasa yang menyala pada tarikh tertentu, tetapi saya tidak memerlukan ini.
Contoh pemasa:

  • Fail pemasa
    
    [Unit]
    Description=RODOS temp daemon timer

[Pemasa] OnBootSec=1min
OnUnitActiveSec=1min

[Pasang] WantedBy=timers.target

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

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

Papan yang disokong

Papan tinker Asus ialah papan utama di mana segala-galanya harus berfungsi. Dipilih sebagai murah dan sangat berkuasa.

Beaglebone black ialah papan pertama yang operasinya diuji (semasa pemilihan papan yang lebih berkuasa).

Qemu x86_64 - digunakan untuk pembangunan nyahpepijat.

Bagaimana ia berfungsi

Pada permulaan, pemulihan tetapan dua peringkat berlaku:

  • menjalankan skrip settings_restore (melalui perkhidmatan). Ia memulihkan tetapan sistem asas - zon waktu, tempat, tetapan rangkaian, dll.
  • menjalankan skrip penyediaan (melalui perkhidmatan) - di sini zabbix dan pangkalan data disediakan, IP adalah output ke konsol.

Apabila anda mula-mula memulakannya, saiz partition kedua kad SD ditentukan. Jika masih terdapat ruang yang tidak diperuntukkan, media akan dibahagikan semula dan bahagian data mengambil semua ruang kosong. Ini dilakukan untuk mengurangkan saiz imej pemasangan (sdcard.img). Selain itu, direktori kerja postgresql dibuat pada ketika ini. Itulah sebabnya pelancaran pertama dengan pembawa baharu akan lebih lama daripada yang berikutnya.

Apabila menyambungkan pemacu luaran, pada saat permulaan ia mencari pemacu percuma dan memformatkannya ke ext4 dengan label luaran.

Perhatian! Apabila menyambungkan pemacu luaran (serta memutuskan sambungan atau menggantikannya), anda perlu membuat sandaran dan memulihkan tetapan!

Peranti RODOS 5 digunakan untuk pemantauan suhu. Pengilang menyediakan kod sumber utilitinya untuk bekerja dengan peranti. Apabila sistem dihidupkan, pemasa rodos bermula, yang menjalankan utiliti ini sekali seminit. Suhu semasa ditulis pada fail /tmp/rodos_current_temp, selepas itu zabbix boleh memantau fail ini sebagai penderia.

Media storan konfigurasi dipasang dalam direktori /data.

Apabila memulakan sistem dan menyediakannya untuk operasi, mesej berikut muncul dalam konsol:

System starting, please wait

Selepas menyelesaikan kerja persediaan, ia akan bertukar kepada memaparkan alamat IP:

current ip 192.168.1.32
Ready to work

Menyediakan zabbix untuk pemantauan suhu

Untuk memantau suhu, hanya ambil 2 langkah:

  • sambungkan peranti RODOS ke port USB
  • buat item data dalam zabbix

Buka antara muka web zabbix:

  • Buka bahagian Konfigurasi → Hos
  • Klik pada Item dalam baris pelayan zabbix kami
  • Klik pada Buat item

Buildroot: Mencipta perisian tegar merentas platform dengan pelayan zabbix

Masukkan data berikut:

  • nama - mengikut budi bicara anda (contohnya, serverRoomTemp )
  • Jenis - ejen zabbix
  • Kunci - Rodos
  • Jenis-nombor
  • Unit - C
  • Tempoh penyimpanan sejarah — tempoh penyimpanan sejarah. tinggal 10 hari
  • Tempoh penyimpanan trend—tempoh penyimpanan untuk dinamik perubahan. Tinggal 30 hari
  • Aplikasi baharu - Suhu Bilik pelayan

Dan tekan butang TAMBAH.
Buildroot: Mencipta perisian tegar merentas platform dengan pelayan zabbix

Urus tetapan melalui antara muka web

Antara muka web ditulis dalam PHP. Terdapat fungsi utama:

  • lihat status peranti
  • menukar tetapan rangkaian
    Buildroot: Mencipta perisian tegar merentas platform dengan pelayan zabbix
  • menukar kata laluan pengguna
  • pemilihan zon waktu
  • sandaran/pulihkan/set semula kilang
  • keupayaan untuk menyambung pemacu luaran
  • Kemas kini sistem
    Buildroot: Mencipta perisian tegar merentas platform dengan pelayan zabbix

Log masuk ke antara muka web dilindungi kata laluan. Halaman mula - manual.

Alamat antara muka Zabbix: ${ip/dns}/zabbix
Alamat antara muka pengurusan: ${ip/dns}/manage
Buildroot: Mencipta perisian tegar merentas platform dengan pelayan zabbix

Berlari dalam 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 -fail pemacu=output/imej/qemu.qcow2,format=qcow2,aio=benang -peranti virtio-scsi-pci,id=scsi0 -fail pemacu=output/imej/luaran.qcow2,format=qcow2,aio=benang

Perintah ini akan memulakan sistem dengan 4 teras, 2048 RAM, KVM didayakan, kad rangkaian pada bridge0 dan dua cakera: satu untuk sistem dan satu luaran untuk postgresql.

Imej boleh ditukar dan dijalankan dalam Virtualbox:

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

Kemudian importnya ke dalam kotak maya dan sambungkan melalui sata.

Kesimpulan

Dalam proses itu, saya mula berminat untuk membuat produk sedia untuk digunakan - dengan antara muka yang tidak begitu cantik (saya tidak suka menulisnya), tetapi yang berfungsi dan mudah dikonfigurasikan.

Percubaan terakhir untuk memasang zabbix-appliance dalam KVM menunjukkan bahawa langkah ini betul (selepas pemasangan selesai, sistem tidak bermula). Mungkin saya melakukan sesuatu yang salah 😉

bahan-bahan

https://buildroot.org/

Sumber: www.habr.com

Tambah komen