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


任务历史


小型公司一方面需要对其基础架构进行高质量的监控(尤其是鉴于广泛的虚拟化),另一方面,他们在财务上很难购买新设备。 另外,服务器/硬件经常出现问题:用户工作站旁边或小型壁橱/壁橱中通常有1-3台塔式服务器。


使用现成的组件(分发版)会更容易,只需将其上载到microSD卡并将其插入普通的单板计算机(beaglebone,raspberry pi和orange pi,asus tinker board系列)即可。 此外,这种设备价格便宜,可以安装在任何地方。


问题陈述


在许多方面,该项目都是作为一种实验室工作而开发的,可以应用结果。


Zabbix被选为监视系统,因为它是一个功能强大,免费且有据可查的系统。


硬件平台引发了一个严重的问题,将单独的计算机置于监视之下也不是一个好的解决方案-购买新设备的成本很高,或者在小型公司中寻找旧的+设备,服务器/硬件经常出现问题。


使用buildroot构建系统可以使您创建专门的解决方案,这些人员可以在对Linux操作系统家族知识不多的情况下进行操作。 该系统对初学者很友好,但是同时,它为有经验的开发人员提供了充足的自定义机会。 它是解决不昂贵但功能全面的IT基础架构监视任务的完美选择,而这对培训操作人员的要求最低。


解决步骤


由于这是一种方便快捷的调试解决方案,因此决定最初为x86_64创建固件以在qemu中运行。 然后移植到单板计算机臂(我喜欢asus修补板)。


选择了buildroot作为构建系统。 最初,它缺少zabbix软件包,因此我必须移植它,因为使用适当的修补程序可以解决俄罗斯语言环境的问题(请注意:在较新的buildroot版本中,不再需要这些修补程序)。


移植zabbix软件包本身将在另一篇文章中进行描述。


由于所有内容都应作为固件(不变的系统映像+可恢复的配置/数据库文件)工作,因此有必要编写您的systemd目标,服务和计时器(目标,服务,计时器)。


已决定将媒体分为两部分-包含系统文件的部分和包含可变配置和zabbix数据库文件的部分。


事实证明,解决与数据库相关的问题要困难一些。 我不想将其直接放在媒体上。 同时,基础的大小可能会超过可能的虚拟磁盘的大小。 因此,选择了一种折衷的解决方案:数据库位于sd卡的第二部分(现代SLC卡具有多达30,000个写周期),但是有一个设置允许您使用外部媒体(例如usb-hdd)。


温度监控是通过RODOS-5设备实现的。 当然,您可以直接使用dallas 1820,但是插入USB更快,更容易。


Grub2被选为x86_64的引导程序。 我花了一个最小的配置来运行。


在qemu上进行调试后,执行了向华硕修补程序板的移植。 在我的叠加层的结构中,最初进行了跨平台布局-突出显示了每个板的特定配置(defconfig板,引导程序,具有系统分区的映像生成)以及文件系统调整/创建包含数据的映像时的最大一致性。 由于这样的准备,移植很快。


强烈建议您阅读介绍性文章:
https://habr.com/cn/post/448638/
https://habr.com/cn/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的存档
overlay是我的带有外部树的目录。 它包含使用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以用于网络界面。 这要归功于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)) 

系统的


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 

支持的板


华硕修补板-一切正常的主板。 被选为廉价且非常强大的。


Beaglebone black是测试工作的第一个板(在选择功能更强大的板期间)。


Qemu x86_64-用于开发调试。


如何运作


在启动时,会分两阶段恢复设置:


  • (通过服务)运行settings_restore脚本。 它恢复基本的系统设置-时区,区域设置,网络设置等。
  • (通过服务)运行prepare脚本-在这里准备了zabbix,在控制台中显示数据库,IP。

在第一次开始时,确定sd卡第二部分的大小。 如果仍有未分配的空间-媒体已重新分区,则数据部分将占据所有可用空间。 这样做是为了减小安装映像(sdcard.img)的大小。 另外,此时将创建postgresql工作目录。 这就是为什么使用新媒体的首次发布会比随后的发布更长的原因。


连接外部驱动器时,启动时它将搜索可用驱动器,并使用外部标签在ext4中对其进行格式化。


注意! 连接外部驱动器(以及断开或更换外部驱动器)时,需要备份和恢复设置!


为了监视温度,使用了RODOS 5设备,制造商提供了与该设备一起使用的实用程序来源。 打开系统电源后,rodo计时器将启动,每分钟启动一次此实用程序。 当前温度被写入/ tmp / rodos_current_temp文件,之后zabbix可以将该文件作为传感器进行监视。


用于配置的存储介质安装在/ data目录中。


启动系统并准备工作时,控制台中会显示一条消息:


 System starting, please wait 

准备工作完成后,它将更改为显示IP地址:


 current ip 192.168.1.32 Ready to work 

配置zabbix进行温度监控


要监视温度,只需执行两个步骤:


  • 将RODOS设备连接到USB端口
  • 在zabbix中创建数据项

打开zabbix Web界面:


  • 打开配置→主机部分
  • 单击我们的zabbix服务器行中的项目
  • 点击创建项目


输入以下数据:


  • 名称-由您自行决定(例如,serverRoomTemp)
  • 类型-Zabbix代理
  • 钥匙-Rodos
  • 类型-数字
  • 单位-C
  • 历史记录存储期-历史记录的期限。 剩下10天
  • 趋势存储期-动态变化的存储期。 剩下30天
  • 新应用程序-服务器机房温度

然后按添加按钮。


基于网络的管理


Web界面是用php编写的。 主要功能:


  • 查看设备状态
  • 更改网络设置
  • 更改用户密码
  • 时区选择
  • 备份/还原/重置为出厂设置
  • 连接外部驱动器的能力
  • 系统更新

登录Web界面受密码保护。 起始页-手册。


Zabbix接口地址:\ $ {ip / dns} / zabbix
管理接口地址:\ $ {ip / dns} / manage


在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-驱动器文件=输出/图像/ qemu.qcow2,格式= qcow2,aio =线程-设备virtio-scsi-pci,id = scsi0-驱动器文件=输出/图像/ external.qcow2,格式= qcow2,aio =线程


此命令将启动一个具有4个核的系统,由KVM激活的2048 RAM,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/

Source: https://habr.com/ru/post/zh-CN477008/


All Articles