O Google Distributed Cloud (GDC) com isolamento físico permite extrair e coletar métricas das suas
cargas de trabalho ao longo do tempo para monitorar o desempenho do aplicativo e manter a observabilidade
dos dados. Para iniciar a coleta de métricas, implante um recurso personalizado MonitoringTarget
no namespace do projeto no servidor da API de gerenciamento.
O recurso personalizado MonitoringTarget direciona o pipeline de monitoramento para coletar
pods designados que expõem um endpoint HTTP em um formato de exposição do Prometheus,
como o OpenMetrics. É possível personalizar a frequência de raspagem, as configurações de endpoint,
os rótulos e as anotações dos pods de destino. A instância do Grafana do seu projeto
exibe as métricas coletadas para que você possa analisar o estado operacional
do aplicativo.
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 do MonitoringRule (
monitoringrule-editor): edita ou modifica 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 as 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 de
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 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 do
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.