Messwerte aus Ihren Arbeitslasten erfassen

Auf dieser Seite wird der Prozess zum Scraping von Messwerten aus Arbeitslasten in Google Distributed Cloud (GDC)-Umgebungen mit Air Gap beschrieben, um das Monitoring und die Datenbeobachtbarkeit zu erleichtern.

Sie können Messwerte, die von Ihren Komponenten im Laufe der Zeit erzeugt werden, scrapen und erfassen. Die Monitoring-Plattform bietet eine benutzerdefinierte API zum Scraping von Messwerten aus ausgeführten Arbeitslasten im Namespace Ihres Distributed Cloud-Projekts. Zum Scraping von Messwerten stellen Sie eine benutzerdefinierte MonitoringTarget-Ressource im Management API-Server in Ihrem Projekt-Namespace bereit. Nach der Bereitstellung dieser Ressource initiiert die Monitoring-Plattform die Datenerfassung.

Die benutzerdefinierte MonitoringTarget-Ressource weist die Monitoring-Pipeline an, bestimmte Pods in Ihrem Projekt zu scrapen. Diese Pods müssen einen HTTP-Endpunkt bereitstellen, der Messwerte in einem Prometheus-Expositionsformat wie OpenMetrics liefert. Die gescrapten Messwerte werden dann in der Grafana-Instanz Ihres Projekts angezeigt und liefern Einblicke in den Betriebsstatus Ihrer Anwendung.

Zum Konfigurieren der benutzerdefinierten MonitoringTarget-Ressource müssen Sie die Pods in Ihrem Projekt-Namespace für die Messwerterfassung angeben. Sie können verschiedene Einstellungen anpassen, darunter die Scraping-Häufigkeit, den Messwertendpunkt der Pods, Labels und Annotationen.

Hinweis

Wenn Sie benutzerdefinierte MonitoringRule-Ressourcen verwalten möchten, fordern Sie die erforderlichen Berechtigungen von Ihrem Administrator an.

Erforderliche IAM-Rollen

Wenden Sie sich an Ihren Projekt-IAM-Administrator, um die folgenden Rollen anzufordern:

  • MonitoringRule Creator (monitoringrule-creator): Erstellen Sie benutzerdefinierte MonitoringRule-Ressourcen im Projekt-Namespace.
  • MonitoringRule Editor (monitoringrule-editor): Bearbeiten oder ändern Sie benutzerdefinierte MonitoringRule-Ressourcen im Projekt-Namespace.
  • MonitoringRule Viewer (monitoringrule-viewer): Rufen Sie benutzerdefinierte MonitoringRule-Ressourcen im Projekt-Namespace auf.

Benutzerdefinierte MonitoringTarget-Ressource konfigurieren

Die benutzerdefinierte MonitoringTarget-Ressource teilt der Monitoring-Plattform mit, wo Messwerte erfasst werden sollen. Sie können die Pods angeben, für die Sie Messwerte erfassen, den Messwertendpunkt dieser Pods, die Scraping-Häufigkeit und alle zusätzlichen Einstellungen.

Diese Ressource definiert die folgenden Konfigurationen:

  • Ziele: Die Pods und ihre Endpunkte in Ihrem Projekt, die Messwerte bereitstellen.
  • Scraping-Intervall: Wie oft Messwerte von den ausgewählten Endpunkten abgerufen werden sollen.
  • Label-Anpassungen: Optionale Regeln mit allen Label-Änderungen für Messwerte.

Wählen Sie eine der folgenden Methoden aus, um Messwertendpunkte in der benutzerdefinierten MonitoringTarget-Ressource anzugeben:

  • Statische Endpunkte: Sie deklarieren den Endpunkt (Port, Pfad, Schema) explizit in der MonitoringTarget Konfiguration.
  • Annotationen: Die Informationen zum Messwertendpunkts des Pods werden aus Annotationen in der Deployment Datei des Containers abgerufen. Diese Methode bietet mehr Flexibilität, wenn jeder Pod unterschiedliche Endpunkte hat.

Statische Endpunkte

Führen Sie die folgenden Schritte aus, um Messwerte von den ausgewählten Pods an einem statisch definierten Endpunkt bereitzustellen:

  1. Bestimmen Sie das Distributed Cloud-Projekt, aus dem Sie Messwerte für das Monitoring erfassen möchten.

  2. Deklarieren Sie in der Spezifikation Ihres Pods den Port, der Messwerte bereitstellt, im Feld containerPort. Das folgende Beispiel zeigt, wie Sie den Port 2112 in der Spezifikation des Pods deklarieren:

    # ...
    spec:
      template:
        spec:
          containers:
          - name: your-container-name
            ports:
            - containerPort: 2112
    # ...
    
  3. Geben Sie in der MonitoringTarget-Konfiguration die Endpunktdetails (Port, Pfad, Schema) im Abschnitt podMetricsEndpoints an, damit sie mit dem Port übereinstimmen, den Sie in der Spezifikation des Pods bereitgestellt haben.

    Die folgende YAML-Datei zeigt ein Beispiel für eine MonitoringTarget-Konfiguration, bei der jeder ausgewählte Pod Messwerte am selben Endpunkt bereitstellen muss: http://your-container-name:2112/metrics:

    apiVersion: monitoring.gdc.goog/v1
    kind: MonitoringTarget
    metadata:
      # Choose the same namespace as the workload pods.
      namespace: your-project-namespace
      name: your-container-name
    spec:
      selector:
          # Choose pod labels to consider for this job.
          # Optional: Map of key-value pairs.
          # Default: No filtering by label.
          # To consider every pod in the project namespace, remove selector fields.
        matchLabels:
          app: your-app-label
      podMetricsEndpoints:
        port:
          value: 2112
        path:
          # Choose any value for your endpoint.
          # The /metrics value is an example.
          value: /metrics
        scheme:
          value: http
    
  4. Wenden Sie die MonitoringTarget-Konfiguration auf den Management API-Server im selben Namespace wie Ihre Ziel-Pods an:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Ersetzen Sie Folgendes:

    • KUBECONFIG_PATH: der Pfad zur kubeconfig-Datei für den Management API-Server.
    • MONITORING_TARGET_NAME: der Name der MonitoringTarget-Definitionsdatei.

Die Monitoring-Plattform beginnt mit der Erfassung von Messwerten.

Annotationen

Führen Sie die folgenden Schritte aus, um Messwerte mithilfe von Annotationen bereitzustellen, wenn jeder Pod unterschiedliche Endpunkte hat:

  1. Bestimmen Sie das Distributed Cloud-Projekt, aus dem Sie Messwerte für das Monitoring erfassen möchten.

  2. Fügen Sie dem Abschnitt annotations der Deployment-Datei Ihres Containers die folgenden Annotationen hinzu:

    • prometheus.io/path
    • prometheus.io/port
    • prometheus.io/scheme

    Das folgende Beispiel zeigt Annotationen für Messwerte am Port 2112:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: your-container-name
      namespace: your-project-namespace
      labels:
        app: your-app-label
      annotations:
        # These annotations are not required. They demonstrate selecting
        # pod metric endpoints through annotations.
        prometheus.io/path: /metrics
        prometheus.io/port: \"2112\"
        prometheus.io/scheme: http
    
  3. Geben Sie in der MonitoringTarget-Konfiguration die Annotationen an, die Sie der Deployment-Datei des Containers hinzugefügt haben, im Abschnitt podMetricsEndpoints an. Diese Spezifikation weist die benutzerdefinierte Ressource an, die Informationen zum Messwertendpunkt aus Annotationen in den ausgewählten Pods zu erfassen.

    Die folgende YAML-Datei zeigt ein Beispiel für eine MonitoringTarget-Konfiguration mit Annotationen:

    apiVersion: monitoring.gdc.goog/v1
    kind: MonitoringTarget
    metadata:
    metadata:
      # Choose the same namespace as the workload pods.
      namespace: your-project-namespace
      name: your-container-name
    spec:
      selector:
        matchLabels:
          app: your-app-label
      podMetricsEndpoints:
        port:
          annotation: prometheus.io/port
        path:
          annotation: prometheus.io/path
        scheme:
          annotation: prometheus.io/scheme
    
  4. Wenden Sie die MonitoringTarget-Konfiguration auf den Management API-Server im selben Namespace wie Ihre Ziel-Pods an:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Ersetzen Sie Folgendes:

    • KUBECONFIG_PATH: der Pfad zur kubeconfig-Datei für den Management API-Server.
    • MONITORING_TARGET_NAME: der Name der MonitoringTarget-Definitionsdatei.

Die Monitoring-Plattform beginnt mit der Erfassung von Messwerten.

Weitere Felder und Optionen finden Sie in der vollständigen MonitoringTarget Spezifikation und in der API-Referenzdokumentation.

Vollständige MonitoringTarget-Spezifikation

Die folgende YAML-Datei zeigt ein Beispiel für die vollständige Spezifikation der benutzerdefinierten MonitoringTarget-Ressource. Weitere Informationen und eine vollständige Beschreibung der Felder finden Sie in der API-Referenzdokumentation.

apiVersion: monitoring.gdc.goog/v1
kind: MonitoringTarget
metadata:
  # Choose the same namespace as the workload pods.
  namespace: PROJECT_NAMESPACE
  name: MONITORING_TARGET_NAME
spec:
  # Choose matching pattern that identifies pods for this job.
  # Optional
  # Relationship between different selectors: AND
  selector:
    # Choose clusters to consider for this job.
    # Optional: List
    # Default: All clusters applicable to this project.
    # Relationship between different list elements: OR
    matchClusters:
    - string

    # Choose pod labels to consider for this job.
    # Optional: Map of key-value pairs.
    # Default: No filtering by label.
    # Relationship between different pairs: AND
    matchLabels:
      key1: value1

    # Choose annotations to consider for this job.
    # Optional: Map of key-value pairs
    # Default: No filtering by annotation
    # Relationship between different pairs: AND
    matchAnnotations:
      key1: value1

  # Configure the endpoint exposed for this job.
  podMetricsEndpoints:
    # Choose a port either through static value or annotation.
    # Optional
    # Annotation takes priority.
    # Default: static port 80
    port:
      value: integer
      annotation: string

    # Choose a path either through static value or annotation.
    # Optional
    # Annotation takes priority
    # Default: static path /metrics
    path:
      value: string
      annotation: string

    # Choose a scheme either through a static value (http or https) or annotation.
    # Optional
    # Annotation takes priority
    # Default: static scheme http
    scheme:
      value: string
      annotation: string

    # Choose the frequency to scrape the metrics endpoint defined in podMetricsEndpoints
    # Optional
    # Default: 60s
    scrapeInterval: string

    # Dynamically rewrite the label set of a target before it gets scraped.
    # https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
    # Optional
    # Default: No filtering by label
    metricsRelabelings:
    - sourceLabels:
      - string
      separator: string
      regex: string
      action: string
      targetLabel: string
      replacement: string

Ersetzen Sie Folgendes:

  • PROJECT_NAMESPACE: Ihr Projekt-Namespace.
  • MONITORING_TARGET_NAME: der Name der MonitoringTarget-Definitionsdatei.