【问题标题】:How to push untyped metrics with multiple labels(key-value) using JAVA Prometheus Pushgateway client?如何使用 JAVA Prometheus Pushgateway 客户端推送具有多个标签(键值)的无类型指标?
【发布时间】:2019-10-11 10:30:00
【问题描述】:

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

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

示例指标 metrics_name{instance="i1", label1="l1", label2="l2", label3="l3", label4="l4"} 值

谁能提供一个代码 sn-p 使用Prometheus Java Simpleclient Pushgateway 将上述指标推送到 Pushgateway 中?

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

【问题讨论】:

    标签: prometheus client-library prometheus-pushgateway


    【解决方案1】:

    来自PushGateway的官方文档:

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

    改为对标签值使用 base64 URL 安全编码,并通过在标签名称后加上 @base64 来标记它:

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

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

        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);
    

    Github link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      相关资源
      最近更新 更多