如何使用JAVA Prometheus Pushgateway客户端推送具有多个标签(键值)的无类型指标?

时间:2019-10-11 10:30:00

标签: prometheus client-library

我想使用Java PushGateway客户端推送指标。

示例PushGateway URL pushgateway.com:9091/metrics/job/job_name

样本指标 metrics_name {instance =“ i1”,label1 =“ l1”,label2 =“ l2”,label3 =“ l3”,label4 =“ l4”}值

任何人都可以给我提供一个代码片段,以使用Prometheus Java Simpleclient Pushgateway将上述指标推入Pushgateway吗?

注意 我们有20K个临时应用程序实例在运行,因此决定使用Pushgateway。

1 个答案:

答案 0 :(得分:0)

摘自https://github.com/nodeca/js-yaml的官方文档:

  • 要使用分组密钥job="directory_cleaner"path="/var/tmp",以下路径将不起作用:
/metrics/job/directory_cleaner/path//var/tmp

相反,对标签值使用base64 URL安全编码,并通过在标签名称后加上@base64后对其进行标记:

/metrics/job/directory_cleaner/path@base64/L3Zhci90bXA

以下是从存储在url中的多个键值对生成Map<String, String> groupingKey的示例:

    String url = gatewayBaseURL;
    if (job.contains("/")) {
      url += "job@base64/" + base64url(job);
    } else {
      url += "job/" + URLEncoder.encode(job, "UTF-8");
    }

    if (groupingKey != null) {
      for (Map.Entry<String, String> entry: groupingKey.entrySet()) {
        if (entry.getValue().contains("/")) {
          url += "/" + entry.getKey() + "@base64/" + base64url(entry.getValue());
        } else {
          url += "/" + entry.getKey() + "/" + URLEncoder.encode(entry.getValue(), "UTF-8");
        }
      }
    }
    HttpURLConnection connection = connectionFactory.create(url);

PushGateway