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 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 seu projeto do Distributed Cloud. 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 - Deploymentdo 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:
- Determine o projeto do Distributed Cloud a partir do qual quer recolher métricas para monitorização. 
- Na especificação do agrupamento, declare a porta que publica métricas no campo - containerPort. O exemplo seguinte mostra como declarar port- 2112na especificação do pod:- # ... spec: template: spec: containers: - name: your-container-name ports: - containerPort: 2112 # ...
- Na configuração do - MonitoringTarget, especifique os detalhes do ponto final (porta, caminho, esquema) na secção- podMetricsEndpointspara corresponder à porta que expôs na especificação do pod.- O ficheiro YAML seguinte mostra um exemplo de uma - MonitoringTargetconfiguraçã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
- Aplique a configuração - MonitoringTargetao 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:
- Determine o projeto do Distributed Cloud a partir do qual quer recolher métricas para monitorização. 
- Adicione as seguintes anotações à secção - annotationsdo ficheiro- Deploymentdo 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
- Na configuração do - MonitoringTarget, especifique as anotações que adicionou ao ficheiro- Deploymentdo 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 - MonitoringTargetconfiguraçã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
- Aplique a configuração - MonitoringTargetao 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.