Raccogliere metriche dai tuoi workload

L'appliance Google Distributed Cloud (GDC) con air gap consente di eseguire lo scraping e raccogliere le metriche dai tuoi workload nel tempo per monitorare le prestazioni delle applicazioni e mantenere l'osservabilità dei dati. Per avviare la raccolta delle metriche, esegui il deployment di una risorsa personalizzata MonitoringTarget nello spazio dei nomi del progetto sul server API di gestione.

La risorsa personalizzata MonitoringTarget indica alla pipeline di monitoraggio di eseguire lo scraping dei pod designati che espongono un endpoint HTTP in un formato di esposizione Prometheus, come OpenMetrics. Puoi personalizzare la frequenza di scraping, le impostazioni degli endpoint, le etichette e le annotazioni per i pod di destinazione. L'istanza Grafana del tuo progetto visualizza le metriche raccolte in modo da poter analizzare lo stato operativo della tua applicazione.

Prima di iniziare

Per gestire le risorse personalizzate MonitoringTarget, richiedi le autorizzazioni necessarie all'amministratore.

Ruoli IAM richiesti

Contatta l'amministratore IAM del progetto per richiedere i seguenti ruoli:

  • MonitoringTarget Creator (monitoringtarget-creator): crea risorse personalizzate MonitoringTarget nello spazio dei nomi del progetto.
  • MonitoringTarget Editor (monitoringtarget-editor): modifica o elimina le risorse personalizzate MonitoringTarget nello spazio dei nomi del progetto.
  • MonitoringTarget Viewer (monitoringtarget-viewer): visualizza le risorse personalizzate MonitoringTarget nello spazio dei nomi del progetto.

Configura la risorsa personalizzata MonitoringTarget

La risorsa personalizzata MonitoringTarget indica alla piattaforma di monitoraggio da dove raccogliere le metriche. Puoi specificare i pod per i quali raccogli le metriche, l'endpoint delle metriche di questi pod, la frequenza di scraping e qualsiasi altra impostazione aggiuntiva.

Questa risorsa definisce le seguenti configurazioni:

  • Target: i pod e i relativi endpoint all'interno del progetto che espongono le metriche.
  • Intervallo di scraping: la frequenza con cui vuoi estrarre le metriche dagli endpoint selezionati.
  • Personalizzazioni delle etichette: regole facoltative con eventuali modifiche alle etichette per le metriche.

Scegli uno dei seguenti metodi per specificare gli endpoint delle metriche nella risorsa personalizzata MonitoringTarget:

  • Endpoint statici: dichiari esplicitamente l'endpoint (porta, percorso, schema) nella configurazione di MonitoringTarget.
  • Annotazioni: le informazioni sull'endpoint delle metriche del pod vengono recuperate dalle annotazioni all'interno del file Deployment del container. Questo metodo offre una maggiore flessibilità se ogni pod ha endpoint diversi.

Endpoint statici

Segui questi passaggi per esporre le metriche dei pod selezionati su un endpoint definito staticamente:

  1. Determina il progetto dell'appliance GDC con air gap da cui vuoi raccogliere le metriche per il monitoraggio.

  2. Nella specifica del pod, dichiara la porta che fornisce le metriche nel campo containerPort. L'esempio seguente mostra come dichiarare la porta 2112 nella specifica del pod:

    # ...
    spec:
      template:
        spec:
          containers:
          - name: your-container-name
            ports:
            - containerPort: 2112
    # ...
    
  3. Nella configurazione di MonitoringTarget, specifica i dettagli dell'endpoint (porta, percorso, schema) nella sezione podMetricsEndpoints in modo che corrispondano alla porta esposta nella specifica del pod.

    Il seguente file YAML mostra un esempio di configurazione MonitoringTarget in cui ogni pod selezionato deve esporre le metriche sullo stesso endpoint, 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. Applica la configurazione MonitoringTarget al server dell'API di gestione all'interno dello stesso spazio dei nomi dei pod di destinazione:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Sostituisci quanto segue:

    • KUBECONFIG_PATH: il percorso del file kubeconfig per il server API di gestione.
    • MONITORING_TARGET_NAME: il nome del file di definizione MonitoringTarget.

La piattaforma di monitoraggio inizia a raccogliere le metriche.

Annotazioni

Segui questi passaggi per esporre le metriche utilizzando le annotazioni se ogni pod ha endpoint diversi:

  1. Determina il progetto dell'appliance GDC con air gap da cui vuoi raccogliere le metriche per il monitoraggio.

  2. Aggiungi le seguenti annotazioni alla sezione annotations del file Deployment del container:

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

    L'esempio seguente mostra le annotazioni per le metriche sulla porta 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. Nella configurazione di MonitoringTarget, specifica le annotazioni che hai aggiunto al file Deployment del container nella sezione podMetricsEndpoints. Questa specifica indica alla risorsa personalizzata di raccogliere le informazioni sull'endpoint delle metriche dalle annotazioni sui pod selezionati.

    Il seguente file YAML mostra un esempio di configurazione di MonitoringTarget che utilizza le annotazioni:

    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. Applica la configurazione MonitoringTarget al server dell'API di gestione all'interno dello stesso spazio dei nomi dei pod di destinazione:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Sostituisci quanto segue:

    • KUBECONFIG_PATH: il percorso del file kubeconfig per il server API di gestione.
    • MONITORING_TARGET_NAME: il nome del file di definizione MonitoringTarget.

La piattaforma di monitoraggio inizia a raccogliere le metriche.

Consulta la specifica MonitoringTarget completa e la documentazione di riferimento dell'API per ulteriori campi e opzioni.

Specifica MonitoringTarget completa

Il seguente file YAML mostra un esempio della specifica completa della risorsa personalizzata MonitoringTarget. Per ulteriori informazioni e una descrizione completa dei campi, consulta la documentazione di riferimento dell'API.

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

Sostituisci quanto segue:

  • PROJECT_NAMESPACE: lo spazio dei nomi del progetto.
  • MONITORING_TARGET_NAME: il nome del file di definizione MonitoringTarget.