Buildroot: Δημιουργία υλικολογισμικού πολλαπλών πλατφορμών με zabbix-server

Buildroot: Δημιουργία υλικολογισμικού πολλαπλών πλατφορμών με zabbix-server

Ιστορικό προβλημάτων

Οι μικρές εταιρείες, αφενός, χρειάζονται παρακολούθηση υψηλής ποιότητας της υποδομής τους (ειδικά υπό το φως της εκτεταμένης εικονικοποίησης), αφετέρου, είναι οικονομικά δύσκολο για αυτές να αγοράσουν νέο εξοπλισμό. Τα προβλήματα διακομιστή/υλισμικού είναι επίσης κοινά: συχνά υπάρχουν 1-3 διακομιστές πύργων δίπλα σε σταθμούς εργασίας χρήστη ή σε μια μικρή θέση/ντουλάπα.

Είναι πιο εύκολο να χρησιμοποιήσετε ένα έτοιμο συγκρότημα (διανομή), το οποίο απλά πρέπει να ανεβάσετε σε μια κάρτα microSD και να το τοποθετήσετε σε έναν κοινό υπολογιστή μονής πλακέτας (οικογένειες beaglebone, raspberry pi και orange pi, asus tinker board). Επιπλέον, ένας τέτοιος εξοπλισμός είναι φθηνός και μπορεί να εγκατασταθεί οπουδήποτε.

Δήλωση προβλήματος

Από πολλές απόψεις, το έργο αναπτύχθηκε ως ένα είδος εργαστηριακής εργασίας με δυνατότητα εφαρμογής των αποτελεσμάτων.

Το Zabbix επιλέχθηκε ως σύστημα παρακολούθησης επειδή είναι ένα ισχυρό, δωρεάν και καλά τεκμηριωμένο σύστημα.

Το πρόβλημα με την πλατφόρμα υλικού έχει γίνει οξύ. Το να βάλετε ένα ξεχωριστό μηχάνημα υπό παρακολούθηση δεν είναι επίσης πολύ καλή λύση - είτε είναι ακριβό να αγοράσετε νέο εξοπλισμό είτε να αναζητήσετε παλιό εξοπλισμό + σε μικρές εταιρείες υπάρχουν συχνά προβλήματα με διακομιστή/ σκεύη, εξαρτήματα.

Η χρήση του συστήματος buildroot build σάς επιτρέπει να δημιουργείτε εξειδικευμένες λύσεις που μπορούν να λειτουργήσουν από προσωπικό με ελάχιστη γνώση λειτουργικών συστημάτων Linux. Αυτό το σύστημα είναι φιλικό προς τους αρχάριους, αλλά ταυτόχρονα παρέχει άφθονες ευκαιρίες προσαρμογής στα χέρια ενός έμπειρου προγραμματιστή. Είναι ιδανικό για την επίλυση του προβλήματος της φθηνής, αλλά πλήρως λειτουργικής παρακολούθησης της υποδομής πληροφορικής, με ελάχιστες απαιτήσεις για την εκπαίδευση του προσωπικού που τη χειρίζεται.

Βήματα λύσης

Αποφασίστηκε αρχικά να δημιουργηθεί υλικολογισμικό για το x86_64 που θα τρέχει στο qemu, καθώς αυτή είναι μια βολική και γρήγορη λύση για τον εντοπισμό σφαλμάτων. Στη συνέχεια, τοποθετήστε το σε έναν υπολογιστή μονής πλακέτας βραχίονα (μου άρεσε η πλακέτα asus tinker).

Το buildroot επιλέχθηκε ως σύστημα κατασκευής. Αρχικά, του λείπει το πακέτο zabbix, οπότε έπρεπε να μεταφερθεί. Υπήρχαν προβλήματα με τη ρωσική τοπική ρύθμιση, τα οποία επιλύθηκαν με την εφαρμογή των κατάλληλων ενημερώσεων κώδικα (σημείωση: σε νεότερες εκδόσεις του buildroot, αυτές οι ενημερώσεις κώδικα δεν χρειάζονται πλέον).

Η μεταφορά του ίδιου του πακέτου zabbix θα περιγραφεί σε ξεχωριστό άρθρο.

Δεδομένου ότι όλα θα έπρεπε να λειτουργούν ως υλικολογισμικό (αμετάβλητη εικόνα συστήματος + ανακτήσιμα αρχεία διαμόρφωσης/βάσης δεδομένων), ήταν απαραίτητο να γράψετε τους δικούς σας στόχους συστήματος, υπηρεσίες και χρονοδιακόπτες (στόχος, υπηρεσία, χρονόμετρο).

Αποφασίστηκε να χωριστούν τα μέσα σε 2 ενότητες - μια ενότητα με αρχεία συστήματος και μια ενότητα με μεταβλητές ρυθμίσεις παραμέτρων και αρχεία βάσης δεδομένων zabbix.

Η επίλυση προβλημάτων που σχετίζονται με τη βάση δεδομένων αποδείχθηκε λίγο πιο δύσκολη. Δεν ήθελα να το τοποθετήσω απευθείας στα μέσα ενημέρωσης. Ταυτόχρονα, το μέγεθος της βάσης δεδομένων μπορεί να φτάσει σε μέγεθος που υπερβαίνει το μέγεθος ενός πιθανού ramdisk. Επομένως, επιλέχθηκε μια συμβιβαστική λύση: η βάση δεδομένων βρίσκεται στο δεύτερο διαμέρισμα της κάρτας SD (οι σύγχρονες κάρτες SLC έχουν έως και 30 κύκλους εγγραφής), αλλά υπάρχει μια ρύθμιση που επιτρέπει τη χρήση εξωτερικών μέσων (για παράδειγμα, usb- hdd).

Η παρακολούθηση της θερμοκρασίας υλοποιήθηκε μέσω της συσκευής RODOS-5. Φυσικά, μπορείτε να χρησιμοποιήσετε το Dallas 1820 απευθείας, αλλά ήταν πιο γρήγορο και πιο εύκολο να συνδέσετε ένα USB.

Το grub86 επιλέχθηκε ως bootloader για το x64_2. Ήταν απαραίτητο να γραφτεί μια ελάχιστη διαμόρφωση για να ξεκινήσει.

Μετά τον εντοπισμό σφαλμάτων στο qemu, μεταφέρθηκε στην πλακέτα asus tinker. Η δομή της επικάλυψης μου αρχικά προοριζόταν να είναι cross-platform - κατανομή ρυθμίσεων ειδικά για κάθε πλακέτα (board defconfig, bootloader, δημιουργία εικόνας με διαμέρισμα συστήματος) και μέγιστη ομοιομορφία στην προσαρμογή του συστήματος αρχείων/δημιουργία εικόνας με δεδομένα. Λόγω αυτής της προετοιμασίας, η μεταφορά έγινε γρήγορα.

Συνιστάται ιδιαίτερα να διαβάσετε τα εισαγωγικά άρθρα:
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.
Μόλις ολοκληρωθεί η κατασκευή, όλα τα αποτελέσματα της κατασκευής θα βρίσκονται στον κατάλογο εξόδου/εικόνων:

[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 (το οποίο κάνει όλη τη δουλειά)

################################################################################
#
# 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 monotonic timer. Έτσι, το 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

Υποστηριζόμενες σανίδες

Η πλακέτα Asus tinker είναι η κύρια πλακέτα στην οποία πρέπει να λειτουργούν τα πάντα. Επιλέχθηκε ως φθηνό και πολύ ισχυρό.

Το 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:

  • Ανοίξτε την ενότητα Διαμόρφωση → Κεντρικοί υπολογιστές
  • Κάντε κλικ στο Items στη γραμμή του διακομιστή μας zabbix
  • Κάντε κλικ στο Δημιουργία αντικειμένου

Buildroot: Δημιουργία υλικολογισμικού πολλαπλών πλατφορμών με zabbix-server

Εισαγάγετε τα ακόλουθα δεδομένα:

  • όνομα - κατά την κρίση σας (για παράδειγμα, serverRoomTemp )
  • Τύπος - πράκτορας zabbix
  • Κλειδί - Ρόδος
  • Τύπος-αριθμητικός
  • Μονάδες - Γ
  • Περίοδος αποθήκευσης ιστορικού — περίοδος αποθήκευσης ιστορικού. έμεινε 10 μέρες
  • Περίοδος αποθήκευσης τάσης — περίοδος αποθήκευσης για τη δυναμική των αλλαγών. Έμειναν 30 ημέρες
  • Νέα εφαρμογή - διακομιστής θερμοκρασία δωματίου

Και πατήστε το κουμπί ΠΡΟΣΘΗΚΗ.
Buildroot: Δημιουργία υλικολογισμικού πολλαπλών πλατφορμών με zabbix-server

Διαχειριστείτε τις ρυθμίσεις μέσω της διεπαφής ιστού

Η διεπαφή ιστού είναι γραμμένη σε PHP. Υπάρχουν κύριες λειτουργίες:

  • προβολή της κατάστασης της συσκευής
  • αλλαγή των ρυθμίσεων δικτύου
    Buildroot: Δημιουργία υλικολογισμικού πολλαπλών πλατφορμών με zabbix-server
  • αλλαγή κωδικού πρόσβασης χρήστη
  • επιλογή ζώνης ώρας
  • δημιουργία αντιγράφων ασφαλείας / επαναφορά / επαναφορά εργοστασιακών ρυθμίσεων
  • δυνατότητα σύνδεσης εξωτερικής μονάδας δίσκου
  • Ενημέρωση συστήματος
    Buildroot: Δημιουργία υλικολογισμικού πολλαπλών πλατφορμών με zabbix-server

Η σύνδεση στη διεπαφή ιστού προστατεύεται με κωδικό πρόσβασης. Αρχική σελίδα - εγχειρίδιο.

Διεύθυνση διεπαφής 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 -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

Αυτή η εντολή θα ξεκινήσει ένα σύστημα με 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 έδειξε ότι αυτό το βήμα ήταν σωστό (μετά την ολοκλήρωση της εγκατάστασης, το σύστημα δεν ξεκινά). Ίσως κάνω κάτι λάθος 😉

Υλικά

https://buildroot.org/

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο