Todos os produtos
Search
Central de documentação

Managed Service for Prometheus:Write metrics to Managed Service for Prometheus with the OpenTelemetry Collector

Última atualização: Aug 20, 2026

Envie métricas para o Managed Service for Prometheus de aplicações implantadas em clusters do Container Service for Kubernetes (ACK) e instrumentadas com o SDK do OpenTelemetry. Unifique a coleta de métricas nativas do OpenTelemetry (OTel), métricas personalizadas de negócios e métricas convertidas de spans de rastreamento para obter observabilidade completa da aplicação. Converter dados de rastreamento em métricas reduz significativamente o volume de ingestão de dados.

Visão geral do OpenTelemetry

O OpenTelemetry (OTel) é um framework de observabilidade open-source que fornece APIs, SDKs e ferramentas unificados para gerar, coletar e exportar dados de telemetria de sistemas distribuídos, incluindo métricas, rastreamentos e logs. Seu objetivo principal é eliminar a fragmentação dos dados de observabilidade entre diferentes ferramentas e sistemas.

As métricas do OpenTelemetry são dados estruturados que quantificam o comportamento do sistema para monitoramento de desempenho e integridade. A origem das métricas depende da instrumentação do SDK ou agente para uma linguagem específica. Em uma aplicação Java, por exemplo, as métricas geralmente incluem métricas padrão da Java Virtual Machine (JVM), métricas personalizadas instrumentadas pelo usuário e métricas derivadas de dados de rastreamento.

As métricas do OpenTelemetry foram projetadas para serem compatíveis com o Prometheus. Com o OpenTelemetry Collector, você converte métricas para o formato Prometheus, permitindo integração perfeita com o Managed Service for Prometheus.

Função do OpenTelemetry Collector

O OpenTelemetry Collector é um pipeline de processamento de dados extensível que coleta dados de telemetria de aplicações e serviços e os converte no formato exigido por um sistema de destino, como o Prometheus.

Coleta de dados

As aplicações usam o SDK do OpenTelemetry para gerar dados de métricas e enviá-los ao Collector usando o OpenTelemetry Protocol (OTLP) ou outros protocolos, como o protocolo nativo do Prometheus.

Conversão de dados

Extensões do Collector mantidas pela comunidade fornecem dois exporters para converter métricas OTel para o formato Prometheus.

  • O Prometheus Exporter converte métricas do OpenTelemetry para o formato Prometheus e disponibiliza um endpoint para que um agente do Prometheus faça o scrape dos dados.

    1. Mapeamento de nomes de métricas: Converte os nomes das métricas do OpenTelemetry para um formato compatível com o Prometheus.

    2. Tratamento de rótulos: Preserva ou renomeia rótulos para cumprir as regras de nomenclatura do Prometheus.

    3. Conversão de tipos de dados:

      • gauge → Prometheus gauge

      • sum → Prometheus counter ou gauge (com base na propriedade Monotonic)

      • histogram → Prometheus histogram (usando as submétricas bucket e sum)

      O exemplo de configuração a seguir expõe um endpoint de scrape de métricas na porta 1234.

      exporters:
        prometheus:
          endpoint: "0.0.0.0:1234"
          namespace: "acs"
          const_labels:
            label1: value1
          send_timestamps: true
          metric_expiration: 5m
          enable_open_metrics: true
          add_metric_suffixes: false
          resource_to_telemetry_conversion:
            enabled: true
  • O Prometheus Remote Write Exporter converte métricas do OpenTelemetry para o formato Prometheus e as grava diretamente no service Prometheus de destino usando o protocolo Remote Write.

    Assim como o Prometheus Exporter, este exporter também converte o formato de dados. O código a seguir apresenta um exemplo de configuração:

    exporters:
      prometheusremotewrite:
        endpoint: http://<Prometheus Endpoint>/api/v1/write
        namespace: "acs"
        resource_to_telemetry_conversion:
          enabled: true
        timeout: 10s   
        headers:
          Prometheus-Remote-Write-Version: "0.1.0"
        external_labels:
          data-mode: metrics

Melhores práticas para aplicações em clusters ACK

Etapa 1: Preparar o Managed Service for Prometheus

  • Monitoramento Prometheus ativado para o cluster

    Se o monitoramento Prometheus estiver ativado para seu cluster ACK, já existe uma instância do Prometheus. Faça login no console do CloudMonitor. No painel de navegação à esquerda, escolha Managed Service for Prometheus > Instances. Localize a instância do Prometheus com o mesmo nome do seu cluster ACK e confirme se ela está no status Running na região especificada.

  • Monitoramento Prometheus não ativado para o cluster

    Faça login no console do ACK. Clique no nome do cluster desejado e acesse a página Add-ons. Na aba Logging and Monitoring, localize e instale o componente ack-arms-prometheus. Após a instalação, o monitoramento Prometheus é ativado automaticamente para o cluster. Verifique se o componente foi instalado corretamente.

Etapa 2: Implantar o Collector no modo sidecar

Para garantir cálculos precisos de métricas, todas as métricas e rastreamentos de um único pod devem ser enviados ao mesmo Collector. A implantação no modo gateway exige configurações complexas de balanceamento de carga; portanto, recomendamos a implantação do Collector no modo sidecar.

Modo Prometheus Exporter

Nota

Este método elimina a necessidade de autenticação no caminho de escrita do Prometheus. Você também pode ajustar a configuração de scrape para alterar o intervalo de coleta de métricas.

Diagrama de arquitetura
Exemplo de configuração de implantação
# Kubernetes Deployment example
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    metadata:
      labels:
        # Add a specific label to the pod. The label is usually named after the application to facilitate metric scraping configuration.
        observability: opentelemetry-collector
    spec:
      volumes:
      - name: otel-config-volume
        configMap:
          # This configuration is created based on the following Collector configuration example.
          name: otel-config
      containers:
        - name: app
          image: your-app:latest
          env:
            - name: OTEL_EXPORTER_OTLP_ENDPOINT
              value: http://localhost:4317
        - name: otel-collector
          # You can use the Collector image that we provide. The image includes Prometheus-related extensions.
          # Replace  in the image name with the ID of your region.
          image: registry-<regionId>.ack.aliyuncs.com/acs/otel-collector:v0.128.0-7436f91	
          args: ["--config=/etc/otel/config/otel-config.yaml"]
          ports:
            - containerPort: 1234  # Prometheus endpoint
              name: metrics
          volumeMounts:
          - name: otel-config-volume
            mountPath: /etc/otel/config
Exemplo de configuração do Collector
Nota

Configure os limites de recursos (CPU e memória) para o Collector com base no volume de requisições da sua aplicação, garantindo que ele consiga processar todos os dados.

apiVersion: v1
kind: ConfigMap
metadata:
  name: otel-config
  namespace: <app-namespace>
data:
  otel-config.yaml: |
    extensions:
      zpages:
        endpoint: localhost:55679
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
    processors:
      batch:
      memory_limiter:
        # 75% of maximum memory up to 2 GB
        limit_mib: 1536
        # 25% of limit up to 2 GB
        spike_limit_mib: 512
        check_interval: 5s
      resource:
        attributes:
          - key: process.runtime.description
            action: delete
          - key: process.command_args
            action: delete
          - key: telemetry.distro.version
            action: delete
          - key: telemetry.sdk.name
            action: delete
          - key: telemetry.sdk.version
            action: delete
          - key: service.instance.id
            action: delete
          - key: process.runtime.name
            action: delete
          - key: process.runtime.description
            action: delete
          - key: process.pid
            action: delete
          - key: process.executable.path
            action: delete
          - key: process.command.args
            action: delete
          - key: os.description
            action: delete
          - key: instance
            action: delete
          - key: container.id
            action: delete
    connectors:
      spanmetrics:
        histogram:
          explicit:
            buckets: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10]
        dimensions: 
          - name: http.method
            default: "GET"
          - name: http.response.status_code
          - name: http.route
            # Custom attribute
          - name: user.id
        metrics_flush_interval: 15s
        exclude_dimensions:
        metrics_expiration: 3m
        events:
          enabled: true
          dimensions: 
          - name: default
            default: "GET"
    exporters:
      debug:
        verbosity: detailed
      prometheus:
        endpoint: "0.0.0.0:1234"
        namespace: "acs"
        const_labels:
          label1: value1
        send_timestamps: true
        metric_expiration: 5m
        enable_open_metrics: true
        add_metric_suffixes: false
        resource_to_telemetry_conversion:
          enabled: true
    service:
      pipelines:
        logs:
          receivers: [otlp]
          exporters: [debug]
        traces:
          receivers: [otlp]
          processors: [resource]
          exporters: [spanmetrics]
        metrics:
          receivers: [otlp]
          processors: [memory_limiter, batch]
          exporters: [prometheus]
        metrics/2:
          receivers: [spanmetrics]
          exporters: [prometheus]
      extensions: [zpages]

Esta configuração processa dados de Métricas e Rastreamentos recebidos. Ela utiliza processors do tipo resource para descartar atributos de ambiente irrelevantes, mantendo o volume de dados de métricas sob controle. Além disso, usa spanmetrics para converter estatísticas importantes de Spans em métricas.

Configuração da tarefa de scrape
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: opentelemetry-collector-podmonitor
  namespace: default
  annotations:
    arms.prometheus.io/discovery: "true"
spec:
  selector:
    matchLabels:
      observability: opentelemetry-collector
  podMetricsEndpoints:
  - port: metrics
    interval: 15s
    scheme: http
    path: /metrics

Modo Prometheus Remote Write Exporter

Nota
  • Indicado para cenários com grandes volumes de dados ou scrape instável, nos quais o Collector grava diretamente na instância do Prometheus.

  • A configuração é mais complexa, pois exige a definição do caminho de escrita de dados.

Diagrama de arquitetura
Preparação do caminho de escrita de dados

Neste modo, o Collector grava dados diretamente na instância do Prometheus. Obtenha o endpoint do Prometheus e as informações de autenticação antes de prosseguir.

  • Obter o endpoint

    Faça login no console do CloudMonitor. No painel de navegação à esquerda, escolha Managed Service for Prometheus > Instances e localize a instância do Prometheus correspondente ao seu cluster. O ID e o nome da instância do Prometheus geralmente correspondem ao ID e nome do cluster ACK. Clique no nome da instância desejada. Na página Settings, localize a Remote Write URL e copie o endereço de rede interna para uso posterior.

  • Obter credenciais de autenticação

    Escolha um dos métodos a seguir:

    • Instâncias do Prometheus V2 suportam uma política sem senha que permite escritas sem autenticação dentro da virtual private cloud (VPC) do cluster.

    • Crie um usuário RAM para gravar dados de métricas, conceda a política de sistema AliyunPrometheusMetricWriteAccess a esse usuário e obtenha seu par de AccessKey. O AccessKey ID serve como nome de usuário e o AccessKey secret como senha para a escrita de dados.

Exemplo de configuração de implantação

A configuração de implantação do Collector é idêntica à do modo Prometheus Exporter. Para mais informações, consulte o exemplo de configuração de implantação para o modo Prometheus Exporter.

Exemplo de configuração do Collector
apiVersion: v1
kind: ConfigMap
metadata:
  name: otel-config
  namespace: <app-namespace>
data:
  otel-config.yaml: |
    extensions:
    zpages:
      endpoint: localhost:55679
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
    processors:
      batch:
      memory_limiter:
        # 75% of maximum memory up to 2 GB
        limit_mib: 1536
        # 25% of limit up to 2 GB
        spike_limit_mib: 512
        check_interval: 5s
      resource:
        attributes:
          - key: process.runtime.description
            action: delete
          - key: process.command_args
            action: delete
          - key: telemetry.distro.version
            action: delete
          - key: telemetry.sdk.name
            action: delete
          - key: telemetry.sdk.version
            action: delete
          - key: service.instance.id
            action: delete
          - key: process.runtime.name
            action: delete
          - key: process.runtime.description
            action: delete
          - key: process.pid
            action: delete
          - key: process.executable.path
            action: delete
          - key: process.command.args
            action: delete
          - key: os.description
            action: delete
          - key: instance
            action: delete
          - key: container.id
            action: delete
    connectors:
      spanmetrics:
        histogram:
          explicit:
            buckets: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10]
        dimensions: 
          - name: http.method
            default: "GET"
          - name: http.response.status_code
          - name: http.route
            # Custom attribute
          - name: user.id
        metrics_flush_interval: 15s
        exclude_dimensions:
        metrics_expiration: 3m
        events:
          enabled: true
          dimensions: 
          - name: default
            default: "GET"
    exporters:
      debug:
        verbosity: detailed
      prometheusremotewrite:
        # Replace this with the internal network address of the Prometheus Remote Write endpoint.
        endpoint: http://<Endpoint>/api/v3/write
        namespace: "acs"
        resource_to_telemetry_conversion:
          enabled: true
        timeout: 10s   
        headers:
          Prometheus-Remote-Write-Version: "0.1.0"
          # This header is required if the password-free policy is not enabled.
          Authorization: Basic <base64-encoded-username-password>
        external_labels:
          data-mode: metrics
    service:
      pipelines:
        logs:
          receivers: [otlp]
          exporters: [debug]
        traces:
          receivers: [otlp]
          processors: [resource]
          exporters: [spanmetrics]
        metrics:
          receivers: [otlp]
          processors: [memory_limiter, batch]
          exporters: [prometheusremotewrite]
        metrics/2:
          receivers: [spanmetrics]
          exporters: [prometheusremotewrite]
      extensions: [zpages]
  • Substitua a URL do endpoint Prometheus Remote Write na configuração pela URL obtida anteriormente.

  • Para gerar o valor de base64-encoded-username-password, execute o comando abaixo:

    echo -n 'AK:SK' | base64

Etapa 3: Verificação