14.13. Exposition de mesures personnalisées pour les machines virtuelles
OpenShift Container Platform comprend une pile de surveillance préconfigurée, préinstallée et auto-actualisée qui assure la surveillance des composants de base de la plate-forme. Cette pile de surveillance est basée sur le système de surveillance Prometheus. Prometheus est une base de données de séries temporelles et un moteur d'évaluation de règles pour les métriques.
En plus d'utiliser la pile de surveillance d'OpenShift Container Platform, vous pouvez activer la surveillance pour des projets définis par l'utilisateur à l'aide de la CLI et demander des mesures personnalisées qui sont exposées pour les machines virtuelles par le biais du service node-exporter
.
14.13.1. Configuration du service d'exportation de nœuds
L'agent node-exporter est déployé sur chaque machine virtuelle du cluster à partir de laquelle vous souhaitez collecter des métriques. Configurez l'agent node-exporter en tant que service pour exposer les mesures et processus internes associés aux machines virtuelles.
Conditions préalables
-
Install the OpenShift Container Platform CLI
oc
. -
Connectez-vous au cluster en tant qu'utilisateur disposant des privilèges
cluster-admin
. -
Créez l'objet
cluster-monitoring-config
ConfigMap
dans le projetopenshift-monitoring
. -
Configurez l'objet
user-workload-monitoring-config
ConfigMap
dans le projetopenshift-user-workload-monitoring
en réglantenableUserWorkload
surtrue
.
Procédure
Créez le fichier YAML
Service
. Dans l'exemple suivant, le fichier s'appellenode-exporter-service.yaml
.kind: Service apiVersion: v1 metadata: name: node-exporter-service 1 namespace: dynamation 2 labels: servicetype: metrics 3 spec: ports: - name: exmet 4 protocol: TCP port: 9100 5 targetPort: 9100 6 type: ClusterIP selector: monitor: metrics 7
- 1
- Le service d'exportation de nœuds qui expose les métriques des machines virtuelles.
- 2
- L'espace de noms dans lequel le service est créé.
- 3
- L'étiquette du service. Le site
ServiceMonitor
utilise ce label pour faire correspondre ce service. - 4
- Le nom donné au port qui expose les métriques sur le port 9100 pour le service
ClusterIP
. - 5
- Le port cible utilisé par
node-exporter-service
pour écouter les demandes. - 6
- Le numéro de port TCP de la machine virtuelle configurée avec l'étiquette
monitor
. - 7
- L'étiquette utilisée pour faire correspondre les pods de la machine virtuelle. Dans cet exemple, tout module de machine virtuelle portant l'étiquette
monitor
et la valeurmetrics
sera pris en compte.
Créer le service node-exporter :
$ oc create -f node-exporter-service.yaml
14.13.2. Configuration d'une machine virtuelle avec le service d'exportation de nœuds
Téléchargez le fichier node-exporter
sur la machine virtuelle. Ensuite, créez un service systemd
qui exécute le service node-exporter lorsque la machine virtuelle démarre.
Conditions préalables
-
Les pods du composant sont en cours d'exécution dans le projet
openshift-user-workload-monitoring
. -
Attribuez le rôle
monitoring-edit
aux utilisateurs qui doivent surveiller ce projet défini par l'utilisateur.
Procédure
- Connectez-vous à la machine virtuelle.
Téléchargez le fichier
node-exporter
sur la machine virtuelle en utilisant le chemin d'accès au répertoire qui s'applique à la version du fichiernode-exporter
.$ wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
Extraire l'exécutable et le placer dans le répertoire
/usr/bin
.$ sudo tar xvf node_exporter-1.3.1.linux-amd64.tar.gz \ --directory /usr/bin --strip 1 "*/node_exporter"
Créez un fichier
node_exporter.service
dans le répertoire suivant :/etc/systemd/system
. Ce fichier de servicesystemd
exécute le service node-exporter lorsque la machine virtuelle redémarre.[Unit] Description=Prometheus Metrics Exporter After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=root ExecStart=/usr/bin/node_exporter [Install] WantedBy=multi-user.target
Activez et démarrez le service
systemd
.$ sudo systemctl enable node_exporter.service $ sudo systemctl start node_exporter.service
Vérification
Vérifiez que l'agent node-exporter rapporte les métriques de la machine virtuelle.
$ curl http://localhost:9100/metrics
Exemple de sortie
go_gc_duration_seconds{quantile="0"} 1.5244e-05 go_gc_duration_seconds{quantile="0.25"} 3.0449e-05 go_gc_duration_seconds{quantile="0.5"} 3.7913e-05
14.13.3. Création d'une étiquette de surveillance personnalisée pour les machines virtuelles
Pour permettre l'interrogation de plusieurs machines virtuelles à partir d'un seul service, ajoutez une étiquette personnalisée dans le fichier YAML de la machine virtuelle.
Conditions préalables
-
Install the OpenShift Container Platform CLI
oc
. -
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin
. - Accès à la console web pour arrêter et redémarrer une machine virtuelle.
Procédure
Modifiez la spécification
template
de votre fichier de configuration de la machine virtuelle. Dans cet exemple, l'étiquettemonitor
a la valeurmetrics
.spec: template: metadata: labels: monitor: metrics
-
Arrêtez et redémarrez la machine virtuelle pour créer un nouveau pod avec le nom d'étiquette donné à l'étiquette
monitor
.
14.13.3.1. Interroger le service node-exporter pour obtenir des métriques
Les mesures sont exposées pour les machines virtuelles par le biais d'un point de terminaison de service HTTP sous le nom canonique /metrics
. Lorsque vous demandez des métriques, Prometheus récupère directement les métriques à partir du point de terminaison des métriques exposé par les machines virtuelles et présente ces métriques pour affichage.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur disposant des privilèges
cluster-admin
ou du rôlemonitoring-edit
. - Vous avez activé la surveillance du projet défini par l'utilisateur en configurant le service node-exporter.
Procédure
Obtenir le point de terminaison du service HTTP en spécifiant l'espace de noms du service :
$ oc get service -n <namespace> <node-exporter-service>
Pour obtenir la liste de toutes les mesures disponibles pour le service node-exporter, interrogez la ressource
metrics
.$ curl http://<172.30.226.162:9100>/metrics | grep -vE "^#|^$"
Exemple de sortie
node_arp_entries{device="eth0"} 1 node_boot_time_seconds 1.643153218e+09 node_context_switches_total 4.4938158e+07 node_cooling_device_cur_state{name="0",type="Processor"} 0 node_cooling_device_max_state{name="0",type="Processor"} 0 node_cpu_guest_seconds_total{cpu="0",mode="nice"} 0 node_cpu_guest_seconds_total{cpu="0",mode="user"} 0 node_cpu_seconds_total{cpu="0",mode="idle"} 1.10586485e+06 node_cpu_seconds_total{cpu="0",mode="iowait"} 37.61 node_cpu_seconds_total{cpu="0",mode="irq"} 233.91 node_cpu_seconds_total{cpu="0",mode="nice"} 551.47 node_cpu_seconds_total{cpu="0",mode="softirq"} 87.3 node_cpu_seconds_total{cpu="0",mode="steal"} 86.12 node_cpu_seconds_total{cpu="0",mode="system"} 464.15 node_cpu_seconds_total{cpu="0",mode="user"} 1075.2 node_disk_discard_time_seconds_total{device="vda"} 0 node_disk_discard_time_seconds_total{device="vdb"} 0 node_disk_discarded_sectors_total{device="vda"} 0 node_disk_discarded_sectors_total{device="vdb"} 0 node_disk_discards_completed_total{device="vda"} 0 node_disk_discards_completed_total{device="vdb"} 0 node_disk_discards_merged_total{device="vda"} 0 node_disk_discards_merged_total{device="vdb"} 0 node_disk_info{device="vda",major="252",minor="0"} 1 node_disk_info{device="vdb",major="252",minor="16"} 1 node_disk_io_now{device="vda"} 0 node_disk_io_now{device="vdb"} 0 node_disk_io_time_seconds_total{device="vda"} 174 node_disk_io_time_seconds_total{device="vdb"} 0.054 node_disk_io_time_weighted_seconds_total{device="vda"} 259.79200000000003 node_disk_io_time_weighted_seconds_total{device="vdb"} 0.039 node_disk_read_bytes_total{device="vda"} 3.71867136e+08 node_disk_read_bytes_total{device="vdb"} 366592 node_disk_read_time_seconds_total{device="vda"} 19.128 node_disk_read_time_seconds_total{device="vdb"} 0.039 node_disk_reads_completed_total{device="vda"} 5619 node_disk_reads_completed_total{device="vdb"} 96 node_disk_reads_merged_total{device="vda"} 5 node_disk_reads_merged_total{device="vdb"} 0 node_disk_write_time_seconds_total{device="vda"} 240.66400000000002 node_disk_write_time_seconds_total{device="vdb"} 0 node_disk_writes_completed_total{device="vda"} 71584 node_disk_writes_completed_total{device="vdb"} 0 node_disk_writes_merged_total{device="vda"} 19761 node_disk_writes_merged_total{device="vdb"} 0 node_disk_written_bytes_total{device="vda"} 2.007924224e+09 node_disk_written_bytes_total{device="vdb"} 0
14.13.4. Création d'une ressource ServiceMonitor pour le service d'exportation de nœuds
Vous pouvez utiliser une bibliothèque client Prometheus et récupérer des métriques à partir du point de terminaison /metrics
pour accéder aux métriques exposées par le service node-exporter et les afficher. Utilisez une définition de ressource personnalisée (CRD) ServiceMonitor
pour surveiller le service d'exportation de nœuds.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur disposant des privilèges
cluster-admin
ou du rôlemonitoring-edit
. - Vous avez activé la surveillance du projet défini par l'utilisateur en configurant le service node-exporter.
Procédure
Créez un fichier YAML pour la configuration de la ressource
ServiceMonitor
. Dans cet exemple, le moniteur de services correspond à tout service portant l'étiquettemetrics
et interroge le portexmet
toutes les 30 secondes.apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: k8s-app: node-exporter-metrics-monitor name: node-exporter-metrics-monitor 1 namespace: dynamation 2 spec: endpoints: - interval: 30s 3 port: exmet 4 scheme: http selector: matchLabels: servicetype: metrics
Créez la configuration
ServiceMonitor
pour le service node-exporter.$ oc create -f node-exporter-metrics-monitor.yaml
14.13.4.1. Accès au service d'exportateur de nœuds en dehors du cluster
Vous pouvez accéder au service node-exporter en dehors du cluster et visualiser les métriques exposées.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur disposant des privilèges
cluster-admin
ou du rôlemonitoring-edit
. - Vous avez activé la surveillance du projet défini par l'utilisateur en configurant le service node-exporter.
Procédure
Exposer le service node-exporter.
$ oc expose service -n <namespace> <node_exporter_service_name>
Obtenir le FQDN (Fully Qualified Domain Name) pour l'itinéraire.
$ oc get route -o=custom-columns=NAME:.metadata.name,DNS:.spec.host
Exemple de sortie
NAME DNS node-exporter-service node-exporter-service-dynamation.apps.cluster.example.org
Utilisez la commande
curl
pour afficher les mesures du service node-exporter.$ curl -s http://node-exporter-service-dynamation.apps.cluster.example.org/metrics
Exemple de sortie
go_gc_duration_seconds{quantile="0"} 1.5382e-05 go_gc_duration_seconds{quantile="0.25"} 3.1163e-05 go_gc_duration_seconds{quantile="0.5"} 3.8546e-05 go_gc_duration_seconds{quantile="0.75"} 4.9139e-05 go_gc_duration_seconds{quantile="1"} 0.000189423
14.13.5. Ressources supplémentaires
- Configuration de la pile de surveillance
- Permettre le suivi de projets définis par l'utilisateur
- Gestion des indicateurs
- Examen des tableaux de bord de suivi
- Contrôler l'état de santé des applications à l'aide de bilans de santé
- Créer et utiliser des cartes de configuration
- Contrôler les états des machines virtuelles