Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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"
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:
Maak een geheim in de
kube-system-naamruimte genaamdama-metrics-mtls-secret.De naam van de sleutel
password1kan alles zijn zolang deze overeenkomt met de bestandsnaam in hetpassword_filebestandspad 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-secretgeheim wordt aan deama-metricspods aan het pad/etc/prometheus/certs/gekoppeld en wordt beschikbaar gesteld aan de Prometheus-scraper. De sleutel (password1in het bovenstaande voorbeeld) is de bestandsnaam. De waarde wordt base64 gedecodeerd en toegevoegd als de inhoud van het bestand in de container.Geef het bestandspad op in de aangepaste knipselconfiguratie in de ConfigMap:
Basisverificatie Het
usernameveld moet de werkelijke gebruikersnaamtekenreeks bevatten. Hetpassword_fileveld 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/password1Bearer-token Het
bearer_token_fileveld 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.
Maak een geheim in de
kube-system-naamruimte genaamdama-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_contentHet
ama-metrics-mtls-secretgeheim wordt aan deama-metricspods 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.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.)