Nesta página, descrevemos o processo de extração de métricas de cargas de trabalho em ambientes com isolamento físico 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 na nuvem do Distributed Cloud. Para coletar métricas,
você implanta um recurso personalizado MonitoringTarget no namespace do projeto no
servidor de 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 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 coletadas são exibidas na instância do Grafana do seu projeto,
fornecendo insights sobre o estado operacional do aplicativo.
Para configurar o recurso personalizado MonitoringTarget, especifique os pods
no namespace do projeto para a coleta de métricas. É possível personalizar várias
configurações, incluindo a frequência de extração, o endpoint de métricas dos pods, os rótulos
e as anotações.
Antes de começar
Para gerenciar recursos personalizados do MonitoringRule, peça as permissões necessárias ao administrador.
Papéis necessários do IAM
Entre em contato com o administrador do projeto do IAM para solicitar os seguintes papéis:
- Criador de MonitoringRule (
monitoringrule-creator): cria recursos personalizadosMonitoringRuleno namespace do projeto. - Editor de MonitoringRule (
monitoringrule-editor): editar ou modificar recursos personalizadosMonitoringRuleno namespace do projeto. - Leitor de MonitoringRule (
monitoringrule-viewer): confira os recursos personalizadosMonitoringRuleno namespace do projeto.
Configurar o recurso personalizado MonitoringTarget
O recurso personalizado MonitoringTarget informa à plataforma de monitoramento de 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 raspagem e outras
configurações.
Esse recurso define as seguintes configurações:
- Destinos: os pods e os endpoints no projeto que expõem métricas.
- Intervalo de extração: com que frequência você quer extrair métricas dos endpoints selecionados.
- Personalizações de rótulos: regras opcionais com modificações de rótulos 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
Deploymentdo contêiner. Esse método oferece mais flexibilidade se cada pod tiver endpoints diferentes.
Endpoints estáticos
Siga estas etapas para expor as métricas dos pods selecionados em um endpoint definido estaticamente:
Determine o projeto na nuvem do Distributed Cloud de onde você quer coletar métricas para monitoramento.
Na especificação do pod, declare a porta que exibe as métricas no campo
containerPort. O exemplo a seguir mostra como declarar a porta2112na especificação do pod:# ... spec: template: spec: containers: - name: your-container-name ports: - containerPort: 2112 # ...Na configuração
MonitoringTarget, especifique os detalhes do endpoint (porta, caminho, esquema) na seçãopodMetricsEndpointspara corresponder à porta que você expôs na especificação do pod.O arquivo YAML a seguir mostra um exemplo de configuração
MonitoringTargetem 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: httpAplique a configuração
MonitoringTargetao servidor de API Management no mesmo namespace dos pods de destino:kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yamlSubstitua:
KUBECONFIG_PATH: o caminho para o arquivo kubeconfig do servidor de API Management.MONITORING_TARGET_NAME: o nome do arquivo de definição deMonitoringTarget.
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:
Determine o projeto na nuvem do Distributed Cloud de onde você quer coletar métricas para monitoramento.
Adicione as seguintes anotações à seção
annotationsdo arquivoDeploymentdo contêiner:prometheus.io/pathprometheus.io/portprometheus.io/scheme
O exemplo a seguir mostra as 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: httpNa configuração
MonitoringTarget, especifique as anotações adicionadas ao arquivoDeploymentdo contêiner na seçãopodMetricsEndpoints. Essa especificação instrui o recurso personalizado a 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 de
MonitoringTargetusando 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/schemeAplique a configuração
MonitoringTargetao servidor de API Management no mesmo namespace dos pods de destino:kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yamlSubstitua:
KUBECONFIG_PATH: o caminho para o arquivo kubeconfig do servidor de API Management.MONITORING_TARGET_NAME: o nome do arquivo de definição deMonitoringTarget.
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 deMonitoringTarget.