Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Monitor ACK Pro control plane components with self-managed Prometheus

Última atualização: Jun 27, 2026

Configure um Prometheus autogerenciado para coletar métricas do plano de controle do ACK Pro, defina regras de alerta e verifique a configuração.

Para evitar o gerenciamento manual de configurações de coleta, use o Alibaba Cloud Managed Service for Prometheus. Esse serviço coleta métricas automaticamente, fornece painéis Grafana em tempo real e envia alertas por e-mail, SMS e DingTalk.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Uma instância de Prometheus autogerenciada com acesso ao API Server do cluster ACK Pro.

  • Permissão de leitura no caminho /metrics do API Server.

  • A instância do Prometheus implantada dentro ou fora do cluster.

Clusters gerenciados ACK Pro expõem métricas dos seguintes componentes do plano de controle:

Componente

Referência de métricas

kube-apiserver

Métricas do componente kube-apiserver

etcd

Métricas do componente etcd

kube-scheduler

Métricas do kube-scheduler

kube-controller-manager

Métricas do componente kube-controller-manager

cloud-controller-manager

Métricas do cloud-controller-manager

Etapa 1: Adicionar jobs de coleta do Prometheus

Adicione um job de coleta ao arquivo prometheus.yaml para cada componente do plano de controle. O intervalo global padrão é 15s, mas cada job de componente usa 30s para reduzir a carga no API Server.

A documentação de configuração do Prometheus descreve a sintaxe completa do prometheus.yaml.

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: ack-api-server
    ......

  - job_name: ack-etcd
    ......

  - job_name: ack-scheduler
    ......

As seções a seguir apresentam a configuração de coleta e as regras de alerta para cada componente. Se você implantar o Prometheus usando o padrão Prometheus Operator, consulte a documentação do add-on ack-prometheus-operator no ACK App Marketplace e a documentação da comunidade Prometheus Operator para obter detalhes sobre configurações personalizadas de coleta.

Etapa 2: Configure o monitoramento dentro do cluster

Se o Prometheus autogerenciado estiver em execução dentro do cluster, direcione cada job de coleta pelo API Server como proxy.

Identificar a arquitetura de rede do cluster

Determine se o cluster usa conexão direta via ENI (Elastic Network Interface) ou encaminhamento via CLB (Classic Load Balancer):

kubectl get endpoints kubernetes
  • Conexão direta ENI: A saída lista dois ou mais endereços IP, como 10.0.0.1:6443, 10.0.0.2:6443. O Prometheus conecta-se diretamente a cada réplica do API Server.

  • Encaminhamento CLB: A saída exibe um único endereço IP (o IP interno do CLB). Todo o tráfego passa pelo balanceador de carga.

Use o endpoint correto com base nesse resultado ao configurar cada job de coleta abaixo.

kube-apiserver

O API Server é o ponto de entrada para todas as métricas do plano de controle. Jobs de outros componentes passam por ele como proxy.

Configuração de coleta:

- job_name: ack-api-server
  scrape_interval: 30s
  scrape_timeout: 30s
  metrics_path: /metrics
  scheme: https
  kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names: [default]
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_component]
      action: keep
      regex: apiserver
    - source_labels: [__meta_kubernetes_service_label_provider]
      action: keep
      regex: kubernetes
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      action: keep
      regex: https

Regras de alerta recomendadas:

- alert: AckApiServerWarning
  expr: (absent(up{job="ack-api-server",pod!=""}) or (count(up{job="ack-api-server",pod!=""}) <= 1)) == 1
  for: 5m
  labels:
    severity: critical
  annotations:
    message: "APIServer is not available. Please check the Prometheus job and target status."

O filtro pod!="" direciona a consulta aos pods reais do plano de controle e exclui o endpoint no nível de serviço. O limiar <= 1 dispara quando apenas uma ou nenhuma réplica do API Server está íntegra, o que indica degradação na alta disponibilidade. A cláusula for: 5m evita alarmes falsos causados por reinicializações breves.

etcd

Colete métricas do etcd por meio do proxy do API Server. A configuração honor_labels: true preserva os rótulos originais do componente provenientes do proxy.

Configuração de coleta:

- job_name: ack-etcd
  scrape_interval: 30s
  scrape_timeout: 30s
  metrics_path: /metrics
  scheme: https
  honor_labels: true
  params:
    hosting: ["true"]
    job: ["etcd"]
  kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names: [default]
  authorization:
    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  tls_config:
    insecure_skip_verify: false
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    server_name: kubernetes
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_component]
      action: keep
      regex: apiserver
    - source_labels: [__meta_kubernetes_service_label_provider]
      action: keep
      regex: kubernetes
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      action: keep
      regex: https
    - source_labels: [__meta_kubernetes_service_label_component]
      action: replace
      target_label: job
      replacement: ${1}

Regras de alerta recomendadas:

- alert: AckETCDLeaderMissing
  expr: sum_over_time(etcd_server_has_leader[5m]) == 0
  for: 5m
  labels:
    severity: critical
  annotations:
    message: "Etcd cluster has no leader in the last 5 minutes. Check if the cluster is overloaded."

- alert: AckETCDDown
  expr: (absent(up{job="ack-etcd",pod!=""}) or (count(up{job="ack-etcd",pod!=""}) <= 2)) == 1
  for: 5m
  labels:
    severity: critical
  annotations:
    message: "Etcd is unavailable. Check the Prometheus job and target status."

O alerta AckETCDLeaderMissing dispara quando nenhum líder etcd é eleito durante uma janela de 5 minutos, indicando split-brain ou sobrecarga no cluster. O AckETCDDown usa o limiar <= 2 em vez de <= 0 porque o etcd exige quórum de pelo menos três membros; com dois ou menos, não há consenso possível.

kube-scheduler

Monitore a integridade do agendador e a latência de agendamento.

Configuração de coleta:

- job_name: ack-scheduler
  scrape_interval: 30s
  scheme: https
  params:
    hosting: ["true"]
    job: ["ack-scheduler"]
  kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names: [default]
  authorization:
    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  tls_config:
    insecure_skip_verify: false
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    server_name: kubernetes
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_component]
      action: keep
      regex: apiserver
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      action: keep
      regex: https
    - source_labels: [__meta_kubernetes_service_label_component]
      action: replace
      target_label: job
      replacement: ${1}

Regras de alerta recomendadas:

- alert: AckSchedulerWarning
  expr: (absent(up{job="ack-scheduler",pod!=""}) or (count(up{job="ack-scheduler",pod!=""}) <= 0)) == 1
  for: 3m
  labels:
    severity: critical
  annotations:
    message: "Scheduler is unavailable. Check the Prometheus job and target status."

A duração for: 3m é menor que a dos alertas do API Server e do etcd, pois a indisponibilidade do agendador bloqueia diretamente a criação de novos pods e exige detecção mais rápida.

kube-controller-manager (KCM)

Monitore os controladores responsáveis por objetos essenciais do Kubernetes, como nós, namespaces e deployments.

Configuração de coleta:

- job_name: ack-kcm
  scrape_interval: 30s
  scheme: https
  params:
    hosting: ["true"]
    job: ["ack-kube-controller-manager"]
  kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names: [default]
  authorization:
    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    server_name: kubernetes
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_component]
      action: keep
      regex: apiserver
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      action: keep
      regex: https
    - source_labels: [__meta_kubernetes_service_label_component]
      action: replace
      target_label: job
      replacement: ${1}

Regras de alerta recomendadas:

- alert: AckKCMWarning
  expr: (absent(up{job="ack-kcm",pod!=""}) or (count(up{job="ack-kcm",pod!=""}) <= 0)) == 1
  for: 3m
  labels:
    severity: critical
  annotations:
    message: "KCM is unavailable. Check the Prometheus job and target status."

cloud-controller-manager (CCM)

Monitore o CCM, responsável pela integração do cluster com a infraestrutura da Alibaba Cloud. Este job usa bearer_token_file para autenticação, diferentemente do authorization.credentials_file usado pelos demais componentes.

Configuração de coleta:

- job_name: ack-cloud-controller-manager
  scrape_interval: 30s
  scheme: https
  params:
    hosting: ["true"]
    job: ["ack-cloud-controller-manager"]
  kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names: [default]
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    server_name: kubernetes
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_component]
      action: keep
      regex: apiserver
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      action: keep
      regex: https

Regras de alerta recomendadas:

- alert: AckCCMWarning
  expr: (absent(up{job="ack-cloud-controller-manager",pod!=""}) or (count(up{job="ack-cloud-controller-manager",pod!=""}) <= 0)) == 1
  for: 3m
  labels:
    severity: critical
  annotations:
    message: "CCM is unavailable. Check the Prometheus job and target status."

O filtro pod!="" garante que o alerta seja acionado apenas para pods válidos do plano de controle e evita alarmes falsos durante interrupções momentâneas de rede ou reinicializações graduais.

Etapa 3: Configure regras de alerta do Prometheus

A documentação de regras de alerta do Prometheus detalha a sintaxe e opções avançadas, incluindo as cláusulas for e keep_firing_for.

Verificar a configuração

Confirme se o Prometheus coleta dados de todos os componentes com sucesso. Se o Prometheus estiver fora do cluster alvo, configure um job de coleta externo usando kubernetes_sd_configs com o endpoint api_server, um bearer_token e tls_config para autenticar no API Server do cluster. Para mais detalhes, consulte a documentação da comunidade Prometheus.

  1. Faça login no console do Prometheus e acesse a página Graph.

  2. Execute a consulta up. Verifique se up{job="ack-api-server"} e os jobs dos demais componentes retornam 1.

  3. Execute uma consulta específica de componente, como apiserver_request_total, para confirmar se os dados das séries temporais estão preenchidos corretamente.