6.2. Configuration de la collection de métriques pour les projets définis par l’utilisateur
Dans un projet défini par l’utilisateur, vous pouvez créer une ressource ServiceMonitor pour gratter des métriques à partir d’un point de terminaison de service. Cela suppose que votre application utilise une bibliothèque cliente Prometheus pour exposer les métriques au nom canonique /metrics.
Cette section décrit comment déployer un exemple de service dans un projet défini par l’utilisateur, puis créer une ressource ServiceMonitor qui définit la façon dont ce service doit être surveillé.
6.2.1. Déploiement d’un service d’échantillonnage Copier lienLien copié sur presse-papiers!
Afin de tester la surveillance d’un service dans un projet défini par l’utilisateur, vous pouvez déployer un service d’échantillonnage.
Conditions préalables
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle cluster-admin ou en tant qu’utilisateur avec des autorisations administratives pour l’espace de noms.
Procédure
- Créez un fichier YAML pour la configuration du service. Dans cet exemple, il est appelé promesseheus-example-app.yaml.
Ajoutez les détails de configuration de déploiement et de service suivants au fichier:
apiVersion: v1 kind: Namespace metadata: name: ns1 --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: prometheus-example-app name: prometheus-example-app namespace: ns1 spec: replicas: 1 selector: matchLabels: app: prometheus-example-app template: metadata: labels: app: prometheus-example-app spec: containers: - image: ghcr.io/rhobs/prometheus-example-app:0.4.2 imagePullPolicy: IfNotPresent name: prometheus-example-app --- apiVersion: v1 kind: Service metadata: labels: app: prometheus-example-app name: prometheus-example-app namespace: ns1 spec: ports: - port: 8080 protocol: TCP targetPort: 8080 name: web selector: app: prometheus-example-app type: ClusterIPCette configuration déploie un service nommé prometheus-example-app dans le projet ns1 défini par l’utilisateur. Ce service expose la métrique de version personnalisée.
Appliquer la configuration au cluster:
$ oc apply -f prometheus-example-app.yamlIl faut du temps pour déployer le service.
Il est possible de vérifier que le pod est en cours d’exécution:
$ oc -n ns1 get podExemple de sortie
NAME READY STATUS RESTARTS AGE prometheus-example-app-7857545cb7-sbgwq 1/1 Running 0 81m
6.2.2. Indiquer comment un service est surveillé Copier lienLien copié sur presse-papiers!
Afin d’utiliser les métriques exposées par votre service, vous devez configurer la surveillance OpenShift Dedicated pour gratter les métriques du point de terminaison /metrics. Il est possible de le faire à l’aide d’une définition de ressource personnalisée (CRD) de ServiceMonitor qui spécifie la façon dont un service doit être surveillé, ou un CRD PodMonitor qui spécifie comment un pod doit être surveillé. Le premier nécessite un objet Service, tandis que le second ne le fait pas, permettant à Prometheus de gratter directement les métriques à partir du point de terminaison métrique exposé par un pod.
Cette procédure vous montre comment créer une ressource ServiceMonitor pour un service dans un projet défini par l’utilisateur.
Conditions préalables
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle dédié-admin ou le rôle de suivi-édition.
Dans cet exemple, vous avez déployé le service d’échantillons d’applications de promesseheus-example dans le projet ns1.
NoteLe service d’échantillon d’applications prometheus-example ne prend pas en charge l’authentification TLS.
Procédure
- Créez un nouveau fichier de configuration YAML nommé example-app-service-monitor.yaml.
Ajouter une ressource ServiceMonitor au fichier YAML. L’exemple suivant crée un moniteur de service nommé prometheus-example-monitor pour gratter les métriques exposées par le service prometheus-example-app dans l’espace de noms ns1:
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: prometheus-example-monitor namespace: ns11 spec: endpoints: - interval: 30s port: web2 scheme: http selector:3 matchLabels: app: prometheus-example-appNoteLa ressource ServiceMonitor dans un espace de noms défini par l’utilisateur ne peut découvrir que des services dans le même espace de noms. Autrement dit, le champ namespaceSelector de la ressource ServiceMonitor est toujours ignoré.
Appliquer la configuration au cluster:
$ oc apply -f example-app-service-monitor.yamlIl faut du temps pour déployer la ressource ServiceMonitor.
Assurez-vous que la ressource ServiceMonitor est en cours d’exécution:
$ oc -n <namespace> get servicemonitorExemple de sortie
NAME AGE prometheus-example-monitor 81m
6.2.3. Exemples de paramètres d’authentification du point de terminaison du service Copier lienLien copié sur presse-papiers!
En utilisant les définitions de ressources personnalisées (CRD) de ServiceMonitor et PodMonitor, vous pouvez configurer l’authentification des points de terminaison de service pour la surveillance des projets définis par l’utilisateur.
Les échantillons suivants montrent différents paramètres d’authentification pour une ressource ServiceMonitor. Chaque échantillon montre comment configurer un objet secret correspondant qui contient des informations d’authentification et d’autres paramètres pertinents.
6.2.3.1. Exemple d’authentification YAML avec un jeton porteur Copier lienLien copié sur presse-papiers!
L’échantillon suivant montre les paramètres de jetons au porteur pour un objet secret nommé example-porter-auth dans l’espace de noms ns1:
Exemple de jeton de porteur secret
apiVersion: v1
kind: Secret
metadata:
name: example-bearer-auth
namespace: ns1
stringData:
token: <authentication_token>
- 1
- Indiquez un jeton d’authentification.
L’échantillon suivant montre les paramètres d’authentification de jetons au porteur pour un CRD ServiceMonitor. L’exemple utilise un objet secret nommé example-porter-auth:
Exemple de paramètres d’authentification de jetons au porteur
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: prometheus-example-monitor
namespace: ns1
spec:
endpoints:
- authorization:
credentials:
key: token
name: example-bearer-auth
port: web
selector:
matchLabels:
app: prometheus-example-app
Il ne faut pas utiliser BearerTokenFile pour configurer le jeton porteur. Lorsque vous utilisez la configuration BearerTokenFile, la ressource ServiceMonitor est rejetée.
6.2.3.2. Échantillon YAML pour l’authentification de base Copier lienLien copié sur presse-papiers!
L’échantillon suivant montre les paramètres d’authentification de base d’un objet secret nommé example-basic-auth dans l’espace de noms ns1:
Exemple de secret d’authentification de base
apiVersion: v1
kind: Secret
metadata:
name: example-basic-auth
namespace: ns1
stringData:
user: <basic_username>
password: <basic_password>
L’échantillon suivant montre les paramètres d’authentification de base pour un CRD ServiceMonitor. L’exemple utilise un objet secret nommé example-basic-auth:
Exemple de paramètres d’authentification de base
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: prometheus-example-monitor
namespace: ns1
spec:
endpoints:
- basicAuth:
username:
key: user
name: example-basic-auth
password:
key: password
name: example-basic-auth
port: web
selector:
matchLabels:
app: prometheus-example-app
6.2.3.3. Exemple d’authentification YAML avec OAuth 2.0 Copier lienLien copié sur presse-papiers!
L’échantillon suivant montre les paramètres OAuth 2.0 pour un objet secret nommé example-oauth2 dans l’espace de noms ns1:
Exemple OAuth 2.0 secret
apiVersion: v1
kind: Secret
metadata:
name: example-oauth2
namespace: ns1
stringData:
id: <oauth2_id>
secret: <oauth2_secret>
L’échantillon suivant montre les paramètres d’authentification OAuth 2.0 pour un CRD ServiceMonitor. L’exemple utilise un objet secret nommé example-oauth2:
Exemple de paramètres d’authentification OAuth 2.0
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: prometheus-example-monitor
namespace: ns1
spec:
endpoints:
- oauth2:
clientId:
secret:
key: id
name: example-oauth2
clientSecret:
key: secret
name: example-oauth2
tokenUrl: https://example.com/oauth2/token
port: web
selector:
matchLabels:
app: prometheus-example-app
- 1
- La clé qui contient l’identifiant OAuth 2.0 dans l’objet secret spécifié.
- 2 4
- Le nom de l’objet secret qui contient les informations d’identification OAuth 2.0.
- 3
- La clé qui contient le secret OAuth 2.0 dans l’objet secret spécifié.
- 5
- L’URL utilisée pour récupérer un jeton avec le clientId et clientSecret spécifiés.