Freigeben über


Erstellen und Überprüfen einer benutzerdefinierten Konfigurationsdatei für Prometheus-Metriken in Azure Monitor

Neben den standardmäßigen Auslesezielen, die der Azure Monitor Prometheus-Agent standardmäßig ausliest, verwenden Sie die folgenden Schritte, um mithilfe einer ConfigMap weitere Auslesekonfigurationen für den Agent bereitzustellen. Der Azure Monitor-Prometheus-Agent kann keine Operator-CRDs für die Auslesekonfiguration verstehen oder verarbeiten. Stattdessen verwendet er die native Prometheus-Konfiguration wie in der Prometheus-Konfiguration definiert.

Die drei ConfigMaps, die für das Scraping (Auslesen) des benutzerdefinierten Ziels verwendet werden, sind –

  • ama-metrics-prometheus-config (empfohlen): Wenn eine ConfigMap mit diesem Namen erstellt wird, werden die darin definierten Ausleseaufträge über den Azure Monitor-Metrikreplikatpod ausgeführt, der im Cluster ausgeführt wird.
  • ama-metrics-prometheus-config-node (erweitert): Wenn eine ConfigMap mit diesem Namen erstellt wird, werden die darin definierten Ausleseaufträge über die einzelnen Linux-DaemonSet-Pods ausgeführt, die im Cluster ausgeführt werden. Weitere Informationen finden Sie unter Erweitertes Setup.
  • ama-metrics-prometheus-config-node-windows (erweitert): Wenn eine ConfigMap mit diesem Namen erstellt wird, werden die darin definierten Ausleseaufträge über die einzelnen Windows-DaemonSets ausgeführt. Weitere Informationen finden Sie unter Erweitertes Setup.

Erstellen der Prometheus-Konfigurationsdatei

Eine einfachere Möglichkeit zum Erstellen von Prometheus-Auslesekonfigurationsaufträgen:

  • Schritt 1: Verwenden einer Konfigurationsdatei (YAML) zum Erstellen/Definieren von Ausleseaufträgen
  • Schritt 2: Überprüfen der Auslesekonfigurationsdatei mithilfe eines benutzerdefinierten Tools (wie in diesem Artikel angegeben) und anschließendes Konvertieren der Konfigurationsdatei in ConfigMap
  • Schritt 3: Bereitstellen der Auslesekonfigurationsdatei als ConfigMap für Ihre Cluster

Auf diese Weise ist es einfacher, die YAML-Konfiguration zu erstellen (die äußerst sensibel auf Leerzeichen ist) und keine unbeabsichtigten Leerzeichen hinzuzufügen, indem Sie die Auslesekonfiguration direkt innerhalb der ConfigMap erstellen.

Erstellen Sie eine Prometheus-Auslesekonfigurationsdatei namens prometheus-config. Weitere Informationen und Details zum Erstellen von Auslesekonfigurationen für Prometheus finden Sie in unter Tipps und Beispiele für die Konfiguration. Sie können sich auch in der Referenz zur Prometheus.io-Auslesekonfiguration informieren. In Ihrer Konfigurationsdatei werden die Auslesekonfigurationen im Abschnitt scrape_configs aufgeführt. Optional kann der globale Abschnitt zum Festlegen der globalen Werte für scrape_interval, scrape_timeout und external_labels verwendet werden.

Tipp

Änderungen am globalen Abschnitt wirken sich auf die Standardkonfigurationen und die benutzerdefinierte Konfiguration aus.

Nachfolgend ein Beispiel für eine Prometheus-Auslesekonfigurationsdatei:

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"

Überprüfen der Auslesekonfigurationsdatei

Der Agent verwendet ein benutzerdefiniertes promconfigvalidator-Tool, um die Prometheus-Konfiguration zu überprüfen, die über die ConfigMap zugewiesen wurde. Wenn die Konfiguration ungültig ist, wird die angegebene benutzerdefinierte Konfiguration vom Add-On-Agent zurückgewiesen. Sobald Sie über ihre Prometheus-Konfigurationsdatei verfügen, können Sie Ihre Konfiguration optional mit dem promconfigvalidator-Tool überprüfen, bevor Sie eine ConfigMap erstellen, die vom Agent eingelesen wird.

Das promconfigvalidator-Tool wird innerhalb der Azure Monitor-Metrik-Add-On-Pods geliefert. Sie können einen der ama-metrics-node-*-Pods im kube-system-Namespace in Ihrem Cluster verwenden, um das Überprüfungstool herunterzuladen. Verwenden Sie kubectl cp, um das Tool und dessen Konfiguration herunterzuladen:

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

Nachdem Sie die ausführbare Datei und YAML-Datei kopiert haben, suchen Sie den Pfad zu der von Ihnen erstellten Prometheus-Konfigurationsdatei. Ersetzen Sie dann <config path> im Befehl, und führen Sie das Überprüfungstool mit folgendem Befehl aus:

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

Durch die Ausführung des Überprüfungstools wird die zusammengeführte Konfigurationsdatei merged-otel-config.yaml erstellt, wenn mit dem optionalen output-Parameter kein Pfad angegeben wird. Sie sollten diese automatisch generierte zusammengeführte Datei nicht als Konfigurationsdatei für den Agent für Metriksammlungen verwenden, da sie nur für Überprüfungen und zu Debugzwecken verwendet wird.

Bereitstellen der Konfigurationsdatei als Configmap

Ihre benutzerdefinierte Prometheus-Konfigurationsdatei wird als Feld mit dem Namen prometheus-config in Metrik-Add-On-ConfigMap(s) ama-metrics-prometheus-config (oder) ama-metrics-prometheus-config-node (oder) ama-metrics-prometheus-config-node-windows im kube-system-Namespace eingelesen. Sie können eine ConfigMap aus der oben erstellten Auslesekonfigurationsdatei erstellen, indem Sie Ihre Prometheus-Konfigurationsdatei in prometheus-config (ohne Dateierweiterung) umbenennen und einen oder mehrere der folgenden Befehle ausführen, je nachdem, welche ConfigMap Sie für die Konfiguration Ihrer benutzerdefinierten Ausleseaufträge erstellen möchten.

Beispiel: Erstellen einer ConfigMap zur Verwendung durch replicsset

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

Dadurch wird im ama-metrics-prometheus-config-Namespace eine ConfigMap namens kube-system erstellt. Der Azure Monitor-Metrikreplikatpod wird innerhalb von 30 bis 60 Sekunden neu gestartet, um die neue Konfiguration anzuwenden. Um festzustellen, ob es Probleme bei der Validierung, Verarbeitung oder Zusammenführung der Konfiguration gibt, können Sie sich die ama-metrics-Replikatpods ansehen.

Beispiel: Erstellen einer ConfigMap zur Verwendung durch das Linux-DaemonSet

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

Dadurch wird im ama-metrics-prometheus-config-node-Namespace eine ConfigMap namens kube-system erstellt. Jeder Linux-DaemonSet-Pod der Azure Monitor-Metriken startet in 30-60 Sek. neu, um die neue Konfiguration anzuwenden. Um festzustellen, ob Probleme mit der Überprüfung, Verarbeitung oder Zusammenführung der Konfiguration auftreten, können Sie sich die Linux-DaemonSet-Pods ama-metrics-node ansehen

Beispiel: Erstellen einer ConfigMap zur Verwendung durch das Windows-DaemonSet

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

Dadurch wird im ama-metrics-prometheus-config-node-windows-Namespace eine ConfigMap namens kube-system erstellt. Jeder Windows DaemonSet-Pod für Azure Monitor-Metriken startet innerhalb von 30 bis 60 Sekunden neu, um die neue Konfiguration anzuwenden. Wenn Sie prüfen möchten, ob Probleme bei der Validierung, Verarbeitung oder Zusammenführung der Konfiguration bestehen, können Sie die ama-metrics-win-node-Windows-DaemonSet-Pods betrachten.

Stellen Sie sicher, dass die Prometheus-Konfigurationsdatei den Namen prometheus-config hat, bevor Sie den folgenden Befehl ausführen, da der Dateiname als Name für die ConfigMap-Einstellung verwendet wird.

Dadurch wird im ama-metrics-prometheus-config-Namespace eine ConfigMap namens kube-system erstellt. Der Azure Monitor-Metrikpod wird neu gestartet, um die neue Konfiguration anzuwenden. Um zu überprüfen, ob Probleme bei der Validierung, Verarbeitung oder Zusammenführung der Konfiguration bestehen, können Sie die ama-metrics-Pods ansehen.

ama-metrics-prometheus-config finden Sie ein Beispiel für die -ConfigMap.

Problembehandlung

Wenn Sie die ConfigMap (ama-metrics-prometheus-config oder ama-metrics-prometheus-config-node) erfolgreich im kube-system-Namespace erstellt haben und noch immer kein Scraping der benutzerdefinierten Ziele erfolgt, überprüfen Sie die Protokolle im Replikatpod für die ConfigMap ama-metrics-prometheus-config oder die Protokolle im DaemonSet-Pod für die ConfigMap ama-metrics-prometheus-config-node mithilfe von kubectl-Protokollen auf Fehler, und stellen Sie sicher, dass im Abschnitt Zusammenführen von Standard- und benutzerdefinierter Prometheus-Konfiguration starten mit dem Präfix prometheus-config-merger keine Fehler vorhanden sind

Hinweis

Erweitertes Setup: Konfigurieren benutzerdefinierter Prometheus-Ausleseaufträge für das DaemonSet

Der ama-metrics-Replikatpod nutzt die benutzerdefinierte Prometheus-Konfiguration und liest die angegebenen Ziele aus. Für einen Cluster mit einer großen Anzahl von Knoten und Pods und zahlreichen auszulesenden Metriken können einige der anwendbaren benutzerdefinierten Ausleseziele aus dem einzelnen ama-metrics-Replica-Pod in den ama-metrics-DaemonSet-Pod umgelagert werden.

Die ConfigMap ama-metrics-prometheus-config-node ist ähnlich wie die ConfigMap der Replikatgruppe und kann mit statischen Auslesekonfigurationen auf jedem Knoten erstellt werden. Die Auslesekonfiguration sollte nur auf einen einzelnen Knoten ausgerichtet sein und keine Dienstermittlung/Podanmerkungen verwenden. Andernfalls versucht jeder Knoten, alle Ziele auszulesen und führt viele Aufrufe an den Kubernetes-API-Server durch.

Benutzerdefinierte Ausleseziele können demselben Format folgen, indem static_configs mit Zielen und die Umgebungsvariable $NODE_IP verwendet werden und den auszulesenden Port angeben. Jeder Pod des DaemonSet übernimmt die Konfiguration, liest die Metriken aus und sendet sie für diesen Knoten.

Beispiel: Die folgende node-exporter-Konfiguration entspricht einem der Standardziele für die DaemonSet-Pods. Sie verwendet die Umgebungsvariable $NODE_IP. Diese ist bereits für jeden ama-metrics-Add-On-Container so festgelegt, dass sie einen bestimmten Port auf dem Knoten zum Ziel hat.

- 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']

Nächste Schritte