Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Como enviar dados usando o Pushgateway

Última atualização: Aug 27, 2026

Este tópico descreve como usar o recurso Pushgateway do Managed Service for Prometheus para enviar dados.

Visão geral da solução

Se a sua fonte de dados não puder ou não deva ser coletada regularmente por um Prometheus Server (por exemplo, em um ambiente sem conectividade de rede estável), use o Pushgateway. A fonte de dados envia os dados de monitoramento primeiro para o Pushgateway e, em seguida, o Prometheus Server recupera esses dados periodicamente. Siga estas etapas:

  1. Obter o endpoint do Pushgateway: Obtenha o endpoint do Pushgateway no console do Managed Service for Prometheus.

  2. Enviar dados: Use o comando curl ou um SDK open source para enviar os dados. Garanta que o Prometheus colete e monitore os dados das métricas de forma rápida e confiável.

  3. Adicionar configuração de proteção de dados (opcional): O protocolo padrão do Pushgateway não inclui recursos de proteção de dados. O SDK do Pushgateway suporta apenas Basic Auth básico e não possui autenticação avançada e padronizada. Isso significa que qualquer cliente com acesso ao endpoint do Pushgateway pode enviar dados. Para proteger seus dados, obtenha um token no console do Managed Service for Prometheus e implemente a autenticação JWT padrão.

    image

Pré-requisitos

Crie uma instância do Prometheus. Para mais informações, consulte:

Etapa 1: Obter o endpoint do Push Gateway

  1. Acesse o console do Cloud Monitor. No painel de navegação à esquerda, escolha Managed Service for Prometheus > Instances. A página Instances será exibida.

  2. Na barra de menus na parte superior da página, selecione a região onde reside sua instância do Prometheus. Na coluna Actions do cluster de destino, clique em Settings.

  3. Na aba Settings, localize a seção Push Gateway Address e copie a URL pública.

    A tabela nesta seção contém duas linhas: Public network e Private network. O formato da URL pública é https://{regionId}.arms.aliyuncs.com/prometheus/{token}/{regionId}/api/v2. O formato da URL privada é http://{regionId}-intranet.arms.aliyuncs.com/prometheus/{token}/{regionId}/api/v2.

Etapa 2: Enviar dados

Versão V1

Enviar dados usando um SDK open source

Importante
  • Atualmente, a camada de dados suporta os protocolos Text Format e Protobuf Delimited. Não há suporte para Protobuf Text, Protobuf Compact-Text ou OpenMetrics. Os SDKs geralmente usam Protobuf Delimited como padrão.

  • Os campos HELP dos metadados das métricas não suportam caracteres chineses. Se um campo HELP contiver caracteres chineses, o envio de dados falhará.

Este tópico usa Go e Java como exemplos para demonstrar como enviar dados de métricas usando um SDK open source.

Exemplo em Go:

completionTime := prometheus.NewGauge(prometheus.GaugeOpts{
    Name: "db_backup_last_completion_timestamp_seconds",
    Help: "The timestamp of the last successful completion of a DB backup.",
})
completionTime.SetToCurrentTime()
url :   = "https://cn-hangzhou.arms.aliyuncs.com/prometheus/52b12ea9cf4bb9e35****/16727530178****/1df8lj***/cn-hangzhou/api/v2"
pusher := push.New(url, "test").
    Collector(completionTime).Client(http.DefaultClient).
    Grouping("key1", "test1").Grouping("key2", "dfdf/sdsd/").
    Format(expfmt.FmtProtoDelim)
if err := pusher.Push(); err != nil {
    fmt.Println("Could not push completion time to PushGateway: ", err)
}

Exemplo em Java:

CollectorRegistry registry = new CollectorRegistry();
Gauge duration = Gauge.build()
        .name("my_batch_job_duration_seconds").help("Duration of my batch job in seconds.").register(registry);
Gauge.Timer durationTimer = duration.startTimer();
try {
    // Your code here.
    // This is only added to the registry after success,
    // so that a previous success in the Pushgateway isn't overwritten on failure.
    Gauge lastSuccess = Gauge.build()
            .name("my_batch_job_last_success").help("Last time my batch job succeeded, in unixtime.").register(registry);
    lastSuccess.setToCurrentTime();
} finally {
    durationTimer.setDuration();
    PushGateway pg = new PushGateway(new URL("https://cn-hangzhou.arms.aliyuncs.com/prometheus/52b12ea9cf4bb9e35****/16727530178****/1df8lj***/cn-hangzhou/api/v2"));
    pg.pushAdd(registry, "my_batch_job");
}
Nota
  • Ao usar um SDK open source e inserir o endpoint do Pushgateway obtido no console do Prometheus Monitoring, o sistema anexa automaticamente um sufixo como /metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>}. Caso não utilize um SDK open source, anexe esse sufixo manualmente. Caso contrário, você receberá um erro 404.

  • Se você enviar dados para um cluster de tenant compartilhado do Managed Service for Prometheus, todas as métricas devem incluir o rótulo tenant_userid=****. O valor da tag deve ser o ID da conta Alibaba Cloud (ou seja, o ID da conta raiz) proprietária da métrica. Isso distingue a propriedade das métricas.

Enviar dados usando o comando curl

Importante

O sistema não suporta requisições do tipo application/x-www-form-urlencoded. No seu comando curl, adicione um cabeçalho que especifique Content-Type: text/plain; version=0.0.4; charset=utf-8.

echo "some_metric 3.14" | curl -H "Content-Type: text/plain; version=0.0.4; charset=utf-8" --data-binary @- https://cn-hangzhou.arms.aliyuncs.com/prometheus/51bbea9ck41b9e35****/16727530178****/1df8lj***/cn-hangzhou/api/v2/metrics/job/job_name/label_key_1/label_value_1/label_key_2/label_value_2
Nota
  • É possível anexar vários rótulos ao final da URL, mas mantenha o comprimento total da URL dentro dos limites permitidos.

  • Substitua “job_name” na URL pelo nome real do seu job.

Adicionar configuração de proteção de dados (opcional)

  1. Obter um token: No painel de navegação à esquerda, escolha Settings. Na aba Settings, na seção Token, clique em Generate Token.

  2. Passar o token: Após gerar o token, passe-o de uma das seguintes maneiras.

    • Método 1: Defina o token no cabeçalho da requisição do seu cliente. Caso contrário, o sistema rejeitará a requisição de escrita. Use o seguinte formato de cabeçalho:

      Authorization: Bearer <token>
    • Método 2: O SDK do Pushgateway suporta apenas Basic Auth básico e não oferece suporte a JWT. Para usar o SDK com autenticação, utilize a interface BasicAuth e defina a senha como o token. O servidor suporta este método de autenticação. O Método 1 exige esforço adicional de desenvolvimento. O exemplo abaixo utiliza o SDK Go.

      pusher := push.New(url, "test").
              Collector(completionTime).Client(http.DefaultClient).
              Grouping("key1", "test1").Grouping("key2", "dfdf/sdsd/").
              .BasicAuth("admin", "actual token value").
              Format(expfmt.FmtProtoDelim)

Versão V2

Enviar dados usando um SDK open source

Importante
  • Atualmente, a camada de dados suporta os protocolos Text Format e Protobuf Delimited. Não há suporte para Protobuf Text, Protobuf Compact-Text ou OpenMetrics. Os SDKs geralmente usam Protobuf Delimited como padrão.

  • Os campos HELP dos metadados das métricas não suportam caracteres chineses. Se um campo HELP contiver caracteres chineses, o envio de dados falhará.

Este tópico usa Go e Java como exemplos para demonstrar como enviar dados de métricas usando um SDK open source.

Exemplo em Go:

completionTime := prometheus.NewGauge(prometheus.GaugeOpts{
    Name: "db_backup_last_completion_timestamp_seconds",
    Help: "The timestamp of the last successful completion of a DB backup.",
})
completionTime.SetToCurrentTime()
url :   = "https://k8s-log-c8b5d0a212ffa41cxxxx.cn-hangzhou.log.aliyuncs.com/prometheus/k8s-log-c8b5d0a212ffa41c0a5xxxx/aliyun-prom-c8b5d0a212ffa41c0xxxx/api/v1/pushgateway"
pusher := push.New(url, "test").
    Collector(completionTime).Client(http.DefaultClient).
    Grouping("key1", "test1").Grouping("key2", "dfdf/sdsd/").
    BasicAuth("ak", "sk").  
    Format(expfmt.FmtProtoDelim)
if err := pusher.Push(); err != nil {
    fmt.Println("Could not push completion time to PushGateway: ", err)
}

Exemplo em Java:

CollectorRegistry registry = new CollectorRegistry();
Gauge duration = Gauge.build()
        .name("my_batch_job_duration_seconds").help("Duration of my batch job in seconds.").register(registry);
Gauge.Timer durationTimer = duration.startTimer();
try {
    // Your code here.
    // This is only added to the registry after success,
    // so that a previous success in the Pushgateway isn't overwritten on failure.
    Gauge lastSuccess = Gauge.build()
            .name("my_batch_job_last_success").help("Last time my batch job succeeded, in unixtime.").register(registry);
    lastSuccess.setToCurrentTime();
} finally {
    durationTimer.setDuration();
    PushGateway pg = new PushGateway(new URL("https://k8s-log-c8b5d0a212ffa41cxxxx.cn-hangzhou.log.aliyuncs.com/prometheus/k8s-log-c8b5d0a212ffa41c0a5xxxx/aliyun-prom-c8b5d0a212ffa41c0xxxx/api/v1/pushgateway"));       
    pg.setConnectionFactory(new BasicAuthHttpConnectionFactory("ak", "sk"));  
    pg.pushAdd(registry, "my_batch_job");
}
Nota
  • Ao usar um SDK open source e inserir o endpoint do Pushgateway obtido no console do Prometheus Monitoring, o sistema anexa automaticamente um sufixo como /metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>}. Caso não utilize um SDK open source, anexe esse sufixo manualmente. Caso contrário, você receberá um erro 404.

  • Se você enviar dados para um cluster de tenant compartilhado do Managed Service for Prometheus, todas as métricas devem incluir o rótulo tenant_userid=****. O valor da tag deve ser o ID da conta Alibaba Cloud (ou seja, o ID da conta raiz) proprietária da métrica. Isso distingue a propriedade das métricas.

  • A operação de API suporta autenticação via Security Token Service (STS). Nesse caso, formate a senha no BasicAuth como {AccessKey secret}${STS token}.

Enviar dados usando o comando curl

Importante

O sistema não suporta requisições do tipo application/x-www-form-urlencoded. No seu comando curl, adicione um cabeçalho que especifique Content-Type: text/plain; version=0.0.4; charset=utf-8.

echo "some_metric 3.14" | curl -u 'ak:sk' -H "Content-Type: text/plain; version=0.0.4; charset=utf-8" --data-binary @- https://k8s-log-c8b5d0a212ffa41cxxxx.cn-hangzhou.log.aliyuncs.com/prometheus/k8s-log-c8b5d0a212ffa41c0a5xxxx/aliyun-prom-c8b5d0a212ffa41c0xxxx/api/v1/pushgateway/metrics/job/job_name/label_key_1/label_value_1/label_key_2/label_value_2
Nota
  • É possível anexar vários rótulos ao final da URL, mas mantenha o comprimento total da URL dentro dos limites permitidos.

  • Substitua “job_name” na URL pelo nome real do seu job.

Validar resultados

Use o Grafana para verificar se os dados foram enviados com sucesso.

  1. Acessar o painel do ApiServer: No painel de navegação à esquerda, selecione Dashboards e clique em no hiperlink do painel ApiServer. O sistema redirecionará você para a página do painel.

  2. Selecionar Explore para visualizar dados: Na página do painel, passe o mouse sobre o ícone eu no painel de navegação à esquerda. Na caixa pop-up, clique em Explore. No lado direito da página Explore, use a lista suspensa para selecionar a instância Explore correspondente e visualize se os dados foram enviados com sucesso.

    wt