Delen via


Aangepaste Prometheus-scrapetaak maken vanuit uw Kubernetes-cluster met behulp van ConfigMap

In "Customize collection of Prometheus metrics from your Kubernetes cluster" wordt beschreven hoe u ConfigMap kunt gebruiken om het scrapen van Prometheus-metrics van standaarddoelen in uw Kubernetes-cluster aan te passen. In dit artikel wordt beschreven hoe u ConfigMap gebruikt om aangepaste scraping-taken te maken voor verdere aanpassing en aanvullende doelwitten.

ConfigMaps

In de volgende tabel worden de ConfigMaps beschreven die gebruikt worden voor het maken van persoonlijk gemaakte scraping processen. Deze ConfigMaps bestaan niet standaard in het cluster wanneer Managed Prometheus is ingeschakeld.

Configuratiekaart Description
ama-metrics-prometheus-config (Aanbevolen) Wanneer een ConfigMap met deze naam wordt gemaakt, worden de hierin gedefinieerde scrapetaken uitgevoerd door de replica-pod van Azure Monitor die in het cluster draait.
ama-metrics-prometheus-config-node (Geavanceerd) Geef Prometheus-knipselconfiguratie op voor addon DaemonSet die wordt uitgevoerd op elk Linux-knooppunt in het cluster en eventuele doelen op knooppuntniveau op elk knooppunt. Zie Geavanceerde installatie.
ama-metrics-prometheus-config-node-windows (Geavanceerd) Geef Prometheus-knipselconfiguratie op voor addon DaemonSet die wordt uitgevoerd op elk Windows-knooppunt in het cluster en eventuele doelen op knooppuntniveau op elk knooppunt. Zie Geavanceerde installatie.

Een Prometheus-configuratiebestand maken

In plaats van rechtstreeks te wijzigen ama-metrics-prometheus-config, is het eenvoudiger om een configuratiebestand te maken en vervolgens te converteren naar een ConfigMap. Zie De configuratie-instellingen van scrape hieronder voor meer informatie over de verschillende secties van dit bestand.

Maak een Prometheus scrape-configuratiebestand met de naam prometheus-config met behulp van de volgende indeling. Hiermee worden de scrape-configuraties in de sectie scrape_configs weergegeven en kan desgewenst de globale sectie worden gebruikt voor het instellen van de globale scrape_interval, scrape_timeout en external_labels. Raadpleeg Prometheus.io naslaginformatie over de scrape-configuratie voor volledige details over de opties voor een scrape-configuratie.

global:
  scrape_interval: <duration>
  scrape_timeout: <duration>
  external_labels:
    <labelname1>: <labelvalue>
    <labelname2>: <labelvalue>
scrape_configs:
  - <job-x>
  - <job-y>

Hieronder volgt een voorbeeld van een Prometheus-scrape-configuratiebestand.

global:
  scrape_interval: 30s
scrape_configs:
- job_name: my_static_config
  scrape_interval: 60s
  static_configs:
    - targets: ['my-static-service.svc.cluster.local:1234']
- job_name: prometheus_example_app
  scheme: http
  kubernetes_sd_configs:
    - role: service
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_name]
      action: keep
      regex: "prometheus-example-service"

Aanbeveling

Zie de Prometheus-voorbeelden van scrape-configuraties voor een Kubernetes-cluster.

Het config-bestand voor scrape valideren

De agent gebruikt een aangepast hulpprogramma promconfigvalidator om de Prometheus-configuratie te valideren die eraan is gegeven via de ConfigMap. Als de configuratie niet geldig is, wordt de aangepaste configuratie geweigerd door de agent. Zodra u uw Prometheus-configuratiebestand hebt gemaakt, kunt u dit hulpprogramma gebruiken om uw configuratie te valideren voordat u een ConfigMap voor de agent maakt.

Het promconfigvalidator hulpprogramma wordt verzonden in de invoegtoepassing voor metrische gegevens van Azure Monitor. U kunt elk van de ama-metrics-node-* pods in naamruimte in kube-system uw cluster gebruiken om het hulpprogramma voor validatie te downloaden. Gebruik kubectl cp om het hulpprogramma en de configuratie te downloaden met de volgende opdracht.

for podname in $(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name'); do kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator;  kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./collector-config-template.yml; chmod 500 promconfigvalidator; done

Nadat u het uitvoerbare bestand en de yaml hebt gekopieerd, zoekt u het pad van uw Prometheus-configuratiebestand. Vervang dan <config path> in de opdracht en voer de validator uit met de volgende opdracht.

./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"

Als u de validatie uitvoert, wordt het samengevoegde configuratiebestand merged-otel-config.yaml gegenereerd als er geen pad is opgegeven met de optionele output parameter. Gebruik dit automatisch gegenereerde samengevoegde bestand niet, omdat dit alleen wordt gebruikt voor hulpprogrammavalidatie en foutopsporing.

Configuratiebestand implementeren als ConfigMap

Uw aangepaste Prometheus-configuratiebestand wordt gebruikt als een veld genaamd prometheus-config binnen de ama-metrics-prometheus-config, ama-metrics-prometheus-config-node of ama-metrics-prometheus-config-node-windows ConfigMap in de kube-system-naamruimte. Maak een ConfigMap van het knipselconfiguratiebestand door de naam van uw Prometheus-configuratiebestand te wijzigen in prometheus-config zonder bestandsextensie en een of meer van de volgende voorbeeldopdrachten uit te voeren, afhankelijk van welke ConfigMap u wilt maken voor de configuratie van uw aangepaste scrape-taak.

ConfigMap maken voor gebruik door replicaset:

kubectl create ConfigMap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system

Hiermee maakt u een ConfigMap met de naam ama-metrics-prometheus-config in kube-system de naamruimte. Als u wilt zien of er problemen zijn met de configuratievalidatie, verwerking of samenvoeging, kunt u de ama-metrics replicapods bekijken

ConfigMap maken voor gebruik door Linux DaemonSet:

kubectl create ConfigMap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system

Hiermee maakt u een ConfigMap met de naam ama-metrics-prometheus-config-node in kube-system de naamruimte. Als u wilt zien of er problemen zijn met de configuratievalidatie, verwerking of samenvoeging, kunt u de linux-deamonset-pods ama-metrics-node bekijken

ConfigMap maken voor gebruik door Windows DaemonSet

kubectl create ConfigMap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system

Hiermee maakt u een ConfigMap met de naam ama-metrics-prometheus-config-node-windows in kube-system de naamruimte. Als u wilt zien of er problemen zijn met de configuratievalidatie, verwerking of samenvoeging, kunt u kijken naar de Windows-deamonset-pods ama-metrics-win-node

Probleemoplossingsproces

Als u de ConfigMap in de kube-system naamruimte hebt gemaakt en de aangepaste doelen nog steeds niet worden verzameld, controleer op fouten in de replicapodlogboeken voor ama-metrics-prometheus-config ConfigMap of DaemonSet-podlogboeken voor ama-metrics-prometheus-config-node ConfigMap met gebruik van kubectl logs en zorg ervoor dat er geen fouten zijn in de sectie Start Merging Default and Custom Prometheus Config met voorvoegsel prometheus-config-merger

Knipselconfiguraties

Momenteel zijn de ondersteunde methoden voor doeldetectie voor een scrape-configuratie ofwel static_configs of kubernetes_sd_configs voor het opgeven of ontdekken van doelen.

Een statische configuratie bevat een lijst met statische doelen en eventuele extra labels die aan deze doelen moeten worden toegevoegd, zoals in het volgende.

scrape_configs:
  - job_name: example
    - targets: [ '10.10.10.1:9090', '10.10.10.2:9090', '10.10.10.3:9090' ... ]
    - labels: [ label1: value1, label1: value2, ... ]

Doelen die worden gedetecteerd met kubernetes_sd_configs hebben verschillende __meta_* labels, afhankelijk van de specifieke rol die is opgegeven. U kunt de labels in de relabel_configs sectie gebruiken om doelen te filteren of labels voor de doelen te vervangen.

Configuraties opnieuw labelen

De relabel_configs sectie wordt toegepast op het moment van doeldetectie en is van toepassing op elk doel voor de taak. In de volgende voorbeelden ziet u manieren om te gebruiken relabel_configs.

Een label toevoegen Voeg een nieuw label example_label toe met de waarde example_value aan elke metrische waarde van de taak. Gebruik __address__ het bronlabel alleen omdat dat label altijd bestaat en het label toevoegt voor elk doel van de taak.

relabel_configs:
- source_labels: [__address__]
  target_label: example_label
  replacement: 'example_value'

Kubernetes Service Discovery-labels gebruiken

Als een taak kubernetes_sd_configs gebruikt om doelen te ontdekken, heeft elke rol bijbehorende labels __meta_* voor metrische gegevens. De __* labels worden verwijderd nadat de doelen zijn ontdekt. Als u wilt filteren op het niveau van metrische gegevens, moet u ze eerst gebruiken relabel_configs door een labelnaam toe te wijzen. metric_relabel_configs Gebruik vervolgens om te filteren.

# Use the kubernetes namespace as a label called 'kubernetes_namespace'
relabel_configs:
- source_labels: [__meta_kubernetes_namespace]
  action: replace
  target_label: kubernetes_namespace

# Keep only metrics with the kubernetes namespace 'default'
metric_relabel_configs:
- source_labels: [kubernetes_namespace]
  action: keep
  regex: 'default'

Opnieuw labelen van taken en instanties

U kunt de job waarden en instance labelwaarden wijzigen op basis van het bronlabel, net als elk ander label.

# Replace the job name with the pod label 'k8s app'
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_k8s_app]
  target_label: job

# Replace the instance name with the node name. This is helpful to replace a node IP
# and port with a value that is more readable
relabel_configs:
- source_labels: [__meta_kubernetes_node_name]
  target_label: instance

Configuraties voor herlabeling van metrische waarden

Configuraties voor het opnieuw labelen van metrische gegevens worden toegepast na het scrapen en vóór het verwerken. Gebruik de metric_relabel_configs sectie om metrische gegevens te filteren na het scrapen. Zie de volgende voorbeelden.

Metrische gegevens op naam verwijderen

# Drop the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
  action: drop
  regex: 'example_metric_name'

Alleen bepaalde metrische gegevens op naam behouden

# Keep only the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
  action: keep
  regex: 'example_metric_name'
# Keep only metrics that start with 'example_'
metric_relabel_configs:
- source_labels: [__name__]
  action: keep
  regex: '(example_.*)'

Metrische gegevens filteren op labels

# Keep metrics only where example_label = 'example'
metric_relabel_configs:
- source_labels: [example_label]
  action: keep
  regex: 'example'
# Keep metrics only if `example_label` equals `value_1` or `value_2`
metric_relabel_configs:
- source_labels: [example_label]
  action: keep
  regex: '(value_1|value_2)'
# Keep metrics only if `example_label_1 = value_1` and `example_label_2 = value_2`
metric_relabel_configs:
- source_labels: [example_label_1, example_label_2]
  separator: ';'
  action: keep
  regex: 'value_1;value_2'
# Keep metrics only if `example_label` exists as a label
metric_relabel_configs:
- source_labels: [example_label_1]
  action: keep
  regex: '.+'

Metrische gegevens hernoemen Het hernoemen van metrische gegevens wordt niet ondersteund.

Opmerking

Als u labels wilt toevoegen aan alle taken in uw aangepaste configuratie, voegt u expliciet labels toe met behulp van metrics_relabel_configs elke taak. Globale externe labels worden niet ondersteund met een prometheus-configuratie op basis van ConfigMap.

relabel_configs:
- source_labels: [__address__]
  target_label: example_label
  replacement: 'example_value'

Basisverificatie en Bearer-tokens

Als u een gebruikersnaam, wachtwoord of referenties als tekst zonder opmaak gebruikt in de scrape-configuratie, zijn er geen aanvullende wijzigingen vereist. De waarden die in de configuratie zijn opgegeven, worden gebruikt voor scraping. Als u de username_file of password_file (of eventuele _file configuratie-instellingen) voor basic_auth of bearer_token instellingen in uw prometheus-configuratie gebruikt, volgt u de onderstaande stappen:

  1. Maak een geheim in de kube-system-naamruimte genaamd ama-metrics-mtls-secret.

    De naam van de sleutel password1 kan alles zijn zolang deze overeenkomt met de bestandsnaam in het password_file bestandspad in de prometheus-scrapeconfiguratie in de volgende stap. De waarde voor de sleutel moet base64-gecodeerd zijn.

    apiVersion: v1
    kind: Secret
    metadata:
      name: ama-metrics-mtls-secret
      namespace: kube-system
    type: Opaque
    data:
      password1: <base64-encoded-string>
    

    Het ama-metrics-mtls-secret geheim wordt aan de ama-metrics pods aan het pad /etc/prometheus/certs/ gekoppeld en wordt beschikbaar gesteld aan de Prometheus-scraper. De sleutel (password1 in het bovenstaande voorbeeld) is de bestandsnaam. De waarde wordt base64 gedecodeerd en toegevoegd als de inhoud van het bestand in de container.

  2. Geef het bestandspad op in de aangepaste knipselconfiguratie in de ConfigMap:

    Basisverificatie Het username veld moet de werkelijke gebruikersnaamtekenreeks bevatten. Het password_file veld moet het pad bevatten naar het bestand dat het wachtwoord bevat.

    # Sets the `Authorization` header on every scrape request with the
    # configured username and password.
    basic_auth:
      username: <username string>
      password_file: /etc/prometheus/certs/password1
    

    Bearer-token Het bearer_token_file veld moet het pad naar het bestand bevatten dat het token bevat.

    # Sets the `Authorization` header on every scrape request with the bearer token
    # read from the configured file. It is mutually exclusive with `bearer_token`.
    bearer_token_file: /etc/prometheus/certs/password1
    

Zie de documentatie voor Prometheus scrape_config voor meer informatie over deze instellingen.

Scraping op basis van TLS

Als u prometheus-metrische gegevens van een https-eindpunt wilt scrapen, moet voor de Prometheus-configuratie, PodMonitor of ServiceMonitor de scheme instelling zijn ingesteld op https en extra TLS-instellingen.

  1. Maak een geheim in de kube-system-naamruimte genaamd ama-metrics-mtls-secret. Elk sleutel-waardepaar dat is opgegeven in de gegevenssectie van het geheime object, wordt gekoppeld als een afzonderlijk bestand op deze locatie /etc/prometheus/certs met bestandsnamen die hetzelfde zijn als de sleutels die zijn opgegeven in de gegevenssectie. De geheime waarden moeten base64-gecodeerd zijn.

    Hieronder volgt een voorbeeld van YAML van een geheim:

    apiVersion: v1
    kind: Secret
    metadata:
      name: ama-metrics-mtls-secret
      namespace: kube-system
    type: Opaque
    data:
      <certfile>: base64_cert_content    
      <keyfile>: base64_key_content 
    

    Het ama-metrics-mtls-secret geheim wordt aan de ama-metrics pods aan het pad /etc/prometheus/certs/ gekoppeld en wordt beschikbaar gesteld aan de Prometheus-scraper. De sleutel zal de bestandsnaam zijn. De waarde wordt base64 gedecodeerd en toegevoegd als de inhoud van het bestand in de container.

  2. Geef het bestandspad op in de Prometheus-configuratie, PodMonitor of ServiceMonitor:

    • Gebruik het volgende voorbeeld om de TLS-configuratie-instelling in een ConfigMap op te geven:
    tls_config:
       # CA certificate to validate API server certificate with.
       ca_file: /etc/prometheus/certs/<certfile>
    
       # Certificate and key files for client cert authentication to the server.
       cert_file: /etc/prometheus/certs/<certfile>
       key_file: /etc/prometheus/certs/<keyfile>
    
       # Disable validation of the server certificate.
       insecure_skip_verify: false
    

Basisauthenticatie en TLS

Als u zowel basisverificatie- als bearer-token (op bestanden gebaseerde referenties) en TLS-verificatie-instellingen in uw ConfigMap wilt gebruiken, moet u ervoor zorgen dat het geheim ama-metrics-mtls-secret alle sleutels in de gegevenssectie bevat met de bijbehorende base64-gecodeerde waarden, zoals wordt weergegeven in het volgende voorbeeld:

apiVersion: v1
kind: Secret
metadata:
  name: ama-metrics-mtls-secret
  namespace: kube-system
type: Opaque
data:
  certfile: base64_cert_content    # used for TLS
  keyfile: base64_key_content      # used for TLS
  password1: base64-encoded-string # used for basic auth
  password2: base64-encoded-string # used for basic auth

Opmerking

Het /etc/prometheus/certs/ pad is verplicht, maar password1 kan elke tekenreeks zijn en moet overeenkomen met de sleutel voor de gegevens in het bovenstaande geheim. Dit komt doordat het geheim ama-metrics-mtls-secret is gekoppeld aan het pad /etc/prometheus/certs/ in de container.

De base64-gecodeerde waarde wordt automatisch door de ama-metrics pods gedecodeerd wanneer de secret als bestand wordt gemount. Zorg ervoor dat de geheime naam zich in ama-metrics-mtls-secret de kube-system naamruimte bevindt.

Het geheim moet eerst worden gemaakt en vervolgens moet de ConfigMap, PodMonitor of ServiceMonitor worden gemaakt in kube-system de naamruimte. De volgorde van geheime creatie is belangrijk. Als er geen geheim is, maar een ConfigMap, PodMonitor of ServiceMonitor die verwijst naar het geheim, wordt de volgende fout weergegeven in de containerlogboeken van ama-metrics prometheus-collector: no file found for cert....

Zie tls_config voor meer informatie over TLS-configuratie-instellingen.

Geavanceerde configuratie: aangepaste scrape-taken voor Prometheus instellen voor de DaemonSet

De ama-metrics Replica pod gebruikt de aangepaste Prometheus-config en scrapet de opgegeven doelen. Voor een cluster met een groot aantal knooppunten en pods en een groot volume aan metrische gegevens dat verzameld moet worden, kunnen sommige van de toepasselijke aangepaste scrape-doelen worden overgedragen van de enkele ama-metrics Replica-pod naar de ama-metrics DaemonSet-pod.

De ama-metrics-prometheus-config-node ConfigMap is vergelijkbaar met de replicaset ConfigMap en kan worden gemaakt om statische scrape-configuraties op elk knooppunt te hebben. De scrape-configuratie mag alleen gericht zijn op één knooppunt en mag geen servicedetectie-/podaantekeningen gebruiken. Anders probeert elk knooppunt alle doelen te scrapen en worden veel aanroepen naar de Kubernetes-API-server uitgevoerd.

Aangepaste knipseldoelen kunnen dezelfde indeling volgen door gebruik te maken van static_configs met de doelen, de $NODE_IP omgevingsvariabele te gebruiken en de te scrapen poort op te geven. Elke pod van de DaemonSet neemt de configuratie, scrapt de metrische gegevens en verzendt deze voor dat knooppunt.

De volgende node-exporter configuratie is een van de standaarddoelen voor de DaemonSet-pods. Deze maakt gebruik van de $NODE_IP omgevingsvariabele, die al is ingesteld voor elke ama-metrics invoegtoepassingscontainer om een specifieke poort op het knooppunt te richten.

- job_name: nodesample
  scrape_interval: 30s
  scheme: http
  metrics_path: /metrics
  relabel_configs:
  - source_labels: [__metrics_path__]
    regex: (.*)
    target_label: metrics_path
  - source_labels: [__address__]
    replacement: '$NODE_NAME'
    target_label: instance
  static_configs:
  - targets: ['$NODE_IP:9100']

Instellingen voor scrapingconfiguratie

In de volgende secties worden de instellingen beschreven die worden ondersteund in het Prometheus-configuratiebestand dat wordt gebruikt in de ConfigMap. Zie de prometheus-configuratiereferentie voor meer informatie over deze instellingen.

Algemene instellingen

De configuratie-indeling voor algemene instellingen is hetzelfde als die wordt ondersteund door oss prometheus-configuratie

global:
  scrape_interval: <duration>
  scrape_timeout: <duration>
  external_labels:
    <labelname1>: <labelvalue>
    <labelname2>: <labelvalue>
scrape_configs:
  - <job-x>
  - <job-y>

De instellingen in de globale sectie gelden voor alle scrapetaken (zowel taken in Configmap als aangepaste resources) maar worden overschreven als ze zijn opgegeven in de individuele taken.

Opmerking

Als u globale instellingen wilt gebruiken die van toepassing zijn op alle knipseltaken, en u beschikt alleen over aangepaste resources, moet u nog steeds een ConfigMap maken met alleen de globale instellingen. (Instellingen voor elk van deze in de aangepaste resources zullen de globale instellingen in deze sectie overschrijven.)

Volgende stappen