Buildroot: Tạo firmware đa nền tảng với zabbix-server

Buildroot: Tạo firmware đa nền tảng với zabbix-server

Lịch sử sự cố

Một mặt, các công ty quy mô nhỏ cần giám sát chất lượng cao cơ sở hạ tầng của họ (đặc biệt là trong bối cảnh ảo hóa rộng rãi), mặt khác, họ gặp khó khăn về mặt tài chính khi mua thiết bị mới. Các vấn đề về máy chủ/phần cứng cũng rất phổ biến: thường có 1-3 máy chủ tháp bên cạnh máy trạm của người dùng hoặc trong một hốc/tủ nhỏ.

Sẽ dễ dàng hơn khi sử dụng một bộ lắp ráp (phân phối) làm sẵn, bạn chỉ cần tải lên thẻ nhớ microSD và lắp vào máy tính bảng đơn thông thường (các họ beaglebone, Raspberry Pi và Orange Pi, Asus Tinker Board). Ngoài ra, thiết bị như vậy không tốn kém và có thể được lắp đặt ở bất cứ đâu.

Báo cáo sự cố

Theo nhiều cách, dự án được phát triển như một loại công việc trong phòng thí nghiệm với khả năng áp dụng các kết quả.

Zabbix được chọn làm hệ thống giám sát vì đây là một hệ thống mạnh mẽ, miễn phí và được ghi chép đầy đủ.

Vấn đề với nền tảng phần cứng đã trở nên nghiêm trọng. Việc giám sát một máy riêng biệt cũng không phải là một giải pháp tốt - hoặc việc mua thiết bị mới hoặc tìm kiếm thiết bị cũ sẽ tốn kém + ở các công ty nhỏ thường xuyên xảy ra sự cố với máy chủ/ phần cứng.

Việc sử dụng hệ thống xây dựng buildroot cho phép bạn tạo các giải pháp chuyên biệt có thể được vận hành bởi nhân viên có kiến ​​thức tối thiểu về hệ điều hành Linux. Hệ thống này thân thiện với người mới bắt đầu, nhưng đồng thời cung cấp nhiều cơ hội tùy chỉnh cho nhà phát triển có kinh nghiệm. Nó hoàn hảo để giải quyết vấn đề giám sát cơ sở hạ tầng CNTT không tốn kém nhưng đầy đủ chức năng, với yêu cầu tối thiểu về đào tạo nhân sự vận hành nó.

Các bước giải pháp

Ban đầu người ta quyết định tạo chương trình cơ sở cho x86_64 để chạy trong qemu, vì đây là giải pháp gỡ lỗi thuận tiện và nhanh chóng. Sau đó chuyển nó sang một máy tính bo mạch đơn cánh tay (tôi thích bo mạch asus tinker).

buildroot đã được chọn làm hệ thống xây dựng. Ban đầu, nó thiếu gói zabbix nên phải chuyển. Có một số vấn đề với ngôn ngữ tiếng Nga, nhưng vấn đề này đã được giải quyết bằng cách áp dụng các bản vá thích hợp (lưu ý: trong các phiên bản buildroot mới hơn, các bản vá này không còn cần thiết nữa).

Việc chuyển gói zabbix sẽ được mô tả trong một bài viết riêng.

Vì mọi thứ sẽ hoạt động như phần sụn (hình ảnh hệ thống không thể thay đổi + các tệp cơ sở dữ liệu/cấu hình có thể phục hồi), nên cần phải ghi các mục tiêu, dịch vụ và bộ hẹn giờ hệ thống của riêng bạn (mục tiêu, dịch vụ, bộ hẹn giờ).

Người ta quyết định chia phương tiện thành 2 phần - một phần chứa các tệp hệ thống và một phần có các cấu hình có thể thay đổi và tệp cơ sở dữ liệu zabbix.

Việc giải quyết các vấn đề liên quan đến cơ sở dữ liệu hóa ra lại khó khăn hơn một chút. Tôi không muốn đặt nó trực tiếp trên các phương tiện truyền thông. Đồng thời, kích thước của cơ sở dữ liệu có thể đạt kích thước vượt quá kích thước của một đĩa RAM có thể. Do đó, một giải pháp thỏa hiệp đã được chọn: cơ sở dữ liệu nằm trên phân vùng thứ hai của thẻ SD (thẻ SLC hiện đại có tới 30 chu kỳ ghi), nhưng có một cài đặt cho phép sử dụng phương tiện bên ngoài (ví dụ: usb- hdd).

Giám sát nhiệt độ được thực hiện thông qua thiết bị RODOS-5. Tất nhiên, bạn có thể sử dụng trực tiếp Dallas 1820, nhưng việc cắm USB sẽ nhanh hơn và dễ dàng hơn.

grub86 đã được chọn làm bộ nạp khởi động cho x64_2. Cần phải viết một cấu hình tối thiểu để khởi chạy nó.

Sau khi gỡ lỗi trên qemu, nó đã được chuyển sang bảng tinker của asus. Cấu trúc lớp phủ của tôi ban đầu được dự định là đa nền tảng - phân bổ các cấu hình cụ thể cho từng bảng (deconfig bảng, bộ nạp khởi động, tạo hình ảnh với phân vùng hệ thống) và tính đồng nhất tối đa trong việc tùy chỉnh hệ thống tệp/tạo hình ảnh bằng dữ liệu. Do có sự chuẩn bị như vậy nên việc chuyển mạng diễn ra nhanh chóng.

Rất khuyến khích đọc các bài viết giới thiệu:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

Cách lắp ráp

Dự án được lưu trữ trên github
Sau khi nhân bản kho lưu trữ, sẽ thu được cấu trúc tệp sau:

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

buildroot-2019.05.tar.gz - kho lưu trữ buildroot sạch
lớp phủ là thư mục của tôi với cây bên ngoài. Đây là nơi lưu trữ mọi thứ bạn cần để xây dựng chương trình cơ sở bằng buildroot.
README.md - mô tả dự án và hướng dẫn sử dụng bằng tiếng Anh.
run_me.sh là tập lệnh chuẩn bị hệ thống xây dựng. Mở rộng buildroot từ kho lưu trữ, đính kèm lớp phủ vào nó (thông qua cơ chế cây bên ngoài) và cho phép bạn chọn bảng mục tiêu để lắp ráp

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

Sau đó, chỉ cần vào thư mục buildroot-2019.05 và chạy lệnh make.
Sau khi quá trình xây dựng hoàn tất, tất cả kết quả xây dựng sẽ nằm trong thư mục đầu ra/hình ảnh:

[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

Các tập tin cần thiết:

  • sdcard.img - hình ảnh phương tiện để ghi vào thẻ SD (thông qua dd hoặc rufus trong wibdows).
  • qemu.qcow2 - hình ảnh phương tiện để chạy trong qemu.
  • external.qcow2 - hình ảnh phương tiện bên ngoài cho cơ sở dữ liệu
  • Monitor-0.9-beta.tar.gz - kho lưu trữ để cập nhật qua giao diện web

Thế hệ hướng dẫn

Không đáng để viết cùng một hướng dẫn nhiều lần. Và điều hợp lý nhất là viết nó một lần trong markdown, sau đó chuyển đổi nó thành PDF để tải xuống và html cho giao diện web. Điều này có thể thực hiện được nhờ gói pandoc.

Đồng thời, tất cả các tệp này cần phải được tạo trước khi hình ảnh hệ thống được lắp ráp; các tập lệnh hậu xây dựng đó đã vô dụng. Do đó, việc tạo được thực hiện dưới dạng gói hướng dẫn sử dụng. Bạn có thể xem lớp phủ/gói/hướng dẫn sử dụng.

Tệp manuals.mk (thực hiện tất cả công việc)

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

Thế giới Linux đang tích cực chuyển sang systemd và tôi cũng phải làm điều đó.
Một trong những đổi mới thú vị là sự hiện diện của bộ tính giờ. Nói chung, một bài báo riêng đang được viết về họ (và không chỉ về họ), nhưng tôi sẽ kể ngắn gọn cho bạn.

Có những hành động phải được thực hiện định kỳ. Tôi cần chạy logrotate để xóa nhật ký lighttpd và php-fpm. Điều thông thường là viết các lệnh bằng cron, nhưng tôi quyết định sử dụng bộ đếm thời gian đơn điệu systemd. Vì vậy, logrotate chạy ở một khoảng thời gian nghiêm ngặt.

Tất nhiên, có thể tạo bộ hẹn giờ kích hoạt vào một số ngày nhất định, nhưng tôi không cần điều này.
Ví dụ về bộ đếm thời gian:

  • Tệp hẹn giờ
    
    [Unit]
    Description=RODOS temp daemon timer

[Hẹn giờ] OnBootSec=1 phút
OnUnitActiveSec=1 phút

[Cài đặt] WantedBy=timers.target

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

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

Bảng được hỗ trợ

Bo mạch chủ Asus Tinker là bo mạch chính nơi mọi thứ sẽ hoạt động. Được chọn là rẻ tiền và rất mạnh mẽ.

Beaglebone black là bo mạch đầu tiên được thử nghiệm hoạt động (trong quá trình lựa chọn bo mạch mạnh hơn).

Qemu x86_64 - được sử dụng để phát triển gỡ lỗi.

Làm thế nào nó hoạt động

Khi khởi động, quá trình khôi phục cài đặt gồm hai giai đoạn sẽ diễn ra:

  • chạy tập lệnh settings_restore (thông qua dịch vụ). Nó khôi phục các cài đặt hệ thống cơ bản - múi giờ, ngôn ngữ, cài đặt mạng, v.v.
  • chạy tập lệnh chuẩn bị (thông qua dịch vụ) - ở đây zabbix và cơ sở dữ liệu đã được chuẩn bị, IP được xuất ra bảng điều khiển.

Khi bạn khởi động nó lần đầu tiên, kích thước của phân vùng thứ hai của thẻ SD sẽ được xác định. Nếu vẫn còn dung lượng chưa được phân bổ, phương tiện sẽ được phân vùng lại và phần dữ liệu sẽ chiếm toàn bộ dung lượng trống. Việc này được thực hiện nhằm giảm kích thước của ảnh cài đặt (sdcard.img). Ngoài ra, thư mục làm việc postgresql được tạo vào thời điểm này. Đó là lý do tại sao lần ra mắt đầu tiên với nhà mạng mới sẽ mất nhiều thời gian hơn những lần tiếp theo.

Khi kết nối ổ đĩa ngoài, tại thời điểm khởi động, nó sẽ tìm kiếm ổ đĩa trống và định dạng nó thành ext4 với nhãn bên ngoài.

Chú ý! Khi kết nối ổ đĩa ngoài (cũng như ngắt kết nối hoặc thay thế nó), bạn cần tạo bản sao lưu và khôi phục cài đặt!

Thiết bị RODOS 5 được sử dụng để theo dõi nhiệt độ. Nhà sản xuất cung cấp mã nguồn của tiện ích để làm việc với thiết bị. Khi bạn bật hệ thống, bộ đếm thời gian rodos sẽ khởi động và chạy tiện ích này mỗi phút một lần. Nhiệt độ hiện tại được ghi vào tệp /tmp/rodos_current_temp, sau đó zabbix có thể theo dõi tệp này dưới dạng cảm biến.

Phương tiện lưu trữ cấu hình được gắn vào thư mục /data.

Khi khởi động hệ thống và chuẩn bị vận hành, thông báo sau sẽ xuất hiện trong bảng điều khiển:

System starting, please wait

Sau khi hoàn thành công việc chuẩn bị sẽ chuyển sang hiển thị địa chỉ IP:

current ip 192.168.1.32
Ready to work

Thiết lập zabbix để theo dõi nhiệt độ

Để theo dõi nhiệt độ, chỉ cần thực hiện 2 bước:

  • kết nối thiết bị RODOS với cổng USB
  • tạo mục dữ liệu trong zabbix

Mở giao diện web zabbix:

  • Mở phần Cấu hình → Máy chủ
  • Nhấp vào Mục trong dòng máy chủ zabbix của chúng tôi
  • Bấm vào Tạo mục

Buildroot: Tạo firmware đa nền tảng với zabbix-server

Nhập dữ liệu sau:

  • tên - theo quyết định của bạn (ví dụ: serverRoomTemp )
  • Loại - đại lý zabbix
  • Chìa Khóa - Rodos
  • Kiểu số
  • Đơn vị - C
  • Thời gian lưu trữ lịch sử - thời gian lưu trữ lịch sử. còn 10 ngày
  • Thời gian lưu trữ xu hướng—thời gian lưu trữ động lực của các thay đổi. Còn lại 30 ngày
  • Ứng dụng mới - máy chủ Room Temp

Và nhấn nút THÊM.
Buildroot: Tạo firmware đa nền tảng với zabbix-server

Quản lý cài đặt qua giao diện web

Giao diện web được viết bằng PHP. Có các chức năng chính:

  • xem trạng thái thiết bị
  • thay đổi cài đặt mạng
    Buildroot: Tạo firmware đa nền tảng với zabbix-server
  • thay đổi mật khẩu người dùng
  • lựa chọn múi giờ
  • sao lưu/khôi phục/khôi phục cài đặt gốc
  • khả năng kết nối ổ đĩa ngoài
  • Cập nhật hệ thống
    Buildroot: Tạo firmware đa nền tảng với zabbix-server

Đăng nhập vào giao diện web được bảo vệ bằng mật khẩu. Trang bắt đầu - hướng dẫn.

Địa chỉ giao diện Zabbix: ${ip/dns}/zabbix
Địa chỉ giao diện quản lý: ${ip/dns}/manage
Buildroot: Tạo firmware đa nền tảng với zabbix-server

Chạy trong 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 -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

Lệnh này sẽ khởi động một hệ thống có 4 lõi, RAM 2048, kích hoạt KVM, card mạng trên bridge0 và hai đĩa: một cho hệ thống và một bên ngoài cho postgresql.

Hình ảnh có thể được chuyển đổi và chạy trong Virtualbox:

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

Sau đó nhập chúng vào hộp ảo và kết nối qua sata.

Kết luận

Trong quá trình này, tôi bắt đầu quan tâm đến việc tạo ra một sản phẩm sẵn sàng để sử dụng - với giao diện không đẹp lắm (tôi không thích viết chúng), nhưng một sản phẩm hoạt động được và dễ cấu hình.

Lần cài đặt zabbix-appliance gần đây nhất trong KVM cho thấy bước này là đúng (sau khi cài đặt xong, hệ thống không khởi động). Có lẽ tôi đang làm gì đó sai 😉

vật liệu

https://buildroot.org/

Nguồn: www.habr.com

Thêm một lời nhận xét