Raccogli le metriche dai tuoi carichi di lavoro

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

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

La risorsa personalizzata MonitoringTarget indirizza la pipeline di monitoraggio a 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, ad esempio OpenMetrics. Le metriche sottoposte a scraping vengono poi 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 ottenere le autorizzazioni necessarie per gestire le risorse personalizzate MonitoringTarget, chiedi all'amministratore IAM dell'organizzazione o all'amministratore IAM del progetto di concederti uno dei ruoli MonitoringTarget associati.

A seconda del livello di accesso e delle autorizzazioni di cui hai bisogno, potresti ottenere i ruoli di creatore, editor o visualizzatore per questa risorsa in un'organizzazione o in un progetto. Per maggiori informazioni, vedi Preparare le autorizzazioni IAM.

Configurare 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 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 delle 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 MonitoringTarget.
  • Annotazioni: le informazioni sull'endpoint della metrica del pod vengono recuperate dalle annotazioni all'interno del file Deployment del container. Questo metodo offre 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 pubblica le metriche nel campo containerPort. L'esempio seguente mostra come dichiarare port 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 che hai esposto 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 Management 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 dell'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 contenitore 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 Management 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 dell'API di gestione.
    • MONITORING_TARGET_NAME: il nome del file di definizione MonitoringTarget.

La piattaforma di monitoraggio inizia a raccogliere le metriche.

Per ulteriori campi e opzioni, consulta le specifiche MonitoringTarget complete e la documentazione di riferimento dell'API.

Specifiche MonitoringTarget complete

Il seguente file YAML mostra un esempio per la 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.