Coletar métricas das cargas de trabalho

Esta página descreve o processo de extração de métricas de cargas de trabalho em ambientes isolados do Google Distributed Cloud (GDC) para facilitar o monitoramento e a observabilidade de dados.

É possível extrair e coletar métricas que seus componentes produzem ao longo do tempo. A plataforma de monitoramento oferece uma API personalizada para extrair métricas de cargas de trabalho em execução no namespace do projeto do Distributed Cloud. Para extrair métricas, implante um recurso personalizado MonitoringTarget no namespace do projeto no servidor da API Management. Após a implantação desse recurso, a plataforma de monitoramento inicia a coleta de dados.

O recurso personalizado MonitoringTarget direciona o pipeline de monitoramento para extrair pods designados no seu projeto. Esses pods precisam expor um endpoint HTTP que forneça métricas em um formato de exposição do Prometheus, como o OpenMetrics. As métricas extraídas são mostradas na instância do Grafana do projeto, fornecendo insights sobre o estado operacional do aplicativo.

Para configurar o recurso personalizado MonitoringTarget, especifique os pods no namespace do projeto para coleta de métricas. É possível personalizar várias configurações, incluindo a frequência de raspagem, o endpoint de métricas dos pods, rótulos e anotações.

Antes de começar

Para receber as permissões necessárias para gerenciar recursos personalizados do MonitoringTarget, peça ao administrador do IAM da organização ou do projeto para conceder a você uma das funções associadas do MonitoringTarget.

Dependendo do nível de acesso e das permissões necessárias, você pode receber papéis de criador, editor ou leitor para esse recurso em uma organização ou um projeto. Para mais informações, consulte Preparar permissões do IAM.

Configurar o recurso personalizado MonitoringTarget

O recurso personalizado MonitoringTarget informa à plataforma de monitoramento onde coletar métricas. É possível especificar os pods para os quais você está coletando métricas, o endpoint de métricas desses pods, a frequência de coleta e outras configurações.

Esse recurso define as seguintes configurações:

  • Destinos: os pods e os endpoints no seu projeto que expõem métricas.
  • Intervalo de extração: a frequência com que você quer extrair métricas dos endpoints selecionados.
  • Personalizações de marcador: regras opcionais com modificações de marcador para métricas.

Escolha um dos seguintes métodos para especificar endpoints de métricas no recurso personalizado MonitoringTarget:

  • Endpoints estáticos: você declara explicitamente o endpoint (porta, caminho, esquema) na configuração MonitoringTarget.
  • Anotações: as informações do endpoint de métricas do pod são recuperadas de anotações no arquivo Deployment do contêiner. Esse método oferece mais flexibilidade se cada pod tiver endpoints diferentes.

Endpoints estáticos

Siga estas etapas para expor métricas dos pods selecionados em um endpoint definido estaticamente:

  1. Determine o projeto do Distributed Cloud de que você quer coletar métricas para monitoramento.

  2. Na especificação do pod, declare a porta que atende às métricas no campo containerPort. O exemplo a seguir mostra como declarar a porta 2112 na especificação do pod:

    # ...
    spec:
      template:
        spec:
          containers:
          - name: your-container-name
            ports:
            - containerPort: 2112
    # ...
    
  3. Na configuração MonitoringTarget, especifique os detalhes do endpoint (porta, caminho, esquema) na seção podMetricsEndpoints para corresponder à porta exposta na especificação do pod.

    O arquivo YAML a seguir mostra um exemplo de configuração de MonitoringTarget em que cada pod selecionado precisa expor métricas no mesmo 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. Aplique a configuração MonitoringTarget ao servidor da API Management no mesmo namespace dos pods de destino:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Substitua:

    • KUBECONFIG_PATH: o caminho para o arquivo kubeconfig do servidor da API Management.
    • MONITORING_TARGET_NAME: o nome do arquivo de definição de MonitoringTarget.

A plataforma de monitoramento começa a coletar métricas.

Anotações

Siga estas etapas para expor métricas usando anotações se cada pod tiver endpoints diferentes:

  1. Determine o projeto do Distributed Cloud de que você quer coletar métricas para monitoramento.

  2. Adicione as seguintes anotações à seção annotations do arquivo Deployment do contêiner:

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

    O exemplo a seguir mostra anotações para métricas na 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. Na configuração MonitoringTarget, especifique as anotações que você adicionou ao arquivo Deployment do contêiner na seção podMetricsEndpoints. Essa especificação informa ao recurso personalizado para coletar as informações do endpoint de métricas das anotações nos pods selecionados.

    O arquivo YAML a seguir mostra um exemplo de configuração do MonitoringTarget usando anotações:

    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. Aplique a configuração MonitoringTarget ao servidor da API Management no mesmo namespace dos pods de destino:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Substitua:

    • KUBECONFIG_PATH: o caminho para o arquivo kubeconfig do servidor da API Management.
    • MONITORING_TARGET_NAME: o nome do arquivo de definição de MonitoringTarget.

A plataforma de monitoramento começa a coletar métricas.

Consulte a especificação completa de MonitoringTarget e a documentação de referência da API para mais campos e opções.

Especificação completa de MonitoringTarget

O arquivo YAML a seguir mostra um exemplo da especificação completa do recurso personalizado MonitoringTarget. Para mais informações e uma descrição completa dos campos, consulte a documentação de referência da 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

Substitua:

  • PROJECT_NAMESPACE: o namespace do projeto.
  • MONITORING_TARGET_NAME: o nome do arquivo de definição de MonitoringTarget.