Buildroot:使用 zabbix-server 構建跨平台固件

Buildroot:使用 zabbix-server 構建跨平台固件

問題歷史

小型公司一方面需要對其基礎設施進行高品質的監控(特別是考慮到廣泛的虛擬化),另一方面,他們在經濟上很難購買新設備。 伺服器/硬體問題也很常見:使用者工作站旁邊或小壁龕/壁櫥中通常有 1-3 台塔式伺服器。

使用現成的組件(分發)更容易,您只需將其上傳到 microSD 卡並插入常見的單板計算機(beaglebone、raspberry pi 和 Orange pi 系列、asustinkerboard)即可。 此外,此類設備價格低廉,可以安裝在任何地方。

制定問題

在許多方面,該專案發展成為一種實驗室工作,具有應用結果的可能性。

選擇 Zabbix 作為監控系統是因為它是一個功能強大、免費且文件齊全的系統。

硬體平台的問題變得尖銳起來,單獨一台機器進行監控也不是一個很好的解決方案——要么購買新設備成本高昂,要么尋找舊設備+小公司伺服器/伺服器經常出現問題硬體。

使用 buildroot 建置系統可讓您建立專門的解決方案,可由對 Linux 作業系統了解最少的人員操作。 該系統對初學者很友好,但同時為經驗豐富的開發人員提供了充足的客製化機會。 它非常適合解決 IT 基礎設施的廉價但功能齊全的監控問題,並且對操作人員的培訓要求極低。

解決步驟

我們決定最初為 x86_64 建立韌體以在 qemu 中運行,因為這是一個方便且快速的調試解決方案。 然後將其移植到arm單板電腦(我喜歡華碩tinker board)。

buildroot 被選為建置系統。 最初,它缺少zabbix包,所以必須移植,俄語語言環境存在問題,透過應用適當的補丁解決了這個問題(注意:在較新版本的buildroot中,不再需要這些補丁)。

移植zabbix包本身將在另一篇文章中描述。

由於一切都應該作為韌體工作(不可更改的系統映像+可恢復的配置/資料庫檔案),因此有必要編寫自己的 systemd 目標、服務和計時器(目標、服務、計時器)。

決定將媒體分為 2 個部分 - 一個包含系統檔案的部分和一個包含可更改配置和 zabbix 資料庫檔案的部分。

解決與資料庫相關的問題變得有點困難。 我不想把它直接放在媒體上。 同時,資料庫的大小可能達到超過可能的 ramdisk 的大小。 因此,選擇了一個折衷的解決方案:資料庫位於 SD 卡的第二個分區(現代 SLC 卡的寫入週期高達 30 次),但有一個設定允許使用外部媒體(例如 USB-硬碟)。

溫度監測是透過RODOS-5設備實現的。 當然,您可以直接使用Dallas 1820,但插入USB更快、更容易。

grub86 被選為 x64_2 的引導程式。 有必要編寫一個最小的配置來啟動它。

在qemu上調試後,移植到asustinkerboard。 我的覆蓋層結構最初旨在跨平台 - 分配特定於每個板的配置(板 defconfig、引導程式、使用系統分區生成映像)以及自訂檔案系統/使用資料建立映像的最大一致性。 由於有這樣的準備,移植進展得很快。

強烈建議閱讀介紹文章:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/

如何組裝

項目存放在github上
克隆儲存庫後,取得以下文件結構:

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

buildroot-2019.05.tar.gz - 清理 buildroot 存檔
覆蓋是我的外部樹目錄。 這是使用 buildroot 建立韌體所需的所有內容的儲存位置。
README.md - 英文項目描述和手冊。
run_me.sh 是一個準備建置系統的腳本。 從檔案中擴展 buildroot,將覆蓋層附加到其上(透過外部樹機制),並允許您選擇要組裝的目標板

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

之後,只需進入 buildroot-2019.05 目錄並執行 make 命令即可。
建置完成後,所有建置結果將位於output/images目錄中:

[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

所需文件:

  • sdcard.img - 用於在 SD 卡上記錄的媒體映像(透過 wibdows 下的 dd 或 rufus)。
  • qemu.qcow2 - 在 qemu 中運行的媒體映像。
  • external.qcow2 - 資料庫的外部媒體影像
  • Monitor-0.9-beta.tar.gz - 用於透過 Web 介面更新的存檔

指南的生成

多次編寫相同的指令是不值得的。 最合乎邏輯的做法是在 Markdown 中編寫一次,然後將其轉換為 PDF 以供下載,並轉換為 html 以供 Web 介面使用。 這要歸功於 pandoc 包。

同時,所有這些檔案都需要在系統映像組裝之前產生;那些建置後腳本已經毫無用處。 因此,生成是以手冊包的形式完成的。 您可以查看覆蓋/包裝/手冊。

Manuals.mk 檔案(完成所有工作)

################################################################################
#
# 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 世界正在積極轉向 systemd,我也必須這樣做。
令人愉快的創新之一是計時器的存在。 一般來說,正在寫一篇關於它們的單獨文章(而且不僅僅是關於它們),但我會簡要地告訴你。

有些操作必須定期執行。 我需要運行 logrotate 來清除 lighttpd 和 php-fpm 日誌。 通常的做法是在 cron 中寫指令,但我決定使用 systemd 單調計時器。 因此 logrotate 以嚴格的時間間隔運行。

當然,可以創建在特定日期觸發的計時器,但我不需要這個。
定時器範例:

  • 定時器檔案
    
    [Unit]
    Description=RODOS temp daemon timer

[計時器] OnBootSec=1 分鐘
OnUnitActiveSec=1 分鐘

[安裝] WantedBy=timers.target

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

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

支援的闆卡

華碩 Tinker Board 是一切都應該工作的主機板。 被選為價格低廉且功能非常強大。

Beaglebone black 是第一個進行操作測試的板(在選擇更強大的板期間)。

Qemu x86_64 - 用於調試開發。

它是如何工作的

啟動時,會進行兩階段設定恢復:

  • 執行 settings_restore 腳本(透過服務)。 它恢復基本的系統設定 - 時區、區域設定、網路設定等。
  • 運行準備腳本(透過服務) - 這裡zabbix和資料庫都已準備好,IP將輸出到控制台。

第一次啟動時,SD卡第二個分割區的大小就確定了。 如果仍有未分配的空間,則媒體將重新分割,資料部分將佔用所有可用空間。 這樣做是為了減少安裝映像 (sdcard.img) 的大小。 此外,此時會建立 postgresql 工作目錄。 這就是為什麼新業者的首次發射將比後續發射時間更長。

連接外部磁碟機時,在啟動時它會搜尋空閒磁碟機並將其格式化為具有外部標籤的 ext4。

注意力! 連接外部驅動器(以及斷開或更換)時,您需要進行備份並恢復設定!

RODOS 5 設備用於溫度監控。製造商提供了與該設備配合使用的實用程式的原始程式碼。 當系統開啟時,rodos 計時器啟動,每分鐘執行一次該實用程式。 目前溫度寫入到檔案/tmp/rodos_current_temp中,之後zabbix可以當作感測器來監控這個檔案。

配置儲存媒體掛載在/data目錄下。

啟動系統並準備運行時,控制台中會顯示以下訊息:

System starting, please wait

準備工作完成後,將改為顯示IP位址:

current ip 192.168.1.32
Ready to work

設定zabbix進行溫度監控

要監控溫度,只需執行 2 個步驟:

  • 將 RODOS 裝置連接到 USB 連接埠
  • 在zabbix中建立資料項

開啟zabbix網頁介面:

  • 開啟配置 → 主機部分
  • 點擊我們的 zabbix 伺服器行中的 Items
  • 點擊建立項目

Buildroot:使用 zabbix-server 構建跨平台固件

輸入以下數據:

  • name - 由您自行決定(例如 serverRoomTemp )
  • 類型-zabbix代理
  • 鑰匙 - 羅多斯
  • 類型-數字
  • 單位-C
  • 歷史儲存週期-歷史儲存週期。 剩10天
  • 趨勢儲存期-變化動態的儲存期。 還剩下30天
  • 新應用程式 - 伺服器室溫

然後按下新增按鈕。
Buildroot:使用 zabbix-server 構建跨平台固件

透過網路介面管理設定

Web 介面是用 PHP 寫的。 主要有以下功能:

  • 查看設備狀態
  • 變更網路設定
    Buildroot:使用 zabbix-server 構建跨平台固件
  • 更改使用者密碼
  • 時區選擇
  • 備份/恢復/恢復出廠設置
  • 連接外部驅動器的能力
  • 系統更新
    Buildroot:使用 zabbix-server 構建跨平台固件

登入 Web 介面受密碼保護。 起始頁 - 手冊。

Zabbix介面位址:${ip/dns}/zabbix
管理介面位址:${ip/dns}/manage
Buildroot:使用 zabbix-server 構建跨平台固件

在 qemu 中運行

qemu-system-x86_64 -smp 4 -m 4026M -enable-kvm -machine q35,accel=kvm -device intel-iommu -cpu host -net nic -netbridge,br=bridge0 -device virtio-scsi-pci,id= scsi0 -驅動檔=輸出/圖像/qemu.qcow2,格式=qcow2,aio=線程-設備virtio-scsi-pci,id=scsi0 -驅動文件=輸出/圖像/external.qcow2,格式=qcow2,aio=線程

該命令將啟動一個具有 4 個核心、2048 RAM、啟用 KVM、bridge0 上的網路卡和兩個磁碟的系統:一個用於系統,一個外部用於 postgresql。

圖像可以在 Virtualbox 中轉換和運行:

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

然後將它們匯入virtualbox並透過SATA連接。

結論

在這個過程中,我開始對製作即用型產品感興趣——介面不是很漂亮(我不喜歡編寫它們),但可以工作並且易於配置。

上次嘗試在KVM中安裝zabbix-appliance表示這一步驟是正確的(安裝完成後系統無法啟動)。 也許我做錯了什麼😉

物料

https://buildroot.org/

來源: www.habr.com

添加評論