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:
Obter o endpoint do Pushgateway: Obtenha o endpoint do Pushgateway no console do Managed Service for Prometheus.
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.
-
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.
Pré-requisitos
Crie uma instância do Prometheus. Para mais informações, consulte:
Etapa 1: Obter o endpoint do Push Gateway
Acesse o console do Cloud Monitor. No painel de navegação à esquerda, escolha Managed Service for Prometheus > Instances. A página Instances será exibida.
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.
-
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
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");
}
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
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
É 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)
-
Obter um token: No painel de navegação à esquerda, escolha Settings. Na aba Settings, na seção Token, clique em Generate Token.
-
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
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");
}
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
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
É 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.
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.
-
Selecionar Explore para visualizar dados: Na página do painel, passe o mouse sobre o ícone
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.