
Historique des tâches
Les petites entreprises, d'une part, ont besoin d'une surveillance de haute qualité de leur infrastructure (en particulier à la lumière d'une virtualisation généralisée), d'autre part, il leur est financièrement difficile d'acheter de nouveaux équipements. En outre, il y a souvent des problèmes avec le serveur / matériel: il y a souvent 1 à 3 serveurs tour à côté des postes de travail des utilisateurs ou dans une petite niche / placard.
Il est plus facile d'utiliser un assemblage (distribution) prêt à l'emploi, qui suffit pour télécharger sur une carte microSD et l'insérer dans un ordinateur monocarte commun (beaglebone, raspberry pi et orange pi, familles de cartes bricolage asus). De plus, un tel équipement est peu coûteux et peut être installé n'importe où.
Énoncé du problème
À bien des égards, le projet s'est développé comme une sorte de travail de laboratoire avec la possibilité d'appliquer les résultats.
Zabbix a été choisi comme système de surveillance, car il s'agit d'un système puissant, gratuit et bien documenté.
La question s'est fortement posée avec la plate-forme matérielle. La mise sous surveillance d'une machine distincte n'est pas non plus une bonne solution - soit il est coûteux d'acheter de nouveaux équipements, soit de chercher de vieux équipements + dans les petites entreprises, il y a des problèmes fréquents avec le serveur / matériel.
L'utilisation du système de construction de buildroot vous permet de créer des solutions spécialisées qui peuvent être exploitées par du personnel ayant une connaissance minimale de la famille Linux d'OS. Ce système est convivial pour les débutants, mais en même temps, il offre de nombreuses possibilités de personnalisation entre les mains d'un développeur expérimenté. Il est parfait pour résoudre la tâche de surveillance non coûteuse, mais complète de l'infrastructure informatique, qui est peu exigeante dans la formation de son personnel d'exploitation.
Étapes de la solution
Il a été décidé de créer initialement un micrologiciel pour que x86_64 s'exécute dans qemu, car il s'agit d'une solution pratique et rapide pour le débogage. Puis portez sur un bras d'ordinateur à carte unique (j'ai aimé la carte de bricolage asus).
Le buildroot a été choisi comme système de build. Initialement, il manquait le paquet zabbix, donc j'ai dû le porter. Il y avait des problèmes avec les paramètres régionaux russes, qui ont été résolus en appliquant les correctifs appropriés (remarque: dans les nouvelles versions de buildroot, ces correctifs ne sont plus nécessaires).
Le portage du package zabbix lui-même sera décrit dans un article séparé.
Étant donné que tout devrait fonctionner comme un micrologiciel (image système inchangée + fichiers de configuration / base de données récupérables), il était nécessaire d'écrire vos cibles, services et temporisateurs systemd (cible, service, minuterie).
Il a été décidé de diviser le média en 2 sections - une section avec des fichiers système et une section avec des configurations mutables et des fichiers de base de données zabbix.
Il s'est avéré un peu plus difficile de résoudre les problèmes liés à la base de données. Je ne voulais pas le placer directement sur les médias. Dans le même temps, la taille de la base peut atteindre une taille dépassant la taille d'un éventuel ramdisk. Par conséquent, une solution de compromis a été choisie: la base de données est située sur la deuxième section de la carte SD (les cartes SLC modernes ont jusqu'à 30000 cycles d'écriture), mais il existe un paramètre qui vous permet d'utiliser des médias externes (par exemple, usb-hdd).
La surveillance de la température a été mise en œuvre via le dispositif RODOS-5. Bien sûr, vous pouvez utiliser le dallas 1820 directement, mais il était plus rapide et plus facile de brancher un port USB.
Grub2 a été choisi comme chargeur de démarrage pour x86_64. Il m'a fallu écrire une configuration minimale à exécuter.
Après le débogage sur qemu, le portage sur la carte de bricolage asus a été effectué. Dans la structure de ma superposition, une multiplateforme a été initialement mise en place - la sélection de configurations spécifiques à chaque carte (cartes defconfig, bootloader, génération d'image avec une partition système) et l'uniformité maximale dans le réglage du système de fichiers / création d'une image avec des données. En raison de cette préparation, le portage a été rapide.
Il est fortement recommandé de lire les articles d'introduction:
https://habr.com/en/post/448638/
https://habr.com/en/post/449348/
Comment assembler
Le projet est stocké sur github
Après le clonage du référentiel, la structure de fichiers suivante est obtenue:
[alexey@comp monitor]$ ls -1 buildroot-2019.05.tar.gz overlay README.md run_me.sh
buildroot-2019.05.tar.gz - archive de buildroot propre
la superposition est mon répertoire avec external-tree. Il contient tout ce dont vous avez besoin pour construire un firmware en utilisant buildroot
README.md - description du projet et conseils en anglais.
run_me.sh est un script qui prépare le système de construction. Développe la racine de l'archive, y attache une superposition (via le mécanisme d'arborescence externe) et vous permet de sélectionner la carte cible pour l'assemblage
[0] my_asus_tinker_defconfig [1] my_beaglebone_defconfig [2] x86_64_defconfig Select defconfig, press A for abort. Default [0]
Après cela, allez simplement dans le répertoire buildroot-2019.05 et exécutez la commande make.
Une fois l'assemblage terminé, tous les résultats de l'assemblage seront dans le répertoire 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
Fichiers nécessaires:
- sdcard.img - l'image du support pour écrire sur la carte sd (via dd ou rufus sous wibdows).
- qemu.qcow2 - image multimédia à exécuter dans qemu.
- external.qcow2 - image de support externe pour la base de données
- monitor-0.9-beta.tar.gz - archive pour mise à jour via l'interface web
Génération manuelle
Cela ne vaut pas la peine d’écrire plusieurs fois les mêmes instructions. Et il est plus logique d'écrire une fois dans le démarque, puis de le convertir en PDF pour le téléchargement et en HTML pour l'interface Web. C'est possible grâce au package pandoc.
Dans le même temps, vous devez générer tous ces fichiers avant que l'image système ne soit assemblée, ces scripts post-construction sont déjà inutiles. Par conséquent, la génération se fait sous forme de package de manuels. Vous pouvez le voir dans la superposition / package / manuels.
Le fichier manuals.mk (qui fait tout le travail)
systemd
Le monde de Linux évolue activement vers systemd, et je devais le faire aussi.
Des belles innovations - la présence de minuteries. En général, un article séparé est écrit à leur sujet (et pas seulement à leur sujet), mais je vais vous en parler brièvement.
Certaines actions doivent être effectuées périodiquement. J'avais besoin d'exécuter logrotate pour effacer les journaux lighttpd et php-fpm. Il serait plus courant d'écrire des commandes en cron, mais j'ai décidé d'utiliser la minuterie systemot monotone. Ainsi, logrotate démarre à un intervalle de temps strict.
Bien sûr, il y a la possibilité de créer des minuteries qui fonctionnent à certaines dates, mais je n'en avais pas besoin.
Exemple de minuterie:
[Minuterie]
OnBootSec = 1min
OnUnitActiveSec = 1min
[Installer]
WantedBy = timers.target
- , : ```bash [Unit] Description=RODOS temp daemon [Service] ExecStart=/usr/bin/rodos.sh
Cartes prises en charge
Asus tinker board - la carte principale sur laquelle tout devrait fonctionner. Sélectionné comme bon marché et très puissant.
Beaglebone black est la première planche sur laquelle le travail a été testé (lors de la sélection d'une planche plus puissante).
Qemu x86_64 - utilisé pour développer le débogage.
Comment ça marche
Au démarrage, une récupération des paramètres en deux étapes se produit:
- exécuter le script settings_restore (via le service). Il restaure les paramètres système de base - fuseau horaire, paramètres régionaux, paramètres réseau, etc.
- exécution du script prepare (via le service) - ici zabbix est préparé, la base de données, IP est affichée dans la console.
Au premier démarrage, la taille de la deuxième section de la carte SD est déterminée. S'il reste de l'espace non alloué - le média est repartitionné, la section de données occupe tout l'espace libre. Ceci est fait afin de réduire la taille de l'image d'installation (sdcard.img). De plus, le répertoire de travail postgresql est créé à ce stade. C'est pourquoi le premier lancement avec un nouveau support sera plus long que les suivants.
Lorsque vous connectez un lecteur externe, au moment du démarrage, il recherche un lecteur libre et le formate en ext4 avec l'étiquette externe.
Attention! Lors de la connexion d'un disque externe (ainsi que sa déconnexion ou son remplacement), vous devez sauvegarder et restaurer les paramètres!
Pour surveiller la température, on utilise l'appareil RODOS 5. Le fabricant donne les sources de son utilité pour travailler avec l'appareil. Lorsque le système est allumé, la minuterie rodos démarre, ce qui lance cet utilitaire une fois par minute. La température actuelle est écrite dans le fichier / tmp / rodos_current_temp, après quoi zabbix peut surveiller ce fichier en tant que capteur.
Le support de stockage pour la configuration est monté dans le répertoire / data.
Lorsque vous démarrez le système et le préparez pour le travail, un message apparaît dans la console:
System starting, please wait
Une fois les travaux préparatoires terminés, il changera pour afficher l'adresse IP:
current ip 192.168.1.32 Ready to work
Configuration de zabbix pour la surveillance de la température
Pour surveiller la température, il suffit de suivre 2 étapes:
- connecter l'appareil RODOS au port usb
- créer un élément de données dans zabbix
Ouvrez l'interface Web zabbix:
- Ouvrez la section Configuration → Hôtes
- Cliquez sur Articles dans la ligne de notre serveur zabbix
- Cliquez sur Créer un élément

Saisissez les données suivantes:
- nom - à votre discrétion (par exemple, serverRoomTemp)
- Type - agent zabbix
- Clé - rodos
- Type - numérique
- Unités - C
- Période de stockage de l'histoire - la durée de l'histoire. laissé 10 jours
- Période de stockage de tendance - période de stockage de la dynamique des changements. Gauche 30 jours
- Nouvelle application - serveur Room Temp
Et appuyez sur le bouton ADD.

Gestion basée sur le Web
L'interface web est écrite en php. Il y a des fonctions principales:
- afficher l'état de l'appareil
- modifier les paramètres réseau

- changer le mot de passe utilisateur
- sélection du fuseau horaire
- sauvegarde / restauration / réinitialisation aux paramètres d'usine
- la possibilité de connecter un disque externe
- Mise à jour du système

La connexion à l'interface Web est protégée par mot de passe. Page de démarrage - manuel.
Adresse de l'interface Zabbix: \ $ {ip / dns} / zabbix
Adresse de l'interface de gestion: \ $ {ip / dns} / manage

Courir à 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 -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
Cette commande démarrera un système avec 4 cœurs, 2048 RAM activés par KVM, une carte réseau sur bridge0 et deux disques: pour le système et externe pour postgresql.
Les images peuvent être converties et exécutées dans Virtualbox:
qemu-img convert -f qcow2 qemu.qcow2 -O vdi qcow2.vdi qemu-img convert -f qcow2 external.qcow2 -O vdi external.vdi
Importez-les ensuite dans virtualbox et connectez-vous via sata.
Conclusion
Dans le processus, je me suis intéressé à rendre un produit prêt à l'emploi - avec une interface pas très agréable (je n'aime pas les écrire), mais fonctionnant et facile à configurer.
La dernière tentative d'installation de zabbix-appliance dans KVM a montré l'exactitude de cette étape (le système ne démarre pas une fois l'installation terminée). Peut-être que je fais quelque chose de mal;)
Matériaux
https://buildroot.org/