
Riwayat tugas
Perusahaan kecil, di satu sisi, membutuhkan pemantauan infrastruktur mereka yang berkualitas tinggi (terutama mengingat adanya virtualisasi yang meluas), di sisi lain, secara finansial sulit bagi mereka untuk membeli peralatan baru. Juga, sering ada masalah dengan server / perangkat keras: sering ada 1-3 menara server di sebelah workstation pengguna atau di ceruk / lemari kecil.
Lebih mudah menggunakan perakitan siap pakai (distribusi), yang cukup untuk mengunggah ke kartu microSD dan memasukkannya ke komputer papan tunggal yang umum (beaglebone, raspberry pi dan oranye pi, keluarga papan asus tinker). Selain itu, peralatan seperti itu tidak mahal dan dapat dipasang di mana saja.
Pernyataan masalah
Dalam banyak hal, proyek dikembangkan sebagai semacam pekerjaan laboratorium dengan kemungkinan penerapan hasilnya.
Zabbix dipilih sebagai sistem pemantauan, karena merupakan sistem yang kuat, gratis dan terdokumentasi dengan baik.
Pertanyaan muncul dengan tajam pada platform perangkat keras.Menempatkan mesin terpisah di bawah pengawasan juga bukan solusi yang baik - baik itu mahal untuk membeli peralatan baru, atau mencari yang lama + di perusahaan kecil sering terjadi masalah dengan server / perangkat keras.
Menggunakan sistem buildroot build memungkinkan Anda untuk membuat solusi khusus yang dapat dioperasikan oleh staf dengan pengetahuan minimal tentang keluarga OS Linux. Sistem ini ramah untuk pemula, tetapi pada saat yang sama memberikan banyak peluang untuk penyesuaian di tangan pengembang berpengalaman. Ini sempurna untuk menyelesaikan tugas yang tidak mahal, tetapi pemantauan penuh fitur infrastruktur TI, yang minimal menuntut dalam pelatihan personil pengoperasiannya.
Langkah solusi
Pada awalnya diputuskan untuk membuat firmware agar x86_64 berjalan di qemu, karena ini adalah solusi yang nyaman dan cepat untuk debugging. Kemudian port ke lengan komputer papan tunggal (saya suka papan tinker asus).
Buildroot dipilih sebagai sistem build. Awalnya, ini tidak memiliki paket zabbix, jadi saya harus mem-port-nya. Ada masalah dengan lokal Rusia yang diselesaikan dengan menerapkan tambalan yang sesuai (catatan: dalam versi yang lebih baru dari buildroot tambalan ini tidak lagi diperlukan).
Porting paket zabbix itu sendiri akan dijelaskan dalam artikel terpisah.
Karena semuanya harus berfungsi sebagai firmware (gambar sistem tidak berubah + file konfigurasi / database yang dapat dipulihkan), Anda perlu menuliskan target, layanan, dan penghitung waktu systemd Anda (target, layanan, timer).
Diputuskan untuk membagi media menjadi 2 bagian - bagian dengan file sistem dan bagian dengan konfigurasi yang bisa berubah dan file basis data zabbix.
Ternyata menjadi sedikit lebih sulit untuk menyelesaikan masalah yang terkait dengan database. Saya tidak ingin menempatkannya langsung di media. Pada saat yang sama, ukuran pangkalan dapat mencapai ukuran melebihi ukuran ramdisk yang mungkin. Oleh karena itu, solusi kompromi dipilih: basis data terletak di bagian kedua kartu sd (kartu SLC modern memiliki hingga 30.000 siklus tulis), tetapi ada pengaturan yang memungkinkan Anda untuk menggunakan media eksternal (misalnya, usb-hdd).
Pemantauan suhu diimplementasikan melalui perangkat RODOS-5. Tentu saja, Anda dapat menggunakan dallas 1820 secara langsung, tetapi lebih cepat dan lebih mudah untuk memasang USB.
Grub2 dipilih sebagai bootloader untuk x86_64. Butuh saya untuk menulis konfigurasi minimal untuk dijalankan.
Setelah debugging pada qemu, porting ke papan asus tinker dilakukan. Dalam struktur overlay saya, cross-platforming awalnya diletakkan - pemilihan konfigurasi khusus untuk masing-masing papan (defconfig board, bootloader, generasi gambar dengan partisi sistem) dan keseragaman maksimum dalam penyetelan sistem file / membuat gambar dengan data. Karena persiapan seperti itu, porting cepat.
Sangat disarankan agar Anda membaca artikel pendahuluan:
https://habr.com/en/post/448638/
https://habr.com/en/post/449348/
Cara merakit
Proyek disimpan di github
Setelah kloning repositori, struktur file berikut diperoleh:
[alexey@comp monitor]$ ls -1 buildroot-2019.05.tar.gz overlay README.md run_me.sh
buildroot-2019.05.tar.gz - arsip buildroot bersih
overlay adalah direktori saya dengan external-tree. Ini berisi semua yang Anda butuhkan untuk membangun firmware menggunakan buildroot
README.md - deskripsi proyek dan panduan dalam bahasa Inggris.
run_me.sh adalah skrip yang menyiapkan sistem build. Memperluas buildroot dari arsip, menempelkan overlay padanya (melalui mekanisme eksternal-pohon) dan memungkinkan Anda untuk memilih papan target untuk perakitan
[0] my_asus_tinker_defconfig [1] my_beaglebone_defconfig [2] x86_64_defconfig Select defconfig, press A for abort. Default [0]
Setelah itu, buka saja direktori buildroot-2019.05 dan jalankan perintah make.
Setelah perakitan selesai, semua hasil perakitan akan berada di direktori output / gambar:
[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
File yang dibutuhkan:
- sdcard.img - gambar media untuk menulis ke kartu sd (via dd atau rufus di bawah wibdows).
- qemu.qcow2 - gambar media untuk dijalankan di qemu.
- external.qcow2 - citra media eksternal untuk basis data
- monitor-0.9-beta.tar.gz - arsip untuk memperbarui melalui antarmuka web
Pembuatan Manual
Tidak perlu menulis instruksi yang sama beberapa kali. Dan paling logis untuk menulis sekali dalam penurunan harga, dan kemudian mengonversikannya ke PDF untuk diunduh dan html untuk antarmuka web. Ini dimungkinkan berkat paket pandoc.
Pada saat yang sama, Anda perlu membuat semua file ini sebelum gambar sistem dirakit, skrip post-build itu sudah tidak berguna. Oleh karena itu, generasi dibuat dalam bentuk paket manual. Anda dapat melihatnya di overlay / paket / manual.
File manuals.mk (yang melakukan semua pekerjaan)
systemd
Dunia Linux secara aktif pindah ke systemd, dan saya harus melakukannya juga.
Dari inovasi yang bagus - kehadiran pengatur waktu. Secara umum, artikel terpisah ditulis tentang mereka (dan tidak hanya tentang mereka), tetapi saya akan memberi tahu Anda secara singkat.
Ada tindakan yang harus dilakukan secara berkala. Saya perlu menjalankan logrotate untuk menghapus log lighttpd dan php-fpm. Akan paling umum untuk menulis perintah di cron, tapi saya memutuskan untuk menggunakan timer systemd yang monoton. Jadi, logrotate dimulai pada interval waktu yang ketat.
Tentu saja, ada kemungkinan membuat timer yang bekerja pada tanggal tertentu, tetapi saya tidak membutuhkannya.
Timer contoh:
[Timer]
OnBootSec = 1 menit
OnUnitActiveSec = 1 menit
[Instal]
WantedBy = timers.target
- , : ```bash [Unit] Description=RODOS temp daemon [Service] ExecStart=/usr/bin/rodos.sh
Dewan yang didukung
Papan tinker Asus - papan utama di mana semuanya harus bekerja. Dipilih sebagai yang murah dan sangat kuat.
Beaglebone black adalah papan pertama di mana pekerjaan itu diuji (selama pemilihan papan yang lebih kuat).
Qemu x86_64 - digunakan untuk mengembangkan debugging.
Bagaimana cara kerjanya
Saat startup, pemulihan pengaturan dua tahap terjadi:
- menjalankan skrip settings_restore (melalui layanan). Ini mengembalikan pengaturan sistem dasar - zona waktu, lokal, pengaturan jaringan, dll.
- menjalankan skrip persiapan (melalui layanan) - di sini zabbix disiapkan, basis data, IP ditampilkan di konsol.
Pada awal pertama, ukuran bagian kedua kartu sd ditentukan. Jika masih ada ruang yang tidak terisi - media dipartisi ulang, bagian data menempati semua ruang kosong. Ini dilakukan untuk mengurangi ukuran gambar instalasi (sdcard.img). Selain itu, direktori kerja postgresql dibuat pada titik ini. Itulah sebabnya peluncuran pertama dengan media baru akan lebih lama dari yang berikutnya.
Ketika Anda menghubungkan drive eksternal, pada saat mulai mencari drive gratis dan format dalam ext4 dengan label eksternal.
Perhatian! Saat menghubungkan drive eksternal (serta melepaskan atau menggantinya), Anda perlu membuat cadangan dan mengembalikan pengaturan!
Untuk memantau suhu, perangkat RODOS 5. digunakan. Pabrikan memberikan sumber utilitasnya untuk bekerja dengan perangkat. Ketika sistem dihidupkan, timer rodos dimulai, yang meluncurkan utilitas ini satu menit sekali. Suhu saat ini ditulis ke file / tmp / rodos_current_temp, setelah itu zabbix dapat memonitor file ini sebagai sensor.
Media penyimpanan untuk konfigurasi sudah terpasang di direktori / data.
Saat Anda memulai sistem dan mempersiapkannya untuk bekerja, sebuah pesan muncul di konsol:
System starting, please wait
Setelah menyelesaikan pekerjaan persiapan, itu akan berubah untuk menampilkan alamat IP:
current ip 192.168.1.32 Ready to work
Mengkonfigurasi zabbix untuk pemantauan suhu
Untuk memantau suhu, cukup lakukan 2 langkah:
- sambungkan perangkat RODOS ke port usb
- buat item data dalam zabbix
Buka antarmuka web zabbix:
- Buka bagian Konfigurasi → Host
- Klik pada Item di baris server zabbix kami
- Klik pada Buat item

Masukkan data berikut:
- name - sesuai kebijaksanaan Anda (misalnya, serverRoomTemp)
- Jenis - agen zabbix
- Kunci - rodo
- Ketik - numerik
- Unit - C
- Periode penyimpanan histori - istilah histori. tersisa 10 hari
- Tren periode penyimpanan - periode penyimpanan dinamika perubahan. Tersisa 30 hari
- Aplikasi baru - server Temp Room
Dan tekan tombol ADD.

Manajemen Berbasis Web
Antarmuka web ditulis dalam php. Ada fungsi utama:
- lihat status perangkat
- ubah pengaturan jaringan

- ubah kata sandi pengguna
- pemilihan zona waktu
- backup / restore / reset ke pengaturan pabrik
- kemampuan untuk menghubungkan drive eksternal
- Pembaruan sistem

Login ke antarmuka web dilindungi kata sandi. Halaman awal - manual.
Alamat antarmuka Zabbix: \ $ {ip / dns} / zabbix
Alamat Antarmuka Manajemen: \ $ {ip / dns} / manage

Jalankan di qemu
qemu-system-x86_64 -smp 4 -m 4026M -enable-kvm -machine q35, accel = kvm-service 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 = utas-alat virtio-scsi-pci, id = scsi0 -drive file = output / images / external.qcow2, format = qcow2, aio = utas
Perintah ini akan memulai sistem dengan 4 core, 2048 RAM diaktifkan oleh KVM, kartu jaringan pada bridge0 dan dua disk: untuk sistem dan eksternal untuk postgresql.
Gambar dapat dikonversi dan dijalankan di Virtualbox:
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdi
Kemudian impor mereka ke virtualbox dan sambungkan melalui sata.
Kesimpulan
Dalam prosesnya, saya menjadi tertarik untuk membuat produk siap bekerja - dengan antarmuka yang tidak terlalu bagus (saya tidak suka menulisnya), tetapi berfungsi dan mudah dikonfigurasikan.
Upaya terakhir untuk menginstal zabbix-appliance di KVM menunjukkan kebenaran langkah ini (sistem tidak memulai setelah instalasi selesai). Mungkin saya melakukan sesuatu yang salah;)
Material
https://buildroot.org/