Configurer l'ingestion de métriques à l'aide de AWS Distro for OpenTelemetry sur un cluster Amazon Elastic Kubernetes Service - Amazon Managed Service for Prometheus

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configurer l'ingestion de métriques à l'aide de AWS Distro for OpenTelemetry sur un cluster Amazon Elastic Kubernetes Service

Vous pouvez utiliser le collecteur AWS Distor for OpenTelemetry (ADOT) pour extraire les métriques d'une application instrumentée par Prometheus et les envoyer à Amazon Managed Service for Prometheus.

Note

Pour plus d'informations sur le ADOT collecteur, consultez AWS Distro for OpenTelemetry.

Pour plus d'informations sur les applications instrumentées par Prometheus, consultez. Quelles sont les métriques compatibles avec Prometheus ?

La collecte des métriques ADOT Prometheus implique OpenTelemetry trois composants : le récepteur Prometheus, l'exportateur d'écriture à distance Prometheus et l'extension d'authentification Sigv4.

Vous pouvez configurer Prometheus Receiver à l’aide de votre configuration Prometheus existante pour effectuer la découverte de service et la collecte des métriques. Prometheus Receiver collecte des métriques dans le format d’exposition Prometheus. Toutes les applications ou points de terminaison que vous souhaitez collecter doivent être configurés avec la bibliothèque client Prometheus. Prometheus Receiver prend en charge l’ensemble complet des configurations de collecte et de réétiquetage de Prometheus décrites dans la section Configuration de la documentation Prometheus. Vous pouvez coller ces configurations directement dans les configurations de votre ADOT collecteur.

Prometheus Remote Write Exporter utilise le point de terminaison remote_write pour envoyer les métriques collectées à l’espace de travail de votre portail de gestion. Les HTTP demandes d'exportation de données seront signées avec AWS Sigv4, le AWS protocole d'authentification sécurisée, avec l'extension d'authentification Sigv4. Pour plus d'informations, consultez Processus de signature Signature Version 4.

Le collecteur découvre automatiquement les points de terminaison Prometheus Metrics sur EKS Amazon et utilise la configuration trouvée dans. <kubernetes_sd_config>

La démonstration suivante est un exemple de cette configuration sur un cluster exécutant Amazon Elastic Kubernetes Service ou Kubernetes autogéré. Pour effectuer ces étapes, vous devez disposer AWS d'informations d'identification provenant de l'une des options potentielles de la chaîne AWS d'informations d'identification par défaut. Pour plus d'informations, consultez Configuration du AWS SDK for Go. Cette démonstration utilise un exemple d’application qui est utilisé pour les tests d’intégration du processus. L’exemple d’application expose les métriques au niveau du point de terminaison /metrics, comme la bibliothèque client Prometheus.

Prérequis

Avant de commencer les étapes de configuration d'ingestion suivantes, vous devez définir votre IAM rôle pour le compte de service et la politique de confiance.

Pour configurer le IAM rôle du compte de service et de la politique de confiance
  1. Créez le IAM rôle pour le compte de service en suivant les étapes décrites dansConfiguration de rôles de service pour l'ingestion de métriques à partir de clusters Amazon EKS.

    Le ADOT Collector utilisera ce rôle lorsqu'il extrait et exporte des métriques.

  2. Modifiez ensuite la politique d’approbation. Ouvrez la IAM console à l'adresse https://console.aws.amazon.com/iam/.

  3. Dans le volet de navigation de gauche, choisissez Rôles et recherchez ceux amp-iamproxy-ingest-roleque vous avez créés à l'étape 1.

  4. Choisissez l’onglet Relations d’approbation, puis Modifier la relation d’approbation.

  5. Dans la politique de relation de confianceJSON, remplacez aws-amp par adot-col puis choisissez Mettre à jour la politique de confiance. La politique d’approbation obtenue doit être similaire à ce qui suit :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/openid" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/openid:sub": "system:serviceaccount:adot-col:amp-iamproxy-ingest-service-account" } } } ] }
  6. Choisissez l’onglet Autorisations et assurez-vous que la politique d’autorisations suivante est associée au rôle.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "aps:RemoteWrite", "aps:GetSeries", "aps:GetLabels", "aps:GetMetricMetadata" ], "Resource": "*" } ] }

Activation de la collecte de métriques Prometheus

Note

Lorsque vous créez un espace de noms dans AmazonEKS, l'exportateur alertmanager de nœuds est désactivé par défaut.

Pour activer la collection Prometheus sur un cluster Amazon EKS ou Kubernetes
  1. Forkez et clonez l'exemple d'application depuis le référentiel à l'adresse aws-otel-community.

    Exécutez ensuite les commandes suivantes.

    cd ./sample-apps/prometheus-sample-app docker build . -t prometheus-sample-app:latest
  2. Transférez cette image vers un registre tel qu'Amazon ECR ou DockerHub.

  3. Déployez l’exemple d’application dans le cluster en copiant cette configuration Kubernetes et en l’appliquant. Remplacez l’image par celle que vous venez d’envoyer en remplaçant {{PUBLIC_SAMPLE_APP_IMAGE}} dans le fichier prometheus-sample-app.yaml.

    curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-sample-app.yaml -o prometheus-sample-app.yaml kubectl apply -f prometheus-sample-app.yaml
  4. Exécutez la commande suivante pour vérifier que l’exemple d’application a démarré. Dans la sortie de la commande, prometheus-sample-app apparaît dans la colonne NAME.

    kubectl get all -n aoc-prometheus-pipeline-demo
  5. Démarrez une instance par défaut du ADOT Collector. Pour ce faire, entrez d'abord la commande suivante pour extraire la configuration Kubernetes pour Collector. ADOT

    curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-daemonset.yaml -o prometheus-daemonset.yaml

    Modifiez ensuite le fichier modèle en remplaçant le point de terminaison remote_write de votre espace de travail Amazon Managed Service for Prometheus par YOUR_ENDPOINT et votre région par YOUR_REGION. Utilisez le point de terminaison remote_write affiché dans la console Amazon Managed Service for Prometheus lorsque vous consultez les détails de votre espace de travail.

    YOUR_ACCOUNT_IDDans la section du compte de service de la configuration de Kubernetes, vous devrez également remplacer votre AWS identifiant de compte.

    Dans cet exemple, la configuration du ADOT collecteur utilise une annotation (scrape=true) pour indiquer les points de terminaison cibles à gratter. Cela permet au ADOT collecteur de distinguer le point de terminaison de l'exemple d'application des points de terminaison du système Kube dans votre cluster. Vous pouvez le supprimer des configurations de réétiquetage si vous souhaitez récupérer un autre exemple d’application.

  6. Entrez la commande suivante pour déployer le ADOT collecteur.

    kubectl apply -f prometheus-daemonset.yaml
  7. Entrez la commande suivante pour vérifier que le ADOT collecteur a démarré. Recherchez adot-col dans la colonne NAMESPACE.

    kubectl get pods -n adot-col
  8. Vérifiez que le pipeline fonctionne à l’aide de l’exportateur de journalisation. Notre exemple de modèle est déjà intégré à l’exportateur de journalisation. Entrez les commandes suivantes :

    kubectl get pods -A kubectl logs -n adot-col name_of_your_adot_collector_pod

    Certaines des métriques collectées de l’exemple d’application ressembleront à celles de l’exemple suivant.

    Resource labels: -> service.name: STRING(kubernetes-service-endpoints) -> host.name: STRING(192.168.16.238) -> port: STRING(8080) -> scheme: STRING(http) InstrumentationLibraryMetrics #0 Metric #0 Descriptor: -> Name: test_gauge0 -> Description: This is my gauge -> Unit: -> DataType: DoubleGauge DoubleDataPoints #0 StartTime: 0 Timestamp: 1606511460471000000 Value: 0.000000
  9. Pour vérifier si Amazon Managed Service for Prometheus a reçu les statistiques, utilisez awscurl. Cet outil vous permet d'envoyer des HTTP demandes via la ligne de commande avec l'authentification AWS Sigv4. Vous devez donc disposer d' AWS informations d'identification configurées localement avec les autorisations appropriées pour interroger Amazon Managed Service for Prometheus. Pour obtenir des instructions sur awscurl l'installation, consultez awscurl.

    Dans la commande suivante, remplacez AMP_REGION et AMP_ENDPOINT par les informations relatives à votre espace de travail Amazon Managed Service for Prometheus.

    awscurl --service="aps" --region="AMP_REGION" "https://AMP_ENDPOINT/api/v1/query?query=adot_test_gauge0" {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"adot_test_gauge0"},"value":[1606512592.493,"16.87214000011479"]}]}}

    Si vous recevez une métrique en réponse, cela signifie que la configuration de votre pipeline est réussie et que la métrique s’est propagée avec succès depuis l’exemple d’application dans Amazon Managed Service for Prometheus.

Nettoyage

Pour nettoyer cette démo, entrez les commandes suivantes.

kubectl delete namespace aoc-prometheus-pipeline-demo kubectl delete namespace adot-col

Configuration avancée

Prometheus Receiver prend en charge l’ensemble complet des configurations de collecte et de réétiquetage de Prometheus décrites dans la section Configuration de la documentation Prometheus. Vous pouvez coller ces configurations directement dans les configurations de votre ADOT collecteur.

La configuration de Prometheus Receiver inclut vos configurations de découverte de service, de collecte et de réétiquetage. La configuration du récepteur ressemble à ce qui suit.

receivers: prometheus: config: [[Your Prometheus configuration]]

Voici un exemple de configuration.

receivers: prometheus: config: global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: kubernetes-service-endpoints sample_limit: 10000 kubernetes_sd_configs: - role: endpoints tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

Si vous disposez d’une configuration Prometheus existante, vous devez remplacer les caractères $ par les caractères $$ pour éviter que les valeurs soient remplacées par des variables d’environnement. *Ceci est particulièrement important pour la valeur de remplacement de relabel_configurations. Par exemple, si vous commencez par la configuration relabel_configuration suivante :

relabel_configs: - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path] regex: (.+);(.+);(.+) replacement: ${1}://${2}${3} target_label: __param_target

Elle deviendra :

relabel_configs: - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path] regex: (.+);(.+);(.+) replacement: $${1}://${2}${3} target_label: __param_target

Prometheus Remote Write Exporter et SigV4 Authentication Extension

Les configurations de Prometheus Remote Write Exporter et Sigv4 Authentication Extension sont plus simples que celle de Prometheus Receiver. À ce stade du pipeline, les métriques ont déjà été ingérées et nous sommes prêts à exporter ces données dans Amazon Managed Service for Prometheus. L’exemple suivant montre la configuration minimale requise pour communiquer avec Amazon Managed Service for Prometheus.

extensions: sigv4auth: service: "aps" region: "user-region" exporters: prometheusremotewrite: endpoint: "https://aws-managed-prometheus-endpoint/api/v1/remote_write" auth: authenticator: "sigv4auth"

Cette configuration envoie une HTTPS demande signée par AWS SigV4 à l'aide des AWS informations d'identification de la chaîne d'informations AWS d'identification par défaut. Pour plus d’informations, consultez Configuration de l’ AWS SDK for Go. Vous devez spécifier le service aps.

Quelle que soit la méthode de déploiement, le ADOT collecteur doit avoir accès à l'une des options répertoriées dans la chaîne AWS d'informations d'identification par défaut. L'extension d'authentification Sigv4 dépend de AWS SDK for Go et l'utilise pour récupérer les informations d'identification et s'authentifier. Vous devez vous assurer que ces informations d’identification disposent d’autorisations d’écriture à distance pour Amazon Managed Service for Prometheus.