Raccogliere metriche dai tuoi workload

Questa pagina descrive il processo di scraping delle metriche dai workload negli ambienti Google Distributed Cloud (GDC) con air gap per facilitare il monitoraggio e l'osservabilità dei dati.

Puoi eseguire lo scraping e raccogliere le metriche prodotte dai componenti nel tempo. La piattaforma di monitoraggio offre un'API personalizzata per eseguire lo scraping delle metriche dai workload in esecuzione all'interno dello spazio dei nomi del progetto Distributed Cloud. Per eseguire lo scraping delle metriche, esegui il deployment di una risorsa personalizzata MonitoringTarget nello spazio dei nomi del progetto nel server API di gestione. Al momento del deployment di questa risorsa, la piattaforma di monitoraggio avvia la raccolta dei dati.

La risorsa personalizzata MonitoringTarget indica alla pipeline di monitoraggio di eseguire lo scraping dei pod designati all'interno del progetto. Questi pod devono esporre un endpoint HTTP che fornisca metriche in un formato di esposizione Prometheus, come OpenMetrics. Le metriche sottoposte a scraping vengono quindi visualizzate nell'istanza Grafana del progetto, fornendo informazioni sullo stato operativo dell'applicazione.

Per configurare la risorsa personalizzata MonitoringTarget, devi specificare i pod all'interno dello spazio dei nomi del progetto per la raccolta delle metriche. Puoi personalizzare varie impostazioni, tra cui la frequenza di scraping, l'endpoint delle metriche dei pod, le etichette e le annotazioni.

Prima di iniziare

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

Ruoli IAM richiesti

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

  • MonitoringRule Creator (monitoringrule-creator): crea risorse personalizzate MonitoringRule nello spazio dei nomi del progetto.
  • MonitoringRule Editor (monitoringrule-editor): modifica o aggiorna le risorse personalizzate MonitoringRule nello spazio dei nomi del progetto.
  • MonitoringRule Viewer (monitoringrule-viewer): visualizza le risorse personalizzate MonitoringRule 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 Distributed Cloud 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 Distributed Cloud 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 utilizzando 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 saperne di più e per 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.