Recolha métricas das suas cargas de trabalho

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

Pode extrair e recolher métricas que os seus componentes produzem ao longo do tempo. A plataforma de monitorização oferece uma API personalizada para extrair métricas de cargas de trabalho em execução no espaço de nomes do projeto do dispositivo isolado do GDC. Para extrair métricas, implemente um recurso personalizado MonitoringTarget no espaço de nomes do seu projeto no servidor da API Management. Após a implementação deste recurso, a plataforma de monitorização inicia a recolha de dados.

O recurso personalizado MonitoringTarget direciona o pipeline de monitorização para extrair dados de pods designados no seu projeto. Estes pods têm de expor um ponto final HTTP que forneça métricas num formato de exposição do Prometheus, como o OpenMetrics. As métricas extraídas são apresentadas na instância do Grafana do seu projeto, fornecendo estatísticas sobre o estado operacional da sua aplicação.

Para configurar o recurso personalizado MonitoringTarget, tem de especificar os pods no espaço de nomes do projeto para a recolha de métricas. Pode personalizar várias definições, incluindo a frequência de recolha de dados, o ponto final de métricas dos pods, as etiquetas e as anotações.

Antes de começar

Para receber as autorizações necessárias para gerir recursos personalizados, peça ao administrador de IAM da organização ou ao administrador de IAM do projeto que lhe conceda uma das funções associadas.MonitoringTargetMonitoringTarget

Consoante o nível de acesso e as autorizações de que precisa, pode obter as funções de criador, editor ou leitor para este recurso numa organização ou num projeto. Para mais informações, consulte o artigo Prepare as autorizações de IAM.

Configure o MonitoringTarget recurso personalizado

O recurso personalizado MonitoringTarget indica à plataforma de monitorização onde recolher métricas. Pode especificar os agrupamentos para os quais está a recolher métricas, o ponto final de métricas desses agrupamentos, a frequência de recolha e quaisquer definições adicionais.

Este recurso define as seguintes configurações:

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

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

  • Pontos finais estáticos: declara explicitamente o ponto final (porta, caminho, esquema) na configuração MonitoringTarget.
  • Anotações: as informações do ponto final da métrica do agrupamento são obtidas a partir de anotações no ficheiro Deployment do contentor. Este método oferece mais flexibilidade se cada pod tiver pontos finais diferentes.

Endpoints estáticos

Siga estes passos para expor métricas dos seus pods selecionados num ponto final definido estaticamente:

  1. Determine o projeto do dispositivo isolado do GDC a partir do qual quer recolher métricas para monitorização.

  2. Na especificação do agrupamento, declare a porta que publica métricas no campo containerPort. O exemplo seguinte mostra como declarar port 2112 na especificação do pod:

    # ...
    spec:
      template:
        spec:
          containers:
          - name: your-container-name
            ports:
            - containerPort: 2112
    # ...
    
  3. Na configuração do MonitoringTarget, especifique os detalhes do ponto final (porta, caminho, esquema) na secção podMetricsEndpoints para corresponder à porta que expôs na especificação do pod.

    O ficheiro YAML seguinte mostra um exemplo de uma MonitoringTarget configuração em que cada pod selecionado tem de expor métricas no mesmo ponto final, 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 espaço de nomes que os seus pods de destino:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Substitua o seguinte:

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

A plataforma de monitorização começa a recolher métricas.

Notas

Siga estes passos para expor métricas através de anotações se cada agrupamento tiver endpoints diferentes:

  1. Determine o projeto do dispositivo isolado do GDC a partir do qual quer recolher métricas para monitorização.

  2. Adicione as seguintes anotações à secção annotations do ficheiro Deployment do contentor:

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

    O exemplo seguinte 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 do MonitoringTarget, especifique as anotações que adicionou ao ficheiro Deployment do contentor na secção podMetricsEndpoints. Esta especificação indica ao recurso personalizado que recolha as informações do ponto final de métricas das anotações nos pods selecionados.

    O ficheiro YAML seguinte mostra um exemplo de uma MonitoringTarget configuração com 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 espaço de nomes que os seus pods de destino:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Substitua o seguinte:

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

A plataforma de monitorização começa a recolher métricas.

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

Preencha a especificação de MonitoringTarget

O ficheiro YAML seguinte 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 o seguinte:

  • PROJECT_NAMESPACE: o espaço de nomes do seu projeto.
  • MONITORING_TARGET_NAME: o nome do ficheiro de definição MonitoringTarget.