2.12. Contrôler l'impact des attributs de métriques non liés dans les projets définis par l'utilisateur
Les développeurs peuvent créer des étiquettes pour définir les attributs des métriques sous la forme de paires clé-valeur. Le nombre de paires clé-valeur potentielles correspond au nombre de valeurs possibles pour un attribut. Un attribut dont le nombre de valeurs potentielles est illimité est appelé attribut non lié. Par exemple, un attribut customer_id
est non consolidé car il possède un nombre infini de valeurs possibles.
Chaque paire clé-valeur attribuée possède une série temporelle unique. L'utilisation de nombreux attributs non liés dans les étiquettes peut créer un nombre exponentiel de séries temporelles, ce qui peut avoir un impact sur les performances de Prometheus et l'espace disque disponible.
Les administrateurs de cluster peuvent utiliser les mesures suivantes pour contrôler l'impact des attributs de métriques non liés dans les projets définis par l'utilisateur :
- Limiter le nombre d'échantillons qui peuvent être acceptés pour chaque analyse de la cible dans les projets définis par l'utilisateur
- Limiter le nombre d'étiquettes scannées, la longueur des noms d'étiquettes et la longueur des valeurs d'étiquettes.
- Créer des alertes qui se déclenchent lorsqu'un seuil d'échantillonnage est atteint ou lorsque la cible ne peut pas être scrappée
Pour éviter les problèmes liés à l'ajout de nombreux attributs non liés, limitez le nombre d'échantillons, de noms d'étiquettes et d'attributs non liés que vous définissez pour les métriques. Réduisez également le nombre de combinaisons potentielles de paires clé-valeur en utilisant des attributs liés à un ensemble limité de valeurs possibles.
2.12.1. Définition des limites d'échantillons et d'étiquettes pour les projets définis par l'utilisateur
Vous pouvez limiter le nombre d'échantillons qui peuvent être acceptés par balayage cible dans des projets définis par l'utilisateur. Vous pouvez également limiter le nombre d'étiquettes scrappées, la longueur des noms d'étiquettes et la longueur des valeurs d'étiquettes.
Si vous définissez des limites d'échantillons ou d'étiquettes, aucune autre donnée d'échantillon n'est ingérée pour ce balayage cible une fois la limite atteinte.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
, ou en tant qu'utilisateur ayant le rôleuser-workload-monitoring-config-edit
dans le projetopenshift-user-workload-monitoring
. - Vous avez activé la surveillance pour les projets définis par l'utilisateur.
-
Vous avez installé l'OpenShift CLI (
oc
).
Procédure
Modifiez l'objet
user-workload-monitoring-config
ConfigMap
dans le projetopenshift-user-workload-monitoring
:$ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
Ajoutez la configuration
enforcedSampleLimit
àdata/config.yaml
pour limiter le nombre d'échantillons qui peuvent être acceptés par balayage de cible dans les projets définis par l'utilisateur :apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | prometheus: enforcedSampleLimit: 50000 1
- 1
- Une valeur est requise si ce paramètre est spécifié. Cet exemple
enforcedSampleLimit
limite à 50 000 le nombre d'échantillons pouvant être acceptés par target scrape dans les projets définis par l'utilisateur.
Ajoutez les configurations
enforcedLabelLimit
,enforcedLabelNameLengthLimit
, etenforcedLabelValueLengthLimit
àdata/config.yaml
pour limiter le nombre d'étiquettes scrappées, la longueur des noms d'étiquettes et la longueur des valeurs d'étiquettes dans les projets définis par l'utilisateur :apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | prometheus: enforcedLabelLimit: 500 1 enforcedLabelNameLengthLimit: 50 2 enforcedLabelValueLengthLimit: 600 3
- 1
- Indique le nombre maximal d'étiquettes par balayage. La valeur par défaut est
0
, ce qui signifie qu'il n'y a pas de limite. - 2
- Spécifie la longueur maximale en caractères d'un nom d'étiquette. La valeur par défaut est
0
, ce qui signifie qu'il n'y a pas de limite. - 3
- Spécifie la longueur maximale en caractères d'une valeur d'étiquette. La valeur par défaut est
0
, ce qui signifie qu'il n'y a pas de limite.
Enregistrez le fichier pour appliquer les modifications. Les limites sont appliquées automatiquement.
NoteLes configurations appliquées à l'objet
user-workload-monitoring-config
ConfigMap
ne sont pas activées à moins qu'un administrateur de cluster n'ait activé la surveillance pour les projets définis par l'utilisateur.AvertissementLorsque les modifications sont enregistrées dans l'objet
user-workload-monitoring-config
ConfigMap
, les pods et autres ressources du projetopenshift-user-workload-monitoring
peuvent être redéployés. Les processus de surveillance en cours dans ce projet peuvent également être redémarrés.
2.12.2. Création d'alertes d'échantillons scrape
Vous pouvez créer des alertes qui vous préviennent lorsque :
-
La cible ne peut pas être scannée ou n'est pas disponible pour la durée spécifiée
for
-
Un seuil d'échantillonnage par raclage est atteint ou dépassé pendant la durée spécifiée
for
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
, ou en tant qu'utilisateur ayant le rôleuser-workload-monitoring-config-edit
dans le projetopenshift-user-workload-monitoring
. - Vous avez activé la surveillance pour les projets définis par l'utilisateur.
-
Vous avez créé l'objet
user-workload-monitoring-config
ConfigMap
. -
Vous avez limité le nombre d'échantillons qui peuvent être acceptés par target scrape dans les projets définis par l'utilisateur, en utilisant
enforcedSampleLimit
. -
Vous avez installé l'OpenShift CLI (
oc
).
Procédure
Créez un fichier YAML avec des alertes qui vous informent lorsque les cibles sont en panne et lorsque la limite d'échantillons imposée approche. Le fichier de cet exemple s'appelle
monitoring-stack-alerts.yaml
:apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: labels: prometheus: k8s role: alert-rules name: monitoring-stack-alerts 1 namespace: ns1 2 spec: groups: - name: general.rules rules: - alert: TargetDown 3 annotations: message: '{{ printf "%.4g" $value }}% of the {{ $labels.job }}/{{ $labels.service }} targets in {{ $labels.namespace }} namespace are down.' 4 expr: 100 * (count(up == 0) BY (job, namespace, service) / count(up) BY (job, namespace, service)) > 10 for: 10m 5 labels: severity: warning 6 - alert: ApproachingEnforcedSamplesLimit 7 annotations: message: '{{ $labels.container }} container of the {{ $labels.pod }} pod in the {{ $labels.namespace }} namespace consumes {{ $value | humanizePercentage }} of the samples limit budget.' 8 expr: scrape_samples_scraped/50000 > 0.8 9 for: 10m 10 labels: severity: warning 11
- 1
- Définit le nom de la règle d'alerte.
- 2
- Spécifie le projet défini par l'utilisateur dans lequel la règle d'alerte sera déployée.
- 3
- L'alerte
TargetDown
est déclenchée si la cible ne peut pas être grattée ou si elle n'est pas disponible pendant la durée de l'alertefor
. - 4
- Le message qui sera affiché lorsque l'alerte
TargetDown
se déclenchera. - 5
- Les conditions de l'alerte
TargetDown
doivent être vraies pendant cette durée avant que l'alerte ne soit déclenchée. - 6
- Définit la gravité de l'alerte
TargetDown
. - 7
- L'alerte
ApproachingEnforcedSamplesLimit
est déclenchée lorsque le seuil d'échantillonnage défini est atteint ou dépassé pendant la durée spécifiéefor
. - 8
- Le message qui sera affiché lorsque l'alerte
ApproachingEnforcedSamplesLimit
se déclenchera. - 9
- Le seuil de l'alerte
ApproachingEnforcedSamplesLimit
. Dans cet exemple, l'alerte est déclenchée lorsque le nombre d'échantillons par balayage cible a dépassé 80 % de la limite d'échantillons imposée de50000
. La durée defor
doit également s'être écoulée avant que l'alerte ne soit déclenchée. La valeur<number>
de l'expressionscrape_samples_scraped/<number> > <threshold>
doit correspondre à la valeurenforcedSampleLimit
définie dans l'objetuser-workload-monitoring-config
ConfigMap
. - 10
- Les conditions de l'alerte
ApproachingEnforcedSamplesLimit
doivent être vraies pendant cette durée avant que l'alerte ne soit déclenchée. - 11
- Définit la gravité de l'alerte
ApproachingEnforcedSamplesLimit
.
Appliquer la configuration au projet défini par l'utilisateur :
$ oc apply -f monitoring-stack-alerts.yaml
Ressources supplémentaires
- Création d'une carte de configuration de surveillance de la charge de travail définie par l'utilisateur
- Permettre le suivi de projets définis par l'utilisateur
- Voir Déterminer pourquoi Prometheus consomme beaucoup d'espace disque pour connaître les étapes permettant d'interroger les métriques ayant le plus grand nombre d'échantillons de balayage.