
היסטוריית בעיות
חברות קטנות, מצד אחד, זקוקות לניטור איכותי של התשתית שלהן (במיוחד לאור וירטואליזציה נרחבת), מצד שני, קשה להן כלכלית לרכוש ציוד חדש. בעיות שרת/חומרה נפוצות גם: לעתים קרובות יש 1-3 שרתי מגדל ליד תחנות עבודה של משתמשים או בנישה/ארון קטן.
קל יותר להשתמש בהרכבה מוכנה (הפצה), אותה אתה רק צריך להעלות לכרטיס microSD ולהכניס למחשב משותף עם לוח יחיד (משפחות beaglebone, raspberry pi ו- orange pi, asus tinker board). בנוסף, ציוד כזה אינו יקר וניתן להתקין אותו בכל מקום.
הצהרת הבעיה
במובנים רבים, הפרויקט התפתח כמעין עבודת מעבדה עם אפשרות ליישם את התוצאות.
Zabbix נבחרה כמערכת הניטור מכיוון שזו מערכת עוצמתית, חינמית ומתועדת היטב.
הבעיה עם פלטפורמת החומרה הפכה חריפה. לשים מכונה נפרדת לניטור זה גם לא פתרון טוב במיוחד - או שזה יקר לרכוש ציוד חדש, או לחפש ציוד ישן + בחברות קטנות יש בעיות תכופות עם שרת/ חוּמרָה.
שימוש במערכת הבנייה buildroot מאפשר לך ליצור פתרונות ייעודיים שניתן להפעיל על ידי אנשי צוות עם ידע מינימלי במשפחת מערכות ההפעלה. Linuxמערכת זו ידידותית למתחילים, אך מציעה אפשרויות התאמה אישית נרחבות למפתחים מנוסים. היא אידיאלית לניטור תשתיות IT במחיר סביר אך פונקציונלי לחלוטין, עם דרישות הכשרה מינימליות לצוות התפעולי.
שלבי פתרון
הוחלט בהתחלה ליצור קושחה עבור x86_64 להפעלה ב-qemu, מכיוון שזהו פתרון נוח ומהיר לניפוי באגים. לאחר מכן העבר אותו למחשב בעל לוח יחיד (אהבתי את לוח ה-Tinker של Asus).
buildroot נבחרה כמערכת הבנייה. בתחילה חסרה לו חבילת zabbix, ולכן היה צורך להעביר אותו. היו בעיות עם המקום הרוסי, שנפתרו על ידי החלת התיקונים המתאימים (שימו לב: בגרסאות חדשות יותר של buildroot, אין עוד צורך בתיקונים אלו).
העברה של חבילת zabbix עצמה יתואר במאמר נפרד.
מכיוון שהכל אמור לעבוד כקושחה (תמונת מערכת בלתי ניתנת לשינוי + קבצי תצורה/בסיס נתונים ניתנים לשחזור), היה צורך לכתוב יעדים, שירותים וטיימרים מערכת משלך (יעד, שירות, טיימר).
הוחלט לפצל את המדיה ל-2 חלקים - חלק עם קבצי מערכת וחלק עם תצורות ניתנות לשינוי וקבצי מסד נתונים zabbix.
פתרון בעיות הקשורות למסד הנתונים התברר כקצת יותר קשה. לא רציתי להציב את זה ישירות בתקשורת. יחד עם זאת, גודל בסיס הנתונים יכול להגיע לגודל העולה על גודל רמדיסק אפשרי. לכן, נבחר פתרון פשרה: מסד הנתונים ממוקם במחיצה השנייה של כרטיס ה-SD (לכרטיסי SLC מודרניים יש עד 30 מחזורי כתיבה), אך ישנה הגדרה המאפשרת שימוש במדיה חיצונית (לדוגמה, usb- HDD).
ניטור טמפרטורה יושם באמצעות התקן RODOS-5. כמובן, אתה יכול להשתמש ב-Dallas 1820 ישירות, אבל זה היה מהיר וקל יותר לחבר USB.
grub86 נבחר כמטען האתחול עבור x64_2. היה צורך לכתוב תצורה מינימלית כדי להפעיל אותו.
לאחר ניפוי באגים ב-qemu, הוא הועבר ללוח הטינקר של אסוס. המבנה של שכבת העל שלי נועד בהתחלה להיות חוצה פלטפורמות - הקצאת הגדרות ספציפיות לכל לוח (board defconfig, bootloader, יצירת תמונה עם מחיצת מערכת) ואחידות מקסימלית בהתאמה אישית של מערכת הקבצים/יצירת תמונה עם נתונים. בשל הכנה כזו, המעבר עבר במהירות.
מומלץ מאוד לקרוא את מאמרי המבוא:
איך להרכיב
לאחר שיבוט המאגר, מתקבל מבנה הקבצים הבא:
[alexey@comp monitor]$ ls -1
buildroot-2019.05.tar.gz
overlay
README.md
run_me.shbuildroot-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.
לאחר השלמת הבנייה, כל תוצאות הבנייה יהיו בספריית הפלט/תמונות:
[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 - ארכיון לעדכון דרך ממשק האינטרנט
דור מדריכים
לא כדאי לכתוב את אותן הוראות מספר פעמים. והדבר הכי הגיוני הוא לכתוב את זה פעם אחת ב-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))system
העולם Linux עובר באופן פעיל ל-systemd, וגם אני הייתי צריך לעשות את זה.
אחד החידושים הנעימים הוא נוכחותם של טיימרים. באופן כללי, נכתב עליהם מאמר נפרד (ולא רק עליהם), אבל אני אספר לכם בקצרה.
ישנן פעולות שיש לבצע מעת לעת. הייתי צריך להפעיל את logrotate כדי לנקות את יומני lighttpd ו-php-fpm. הדבר הרגיל יהיה לכתוב את הפקודות ב-cron, אבל החלטתי להשתמש בטיימר המונוטוני systemd. אז logrotate פועל במרווח זמן קפדני.
כמובן שאפשר ליצור טיימרים שידלקו בתאריכים מסוימים, אבל לא הייתי צריך את זה.
דוגמה טיימר:
- קובץ טיימר
[Unit] Description=RODOS temp daemon timer
[שָׁעוֹן עֶצֶר]
OnBootSec = 1 דק '
OnUnitActiveSec=1דקה
[להתקין]
מבוקש על ידי = טיימרים. יעד
- Файл сервиса, вызываемого таймером:
```bash
[Unit]
Description=RODOS temp daemon
[Service]
ExecStart=/usr/bin/rodos.shלוחות נתמכים
Asus 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 שלנו
- לחץ על צור פריט

הזן את הנתונים הבאים:
- שם - לפי שיקול דעתך (לדוגמה, serverRoomTemp )
- סוג - סוכן zabbix
- מפתח - רודוס
- סוג-מספרי
- יחידות - C
- תקופת אחסון היסטוריה — תקופת אחסון היסטוריה. נשאר 10 ימים
- תקופת אחסון מגמה - תקופת אחסון עבור הדינמיקה של שינויים. נותרו 30 יום
- אפליקציה חדשה - שרת Room Temp
ולחץ על כפתור ADD.

נהל הגדרות באמצעות ממשק אינטרנט
ממשק האינטרנט כתוב ב-PHP. ישנן פונקציות עיקריות:
- להציג את מצב המכשיר
- שינוי הגדרות הרשת

- שינוי סיסמת משתמש
- בחירת אזור זמן
- גיבוי/שחזור/איפוס להגדרות היצרן
- יכולת לחבר כונן חיצוני
- עדכון מערכת

הכניסה לממשק האינטרנט מוגנת בסיסמה. דף התחלה - מדריך.
כתובת ממשק Zabbix: ${ip/dns}/zabbix
כתובת ממשק ניהול: ${ip/dns}/manage

רץ ב-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 -כונן 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
פקודה זו תתחיל מערכת עם 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.
מסקנה
תוך כדי כך התעניינתי ביצירת מוצר מוכן לשימוש - עם ממשק לא יפה במיוחד (אני לא אוהב לכתוב אותם), אבל כזה שעובד וקל להגדרה.
הניסיון האחרון להתקין את zabbix-appliance ב-KVM הראה ששלב זה היה נכון (לאחר השלמת ההתקנה, המערכת לא מתחילה). אולי אני עושה משהו לא בסדר 😉
מקור: www.habr.com


