5.13. Configuration de la surveillance intégrée avec Prometheus
Ce guide décrit la prise en charge de la surveillance intégrée fournie par le SDK Operator à l'aide de l'opérateur Prometheus et détaille l'utilisation pour les auteurs d'opérateurs basés sur Go et Ansible.
5.13.1. Assistance à l'opérateur Prometheus Copier lienLien copié sur presse-papiers!
Prometheus est une boîte à outils open-source de surveillance des systèmes et d'alerte. L'opérateur Prometheus crée, configure et gère des clusters Prometheus fonctionnant sur des clusters basés sur Kubernetes, tels que OpenShift Container Platform.
Des fonctions d'aide existent par défaut dans le SDK de l'opérateur pour configurer automatiquement les métriques dans tout opérateur Go généré pour une utilisation sur les clusters où l'opérateur Prometheus est déployé.
5.13.2. Exposition de mesures personnalisées pour les opérateurs basés sur Go Copier lienLien copié sur presse-papiers!
En tant qu'auteur d'un opérateur, vous pouvez publier des mesures personnalisées en utilisant le registre Prometheus global de la bibliothèque controller-runtime/pkg/metrics.
Conditions préalables
- Opérateur basé sur Go généré à l'aide de l'Operator SDK
- Prometheus Operator, qui est déployé par défaut sur les clusters d'OpenShift Container Platform
Procédure
Dans votre projet Operator SDK, décompressez la ligne suivante dans le fichier
config/default/kustomization.yaml:../prometheusCréez une classe de contrôleur personnalisée pour publier des mesures supplémentaires à partir de l'opérateur. L'exemple suivant déclare les collecteurs
widgetsetwidgetFailuresen tant que variables globales, puis les enregistre avec la fonctioninit()dans le package du contrôleur :Exemple 5.18.
controllers/memcached_controller_test_metrics.gofichierpackage controllers import ( "github.com/prometheus/client_golang/prometheus" "sigs.k8s.io/controller-runtime/pkg/metrics" ) var ( widgets = prometheus.NewCounter( prometheus.CounterOpts{ Name: "widgets_total", Help: "Number of widgets processed", }, ) widgetFailures = prometheus.NewCounter( prometheus.CounterOpts{ Name: "widget_failures_total", Help: "Number of failed widgets", }, ) ) func init() { // Register custom metrics with the global prometheus registry metrics.Registry.MustRegister(widgets, widgetFailures) }Record to these collectors from any part of the reconcile loop in the
maincontroller class, which determines the business logic for the metric :Exemple 5.19.
controllers/memcached_controller.gofichierfunc (r *MemcachedReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { ... ... // Add metrics widgets.Inc() widgetFailures.Inc() return ctrl.Result{}, nil }Construire et pousser l'opérateur :
$ make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>Déployer l'opérateur :
$ make deploy IMG=<registry>/<user>/<image_name>:<tag>Créer des définitions de rôle et de liaison de rôle pour permettre au moniteur de service de l'opérateur d'être scanné par l'instance Prometheus du cluster OpenShift Container Platform.
Les rôles doivent être attribués de manière à ce que les comptes de service disposent des autorisations nécessaires pour analyser les métriques de l'espace de noms :
Exemple 5.20.
config/prometheus/role.yamlrôleapiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-k8s-role namespace: <operator_namespace> rules: - apiGroups: - "" resources: - endpoints - pods - services - nodes - secrets verbs: - get - list - watchExemple 5.21.
config/prometheus/rolebinding.yamll'obligation de rôleapiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus-k8s-rolebinding namespace: memcached-operator-system roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus-k8s-role subjects: - kind: ServiceAccount name: prometheus-k8s namespace: openshift-monitoringAppliquer les rôles et les liaisons de rôles pour l'opérateur déployé :
$ oc apply -f config/prometheus/role.yaml$ oc apply -f config/prometheus/rolebinding.yamlDéfinissez les étiquettes pour l'espace de noms que vous souhaitez analyser, ce qui active la surveillance du cluster OpenShift pour cet espace de noms :
$ oc label namespace <operator_namespace> openshift.io/cluster-monitoring="true"
Vérification
-
Interroger et visualiser les métriques dans la console web d'OpenShift Container Platform. Vous pouvez utiliser les noms définis dans la classe de contrôleur personnalisé, par exemple
widgets_totaletwidget_failures_total.
5.13.3. Exposer des métriques personnalisées pour les opérateurs basés sur Ansible Copier lienLien copié sur presse-papiers!
En tant qu'auteur d'opérateurs créant des opérateurs basés sur Ansible, vous pouvez utiliser le module osdk_metrics de l'Operator SDK pour exposer des métriques personnalisées d'opérateurs et d'opérandes, émettre des événements et prendre en charge la journalisation.
Conditions préalables
- Opérateur basé sur Ansible généré à l'aide de l'Operator SDK
- Prometheus Operator, qui est déployé par défaut sur les clusters d'OpenShift Container Platform
Procédure
Générer un opérateur basé sur Ansible. Cet exemple utilise un domaine
testmetrics.com:$ operator-sdk init \ --plugins=ansible \ --domain=testmetrics.comCréez une API
metrics. Cet exemple utilise unkindnomméTestmetrics:$ operator-sdk create api \ --group metrics \ --version v1 \ --kind Testmetrics \ --generate-roleModifiez le fichier
roles/testmetrics/tasks/main.ymlet utilisez le moduleosdk_metricspour créer des mesures personnalisées pour votre projet Operator :Exemple 5.22. Exemple de fichier
roles/testmetrics/tasks/main.yml--- # tasks file for Memcached - name: start k8sstatus k8s: definition: kind: Deployment apiVersion: apps/v1 metadata: name: '{{ ansible_operator_meta.name }}-memcached' namespace: '{{ ansible_operator_meta.namespace }}' spec: replicas: "{{size}}" selector: matchLabels: app: memcached template: metadata: labels: app: memcached spec: containers: - name: memcached command: - memcached - -m=64 - -o - modern - -v image: "docker.io/memcached:1.4.36-alpine" ports: - containerPort: 11211 - osdk_metric: name: my_thing_counter description: This metric counts things counter: {} - osdk_metric: name: my_counter_metric description: Add 3.14 to the counter counter: increment: yes - osdk_metric: name: my_gauge_metric description: Create my gauge and set it to 2. gauge: set: 2 - osdk_metric: name: my_histogram_metric description: Observe my histogram histogram: observe: 2 - osdk_metric: name: my_summary_metric description: Observe my summary summary: observe: 2
Vérification
Exécutez votre opérateur sur un cluster. Par exemple, pour utiliser la méthode "run as a deployment" :
Construire l'image de l'opérateur et l'envoyer dans un registre :
$ make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>Installer l'opérateur sur un cluster :
$ make installDéployer l'opérateur :
$ make deploy IMG=<registry>/<user>/<image_name>:<tag>
Créer une ressource personnalisée (CR)
Testmetrics:Définir les spécifications du CR :
Exemple 5.23. Exemple de fichier
config/samples/metrics_v1_testmetrics.yamlapiVersion: metrics.testmetrics.com/v1 kind: Testmetrics metadata: name: testmetrics-sample spec: size: 1Créer l'objet :
$ oc create -f config/samples/metrics_v1_testmetrics.yaml
Obtenez les détails de la capsule :
$ oc get podsExemple de sortie
NAME READY STATUS RESTARTS AGE ansiblemetrics-controller-manager-<id> 2/2 Running 0 149m testmetrics-sample-memcached-<id> 1/1 Running 0 147mObtenir les détails du point de terminaison :
$ oc get epExemple de sortie
NAME ENDPOINTS AGE ansiblemetrics-controller-manager-metrics-service 10.129.2.70:8443 150mDemander un jeton de mesure personnalisé :
$ token=`oc create token prometheus-k8s -n openshift-monitoring`Vérifier les valeurs des métriques :
Vérifier la valeur de
my_counter_metric:$ oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza tion: Bearer $token" 'https://10.129.2.70:8443/metrics' | grep my_counterExemple de sortie
HELP my_counter_metric Add 3.14 to the counter TYPE my_counter_metric counter my_counter_metric 2Vérifier la valeur de
my_gauge_metric:$ oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza tion: Bearer $token" 'https://10.129.2.70:8443/metrics' | grep gaugeExemple de sortie
HELP my_gauge_metric Create my gauge and set it to 2.Vérifiez les valeurs
my_histogram_metricetmy_summary_metric:$ oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza tion: Bearer $token" 'https://10.129.2.70:8443/metrics' | grep ObserveExemple de sortie
HELP my_histogram_metric Observe my histogram HELP my_summary_metric Observe my summary