Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anpassa en samling Prometheus-mått från kubernetes-klustret beskriver hur du använder ConfigMap för att anpassa skrapning av Prometheus-mått från standardmål i ditt Kubernetes-kluster. Den här artikeln beskriver hur du använder ConfigMap för att skapa anpassade skrapjobb för ytterligare anpassning och ytterligare mål.
ConfigMaps
I följande tabell beskrivs de ConfigMaps som används för att skapa anpassade skrapningsjobb. Dessa ConfigMaps finns inte som standard i klustret när Managed Prometheus är aktiverat.
| ConfigMap (på engelska) | Description | 
|---|---|
| ama-metrics-prometheus-config(Rekommenderas) | När en ConfigMap med det här namnet skapas körs de skrapjobb som definierats i den från replikpodden för Azure Monitor-mått som körs i klustret. | 
| ama-metrics-prometheus-config-node(Avancerat) | Ange Prometheus scrape config för addon DaemonSet som körs på varje Linux-nod i klustret och eventuella nodnivåmål på varje nod. Mer information finns i Avancerad installation. | 
| ama-metrics-prometheus-config-node-windows(Avancerat) | Ange Prometheus scrape config för addon DaemonSet som körs på varje Windows-nod i klustret och eventuella nodnivåmål på varje nod. Mer information finns i Avancerad installation. | 
Skapa Prometheus-konfigurationsfil
I stället för att ama-metrics-prometheus-configändra direkt är det enklare att skapa en konfigurationsfil och sedan konvertera den till en ConfigMap. Mer information om de olika avsnitten i den här filen finns i inställningarna för Scrape-konfiguration nedan.
Skapa en Prometheus-skrapkonfigurationsfil med namnet prometheus-config med följande format. Detta visar en lista över skrapkonfigurationer under avsnittet scrape_configs och kan också använda det globala avsnittet för att ange globala scrape_interval, scrape_timeoutoch external_labels. Se Prometheus.io referens för skrapkonfiguration för fullständig information om alternativen för en skrapkonfiguration.
global:
  scrape_interval: <duration>
  scrape_timeout: <duration>
  external_labels:
    <labelname1>: <labelvalue>
    <labelname2>: <labelvalue>
scrape_configs:
  - <job-x>
  - <job-y>
Följande är en Prometheus-exempelkonfigurationsfil för scrape:
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"
Verifiera scrape-konfigurationsfilen
Agenten använder ett anpassat promconfigvalidator verktyg för att verifiera prometheus-konfigurationen som ges till den via ConfigMap. Om konfigurationen inte är giltig avvisas den anpassade konfigurationen av agenten. När du har skapat prometheus-konfigurationsfilen kan du använda det här verktyget för att verifiera konfigurationen innan du skapar en ConfigMap för agenten.
Verktyget promconfigvalidator levereras i azure monitor-måtttilläggspodden. Du kan använda någon av ama-metrics-node-* poddarna i kube-system namnområdet i klustret för att ladda ned verktyget för validering. Använd kubectl cp för att ladda ned verktyget och dess konfiguration med följande kommando.
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
När du har kopierat den körbara filen och yaml-filen letar du reda på sökvägen till prometheus-konfigurationsfilen. Ersätt <config path> sedan i kommandot och kör validatorn med följande kommando.
./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"
Om du kör validatorn genereras den sammanfogade konfigurationsfilen merged-otel-config.yaml om det inte finns någon sökväg med den valfria output parametern. Använd inte den här autogenererade sammanfogade filen eftersom den endast används för verktygsverifiering och felsökning.
Distribuera konfigurationsfilen som ConfigMap
Din anpassade Prometheus-konfigurationsfil används som ett fält med namnet prometheus-config i ama-metrics-prometheus-config, ama-metrics-prometheus-config-nodeeller ama-metrics-prometheus-config-node-windows ConfigMap i kube-system namnområdet. Skapa en ConfigMap från skrapkonfigurationsfilen genom att byta namn på prometheus-konfigurationsfilen till prometheus-config utan filnamnstillägg och köra ett eller flera av följande exempelkommandon, beroende på vilken ConfigMap du vill skapa för konfigurationen av ditt anpassade skrapjobb.
Skapa ConfigMap som ska användas av replikuppsättningen:
kubectl create ConfigMap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system
Då skapas en ConfigMap med namnet ama-metrics-prometheus-config i kube-system namnområdet. Om du vill se om det finns några problem med konfigurationsverifiering, bearbetning eller sammanslagning kan du titta på ama-metrics replikpoddarna
Skapa ConfigMap som ska användas av Linux DaemonSet:
kubectl create ConfigMap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system
Då skapas en ConfigMap med namnet ama-metrics-prometheus-config-node i kube-system namnområdet. Om du vill se om det finns några problem med konfigurationsverifiering, bearbetning eller sammanslagning kan du titta på ama-metrics-node poddarna för Linux-deamonset
Skapa ConfigMap som ska användas av Windows DaemonSet
kubectl create ConfigMap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system
Då skapas en ConfigMap med namnet ama-metrics-prometheus-config-node-windows i kube-system namnområdet. Om du vill se om det finns några problem med konfigurationsverifiering, bearbetning eller sammanslagning kan du titta på ama-metrics-win-node poddarna för Windows-daemonset
Felsökning
Om du har skapat ConfigMap i kube-system-namespaced och fortfarande inte ser de anpassade målen som skrapas, kontrollera om det finns fel i loggarna för replikpodden för ama-metrics-prometheus-config ConfigMap. Använd kubectl logs och kontrollera även DaemonSet-podloggarna för ama-metrics-prometheus-config-node ConfigMap. Säkerställ att det inte finns några fel i avsnittet Start Merging Default och Custom Prometheus Config med prefixet prometheus-config-merger.
Scrape-konfigurationer
För närvarande är de metoder som stöds för målidentifiering för en skrapkonfiguration antingen static_configs eller kubernetes_sd_configs för att ange eller identifiera mål.
En statisk konfiguration har en lista över statiska mål och eventuella extra etiketter att lägga till i dem som i följande.
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, ... ]
Mål som upptäcks med hjälp av kubernetes_sd_configs har olika __meta_* etiketter beroende på vilken roll som anges. Du kan använda etiketterna i avsnittet relabel_configs för att filtrera mål eller ersätta etiketter för målen.
Relabel-konfigurationer
Avsnittet relabel_configs tillämpas vid tidpunkten för målidentifieringen och gäller för varje mål för jobbet. I följande exempel visas olika sätt att använda relabel_configs.
              Lägga till en etikett Lägg till en ny etikett med namnet example_label med värdet example_value för varje mått i jobbet. Använd __address__ bara som källetikett eftersom etiketten alltid finns och lägger till etiketten för varje mål för jobbet.
relabel_configs:
- source_labels: [__address__]
  target_label: example_label
  replacement: 'example_value'
Använda Kubernetes Service Discovery-etiketter
Om ett jobb använder kubernetes_sd_configs för att identifiera mål har varje roll associerade __meta_* etiketter för mått. Etiketterna __* tas bort när målen har upptäckts. Om du vill filtrera med hjälp av dem på måttnivå ska du först behålla dem genom relabel_configs att tilldela ett etikettnamn. Använd metric_relabel_configs sedan för att filtrera.
# 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'
Ommärkning av jobb och instanser
Du kan ändra job värdena och instance etiketterna baserat på källetiketten, precis som andra etiketter.
# 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
Måttåtermärkningskonfigurationer
Måttrelabelkonfigurationer tillämpas efter skrapning och före inmatning. Använd avsnittet metric_relabel_configs för att filtrera mått efter skrapning. Se följande exempel.
Ta bort mått efter namn
# Drop the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
  action: drop
  regex: 'example_metric_name'
Behåll endast vissa mått efter namn
# 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_.*)'
Filtrera mått efter etiketter
# 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: '.+'
Byt namn på mått Det går inte att byta namn på mått.
Anmärkning
Om du vill lägga till etiketter till alla jobb i din anpassade konfiguration, lägger du uttryckligen till etiketter med metrics_relabel_configs för varje jobb. Globala externa etiketter stöds inte med ConfigMap-baserad prometheus-konfiguration.
relabel_configs:
- source_labels: [__address__]
  target_label: example_label
  replacement: 'example_value'
Grundläggande autentiserings- och ägartoken
Om du använder användarnamn, lösenord eller autentiseringsuppgifter som klartext i skrapkonfigurationen krävs inga ytterligare ändringar. De värden som anges i konfigurationen används för skrapning. Om du använder username_file eller password_file (eller några _file konfigurationsinställningar) för basic_auth eller bearer_token inställningar i prometheus-konfigurationen följer du stegen nedan:
- Skapa en hemlighet i - kube-systemnamnområdet med namnet- ama-metrics-mtls-secret.- Namnet på nyckeln - password1kan vara vad som helst så länge det matchar filnamnet i- password_filefilsökvägen i prometheus-skrapkonfigurationen i nästa steg. Värdet för nyckeln måste vara base64-kodat.- apiVersion: v1 kind: Secret metadata: name: ama-metrics-mtls-secret namespace: kube-system type: Opaque data: password1: <base64-encoded-string>- Hemligheten - ama-metrics-mtls-secretmonteras på- ama-metricspoddarna vid sökvägen- /etc/prometheus/certs/och görs tillgänglig för Prometheus-skrapan. Nyckeln (- password1i exemplet ovan) är filnamnet. Värdet är base64-avkodat och läggs till som innehållet i filen i containern.
- Ange filsökvägen i den anpassade skrapkonfigurationen i ConfigMap: - Grundläggande autentisering Fältet - usernameska innehålla den faktiska användarnamnssträngen. Fältet- password_fileska innehålla sökvägen till filen som innehåller lösenordet.- # 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- Ägartoken Fältet - bearer_token_fileska innehålla sökvägen till filen som innehåller token.- # 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
Mer information om de här inställningarna finns i Dokumentation om Prometheus scrape_config .
TLS-baserad dataskrapning
Om du vill samla in Prometheus-mått från en https-slutpunkt bör Prometheus-konfigurationen, PodMonitor eller ServiceMonitor ha scheme inställd till https och ytterligare TLS-inställningar.
- Skapa en hemlighet i - kube-systemnamnområdet med namnet- ama-metrics-mtls-secret. Varje nyckel/värde-par som anges i dataavsnittet i det hemliga objektet monteras som en separat fil på den här /etc/prometheus/certs-platsen med filnamn som är samma som nycklarna som anges i dataavsnittet. De hemliga värdena ska vara base64-kodade.- Följande är ett exempel på YAML för en hemlighet: - apiVersion: v1 kind: Secret metadata: name: ama-metrics-mtls-secret namespace: kube-system type: Opaque data: <certfile>: base64_cert_content <keyfile>: base64_key_content- Hemligheten - ama-metrics-mtls-secretmonteras på- ama-metricspoddarna vid sökvägen- /etc/prometheus/certs/och görs tillgänglig för Prometheus-skrapan. Nyckeln blir filnamnet. Värdet är base64-avkodat och läggs till som innehållet i filen i containern.
- Ange filsökvägen i Prometheus-konfigurationen, PodMonitor eller ServiceMonitor: - Använd följande exempel för att ange TLS-konfigurationsinställningen i en ConfigMap:
 - 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
Grundläggande autentisering och TLS
Om du vill använda både grundläggande autentiserings- eller ägartoken (filbaserade autentiseringsuppgifter) och inställningarna för TLS-autentisering i ConfigMap kontrollerar du att hemligheten ama-metrics-mtls-secret innehåller alla nycklar under dataavsnittet med motsvarande base64-kodade värden, enligt följande exempel:
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
Anmärkning
Sökvägen /etc/prometheus/certs/ är obligatorisk, men password1 kan vara valfri sträng och måste matcha nyckeln för data i hemligheten som skapades ovan. Det beror på att hemligheten ama-metrics-mtls-secret är monterad i sökvägen /etc/prometheus/certs/ i containern.
Det base64-kodade värdet avkodas automatiskt av ama-metrics-poddarna när hemligheten monteras som fil. Kontrollera att det hemliga namnet är ama-metrics-mtls-secret och finns i kube-system namnområdet.
Hemligheten bör skapas först och sedan ska ConfigMap, PodMonitor eller ServiceMonitor skapas i kube-system namnområdet. Ordningen på hemligt skapande är viktig. När det inte finns någon hemlighet men en ConfigMap, PodMonitor eller ServiceMonitor som pekar på hemligheten visas följande fel i containerloggarna ama-metrics prometheus-collector: no file found for cert....
Mer information om TLS-konfigurationsinställningar finns i tls_config .
Avancerad konfiguration: Konfigurera anpassade Prometheus-skrapjobb för DaemonSet
              ama-metrics Replikpodden använder den anpassade Prometheus-konfigurationen och skrapar de angivna målen. För ett kluster med ett stort antal noder och pods samt en stor mängd metrik som ska insamlas, kan några av de tillämpliga anpassade insamlingsmålen avlastas från den enda ama-metrics Replica podden till ama-metrics DaemonSet podden.
              ama-metrics-prometheus-config-node ConfigMap, är liknande replikuppsättningens ConfigMap och kan skapas för att ha statiska konfigurationer för skrapning på varje nod. Skrapkonfigurationen bör endast riktas mot en enskild nod och bör inte använda tjänstidentifiering/poddanteckningar. Annars försöker varje nod skrapa alla mål och gör många anrop till Kubernetes API-servern.
Anpassade skrapmål kan följa samma format genom att använda static_configs med mål och använda $NODE_IP miljövariabeln och ange vilken port som ska skrapas. Varje podd i DaemonSet tar emot konfigurationen, skrapar mätvärdena, och skickar dem för den noden.
Följande node-exporter konfiguration är ett av standardmålen för DaemonSet-poddarna. Den använder $NODE_IP miljövariabeln, som redan har angetts för varje ama-metrics tilläggscontainer för att rikta in sig på en specifik port på noden.
- 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']
Inställningar för scrape-konfiguration
I följande avsnitt beskrivs de inställningar som stöds i Prometheus-konfigurationsfilen som används i ConfigMap. Mer information om de här inställningarna finns i konfigurationsreferensen för Prometheus .
Globala inställningar
Konfigurationsformatet för globala inställningar är detsamma som stöds av OSS prometheus-konfigurationen
global:
  scrape_interval: <duration>
  scrape_timeout: <duration>
  external_labels:
    <labelname1>: <labelvalue>
    <labelname2>: <labelvalue>
scrape_configs:
  - <job-x>
  - <job-y>
Inställningarna som anges i det globala avsnittet gäller för alla skrapjobb (både jobb i configmap och anpassade resurser) men åsidosätts om de anges i de enskilda jobben.
Anmärkning
Om du vill använda globala inställningar som gäller för alla skrapjobb och bara har anpassade resurser behöver du fortfarande skapa en ConfigMap med bara de globala inställningarna(Inställningar för var och en av dessa i de anpassade resurserna åsidosätter de i det globala avsnittet)