
تاريخ المهمة
تحتاج الشركات الصغيرة الحجم ، من ناحية ، إلى مراقبة عالية الجودة للبنية التحتية الخاصة بها (خاصة في ضوء المحاكاة الافتراضية الواسعة النطاق) ، من ناحية أخرى ، من الصعب عليها مالياً شراء معدات جديدة. أيضًا ، غالبًا ما توجد مشكلات في الخادم / الأجهزة: غالبًا ما توجد 1-3 خوادم برجية بجوار محطات عمل المستخدم أو في مكان صغير / خزانة صغيرة.
من الأسهل استخدام مجموعة جاهزة (التوزيع) ، وهو ما يكفي للتحميل على بطاقة microSD وإدخالها في جهاز كمبيوتر مشترك أحادي اللوحة (beaglebone ، التوت pi والبرتقالي بي ، أسر asus tinker board). بالإضافة إلى ذلك ، هذه المعدات غير مكلفة ويمكن تثبيتها في أي مكان.
بيان المشكلة
في نواح كثيرة ، تم تطوير المشروع كنوع من العمل المختبري مع إمكانية تطبيق النتائج.
تم اختيار Zabbix كنظام مراقبة ، لأنه نظام قوي ومجاني وموثق جيدًا.
نشأ السؤال بحدة مع النظام الأساسي للأجهزة ، كما أن وضع جهاز منفصل تحت المراقبة ليس حلاً جيدًا - سواء كان شراء أجهزة جديدة باهظة الثمن أو البحث عن جهاز قديم + في الشركات الصغيرة ، فهناك مشاكل متكررة مع الخادم / الجهاز.
يتيح لك استخدام نظام buildroot build إنشاء حلول متخصصة يمكن تشغيلها من قبل موظفين لديهم معرفة بسيطة بأسرة نظام التشغيل Linux. هذا النظام سهل الاستخدام للمبتدئين ، لكنه في الوقت نفسه يوفر فرصًا كبيرة للتخصيص في أيدي مطور متمرس. إنه مثالي لحل مهمة المراقبة الباهظة الثمن للبنية التحتية لتكنولوجيا المعلومات ، والتي لا تتطلب تكلفة كبيرة ، والتي تتطلب الحد الأدنى في تدريب موظفي التشغيل لديها.
خطوات الحل
تقرر في البداية إنشاء برامج ثابتة ل x86_64 لتشغيلها في qemu ، لأن هذا حل مناسب وسريع لتصحيح الأخطاء. ثم منفذ إلى ذراع الكمبيوتر أحادية اللوحة (أحببت لوحة العبث آسوس).
تم اختيار buildroot كنظام للبناء. في البداية ، كانت تفتقر إلى حزمة zabbix ، لذلك اضطررت إلى نقلها. كانت هناك مشاكل في اللغة الروسية التي تم حلها عن طريق تطبيق التصحيحات المناسبة (ملاحظة: في الإصدارات الأحدث من buildroot لم تعد هذه التصحيحات مطلوبة).
سيتم وصف ترقية الحزمة zabbix نفسها في مقالة منفصلة.
نظرًا لأن كل شيء يجب أن يعمل كبرنامج ثابت (صورة النظام دون تغيير + ملفات التكوين / قاعدة البيانات القابلة للاسترداد) ، كان من الضروري أن تكتب أهداف النظام وخدماته ومؤقتك (الهدف ، الخدمة ، المؤقت).
تقرر تقسيم الوسائط إلى قسمين - قسم به ملفات النظام وقسم به تهيئة قابلة للتغيير وملفات قاعدة بيانات zabbix.
اتضح أن حل المشكلات المرتبطة بقاعدة البيانات أصعب قليلاً. لم أكن أرغب في وضعه مباشرة على وسائل الإعلام. في الوقت نفسه ، يمكن أن يصل حجم القاعدة إلى حجم يتجاوز حجم ramdisk المحتملة. لذلك ، تم اختيار حل توفيقي: تقع قاعدة البيانات في القسم الثاني من بطاقة sd (تحتوي بطاقات SLC الحديثة على ما يصل إلى 30000 دورة كتابة) ، ولكن هناك إعدادًا يتيح لك استخدام الوسائط الخارجية (على سبيل المثال ، USB-hdd).
تم تنفيذ مراقبة درجة الحرارة من خلال جهاز RODOS-5. بالطبع ، يمكنك استخدام dallas 1820 مباشرة ، ولكن كان توصيل USB أسرع وأسهل.
تم اختيار Grub2 ليكون أداة تحميل التشغيل لـ x86_64. استغرق الأمر مني أن أكتب الحد الأدنى من التكوين لتشغيل.
بعد تصحيح الأخطاء على qemu ، تم إجراء النقل إلى لوحة العبث من asus. في هيكل التراكب الخاص بي ، تم وضع نظام عرض تقاطع أساسي في البداية - مع إبراز التكوينات المحددة لكل لوحة (لوحات defconfig ، و bootloader ، وتوليد الصور مع قسم النظام) ، والتوحيد الأقصى في ضبط نظام الملفات / إنشاء صورة مع البيانات. بسبب هذا التحضير ، كانت عملية النقل سريعة.
يوصى بشدة بقراءة المقالات التمهيدية:
https://habr.com/ru/post/448638/
https://habr.com/ru/post/449348/
كيفية التجمع
يتم تخزين المشروع على جيثب
بعد استنساخ المستودع ، يتم الحصول على بنية الملف التالية:
[alexey@comp monitor]$ ls -1 buildroot-2019.05.tar.gz overlay README.md run_me.sh
buildroot-2019.05.tar.gz - أرشيف البناء النظيف
تراكب هو الدليل الخاص بي مع شجرة الخارجية. أنه يحتوي على كل ما تحتاجه لإنشاء البرامج الثابتة باستخدام 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.
بعد اكتمال التجميع ، ستكون جميع نتائج التجميع في دليل الإخراج / الصور:
[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 (عبر dd أو rufus تحت wibdows).
- qemu.qcow2 - صورة وسائط لتشغيلها في qemu.
- external.qcow2 - صورة وسائط خارجية لقاعدة البيانات
- monitor-0.9-beta.tar.gz - أرشيف للتحديث عبر واجهة الويب
دليل الجيل
لا يستحق كتابة نفس التعليمات عدة مرات. ومن المنطقي أن تكتب مرة واحدة في تخفيض السعر ، ثم تقوم بتحويله إلى PDF للتنزيل و html لواجهة الويب. هذا ممكن بفضل حزمة pandoc.
في الوقت نفسه ، تحتاج إلى إنشاء كل هذه الملفات قبل تجميع صورة النظام ، وهذه البرامج النصية بعد الإنشاء غير مجدية بالفعل. لذلك ، يتكون الجيل في شكل حزمة كتيبات. يمكنك أن ترى ذلك في تراكب / حزمة / كتيبات.
ملف manuals.mk (الذي يقوم بكل العمل)
سيستم دي
ينتقل عالم Linux بنشاط إلى systemd ، واضطررت إلى القيام بذلك أيضًا.
من الابتكارات لطيفة - وجود أجهزة ضبط الوقت. بشكل عام ، يتم كتابة مقال منفصل عنهم (وليس فقط عنهم) ، لكنني سأخبركم بإيجاز.
هناك الإجراءات التي يجب القيام بها بشكل دوري. كنت بحاجة لتشغيل logrotate لمسح سجلات lighttpd و php-fpm. سيكون من الأكثر شيوعًا كتابة الأوامر في cron ، لكنني قررت استخدام الموقت systemd الرتيب. وبالتالي ، يبدأ logrotate في فترة زمنية صارمة.
بالطبع ، هناك إمكانية لإنشاء أجهزة ضبط الوقت التي تعمل في تواريخ معينة ، لكنني لم أكن في حاجة إليها.
مثال مؤقت:
[الموقت]
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 (من خلال الخدمة). يستعيد إعدادات النظام الأساسية - المنطقة الزمنية ، الإعدادات المحلية ، إعدادات الشبكة ، إلخ.
- تشغيل البرنامج النصي لإعداد (من خلال الخدمة) - هنا يتم إعداد 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 لمراقبة درجة الحرارة
لمراقبة درجة الحرارة ، اتبع فقط خطوتين:
- قم بتوصيل جهاز RODOS بمنفذ USB
- إنشاء عنصر البيانات في zabbix
افتح واجهة الويب zabbix:
- افتح القسم التكوين → المضيفين
- انقر فوق العناصر الموجودة في سطر خادم zabbix الخاص بنا
- انقر فوق إنشاء عنصر

أدخل البيانات التالية:
- اسم - حسب تقديرك (على سبيل المثال ، serverRoomTemp)
- النوع - وكيل zabbix
- مفتاح رودوس
- اكتب- رقمي
- وحدات - جيم
- فترة تخزين التاريخ - مصطلح التاريخ. غادر 10 أيام
- فترة تخزين الاتجاه - فترة تخزين ديناميات التغييرات. غادر 30 يوما
- تطبيق جديد - خادم غرفة درجة الحرارة
واضغط على زر ADD.

الإدارة القائمة على الويب
واجهة الويب مكتوبة بلغة php. هناك وظائف رئيسية هي:
- عرض حالة الجهاز
- تغيير إعدادات الشبكة

- تغيير كلمة مرور المستخدم
- اختيار المنطقة الزمنية
- النسخ الاحتياطي / استعادة / إعادة تعيين إلى إعدادات المصنع
- القدرة على توصيل محرك أقراص خارجي
- تحديث النظام

تسجيل الدخول إلى واجهة الويب محمي بكلمة مرور. صفحة البدء - دليل.
عنوان واجهة Zabbix: \ $ {ip / dns} / zabbix
عنوان واجهة الإدارة: \ $ {ip / dns} / management

تشغيل في كيمو
qemu-system-x86_64 -smp 4 -m 4026M -enable-kvm -machine q35، speed = kvm-service intel-iommu -cpu host -net nic -net bridge، br = bridge0 -device-scsi-pci، id = scsi0 -drive file = output / images / qemu.qcow2 ، format = qcow2 ، aio = مؤشرات الترابط ، virtio-scsi-pci ، id = scsi0 -drive file = output / images / external.qcow2 ، format = qcow2
سيبدأ هذا الأمر في تشغيل نظام به 4 مراكز و 2048 من ذاكرة الوصول العشوائي يتم تنشيطها بواسطة 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 والاتصال عبر ساتا.
استنتاج
خلال هذه العملية ، أصبحت مهتمًا بجعل منتجًا جاهزًا للعمل - بواجهة ليست لطيفة جدًا (لا أحب أن أكتبها) ، ولكن أعمل وسهل التكوين.
أظهرت المحاولة الأخيرة لتثبيت zabbix-appliance في KVM صحة هذه الخطوة (لا يبدأ النظام بعد اكتمال التثبيت). ربما أنا أفعل شيئا خطأ ؛)
المواد
https://buildroot.org/