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 interpretieren oder verarbeiten. Stattdessen verwendet er die native Prometheus-Konfiguration wie in der Prometheus-Konfiguration definiert.

Die folgenden drei ConfigMaps können für das Scraping des benutzerdefinierten Ziels verwendet werden:

  • 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 (äußerst leerraumsensible) YAML-Konfiguration zu erstellen 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 zum Erstellen von Auslesekonfigurationen für Prometheus finden Sie in den Tipps und Beispielen für Konfigurationen. 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 für den Agent erstellen.

Das promconfigvalidator-Tool ist Teil des Azure Monitor-Metrik-Add-On-Pods. 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 den Metrik-Add-On-ConfigMaps ama-metrics-prometheus-config (oder) ama-metrics-prometheus-config-node (oder) ama-metrics-prometheus-config-node-windows im kube-system-Namespace genutzt. 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 kube-system-Namespace eine ConfigMap namens ama-metrics-prometheus-config erstellt. Anschließend wird der Azure Monitor-Metrikreplikatpod innerhalb von 30 bis 60 Sekunden neu gestartet, um die neue Konfiguration anzuwenden. Die ama-metrics-Replikatpods geben Aufschluss darüber, ob Probleme bei der Überprüfung, Verarbeitung oder Zusammenführung der Konfiguration bestehen.

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 kube-system-Namespace eine ConfigMap namens ama-metrics-prometheus-config-node erstellt. Anschließend wird jeder Linux-DaemonSet-Pod für Azure Monitor-Metriken innerhalb von 30 bis 60 Sekunden neu gestartet, um die neue Konfiguration anzuwenden. Die ama-metrics-node-Linux-DaemonSet-Pods geben Aufschluss darüber, ob Probleme bei der Überprüfung, Verarbeitung oder Zusammenführung der Konfiguration bestehen.

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 kube-system-Namespace eine ConfigMap namens ama-metrics-prometheus-config-node-windows erstellt. Anschließend wird jeder Windows-DaemonSet-Pod für Azure Monitor-Metriken innerhalb von 30 bis 60 Sekunden neu gestartet, um die neue Konfiguration anzuwenden. Die ama-metrics-win-node-Windows-DaemonSet-Pods geben Aufschluss darüber, ob Probleme bei der Überprüfung, Verarbeitung oder Zusammenführung der Konfiguration bestehen.

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 kube-system-Namespace eine ConfigMap namens ama-metrics-prometheus-config erstellt. Der Azure Monitor-Metrikpod wird neu gestartet, um die neue Konfiguration anzuwenden. Die ama-metrics-Pods geben Aufschluss darüber, ob Probleme bei der Überprüfung, Verarbeitung oder Zusammenführung der Konfiguration bestehen.

Hier finden Sie ein Beispiel für die ama-metrics-prometheus-config-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 Start Merging Default and Custom Prometheus Config (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-Replica-Pod 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.

ama-metrics-prometheus-config-node-configmap ist ähnlich wie die Replikatgruppe ConfigMap 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 viele Aufrufe an den Kubernetes-API-Server auszulösen.

Benutzerdefinierte Ausleseziele können mit static_configs demselben Format folgen, wobei die Ziele die Umgebungsvariable $NODE_IP verwenden und den auszulesenden Port angeben. Jeder Pod des DaemonSets ü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