文档

如何使用Pushgateway推送数据

更新时间:

本文介绍如何使用可观测监控 Prometheus 版提供的Pushgateway功能。

前提条件

背景信息

阿里云可观测监控 Prometheus 版目前支持Pushgateway功能,您可以使用标准的Pushgateway API,结合阿里云可观测监控 Prometheus 版和开源SDK通过Push模式投递指标。

步骤一:获取Pushgateway地址

您可以通过以下步骤找到相关的Pushgateway地址。

  1. 登录ARMS控制台

  2. 在左侧导航栏选择Prometheus监控 > 实例列表,进入可观测监控 Prometheus 版的实例列表页面。

  3. 单击目标Prometheus实例名称。

  4. 在左侧导航栏单击设置,然后在设置页签的Push Gateway 地址区域获取公网的URL地址。

    重要

    可观测监控 Prometheus 版控制台提供的Pushgateway地址是配合开源SDK使用的。在您使用开源SDK时,填入从Prometheus监控控制台上获取的Pushgateway地址后,系统会自动补齐类似/metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>}的后缀,若您使用的不是开源SDK,那么需要您自行拼接后缀,否则会报404错误。

    vr

步骤二:上报数据

重要

目前数据协议支持Text Format和Protobuf Delimited这两种数据层协议,暂不支持Protobuf Text、Protobuf Compact-Text和Openmetrics这三种协议,SDK一般默认是Protobuf Delimited协议。

说明

目前元数据HELP不支持中文字符,如果HELP中有中文字符会导致数据上报失败。

使用curl命令推送数据

您可以使用curl命令调试推送数据的功能,示例如下。

重要

目前不支持application/x-www-form-urlencoded类型的Request,在curl命令中,需要增加Header,指定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/some_job

使用开源SDK推送数据

获取Pushgateway地址之后,您就可以使用开源SDK来推送指标数据,这里以Go语言和Java语言为例介绍如何使用开源SDK推送指标数据。

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

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");
}
说明

若您需要为可观测监控 Prometheus 版云服务共享租户集群中推送数据,这里要求推送的指标需统一携带tenant_userid=****标签,标签值是该指标隶属的阿里云账号ID(即主账号ID),用于区分指标的隶属关系。

步骤三:增加数据保护配置(可选)

标准的Pushgateway协议是不包含数据保护相关内容的,即任何客户端一旦获取Pushgateway端点地址,都可以推送数据,对于对安全级别要求较高的场景,这可能无法符合要求。

说明

由于数据保护并非标准的Pushgateway协议的一部分,因此在Pushgateway的SDK中只有基本的Basic Auth,并没有更高级和通用的鉴权实现。

阿里云可观测监控 Prometheus 版实现了标准的JWT鉴权协议,可以保护您的数据安全。JWT鉴权协议的开启方式非常简单,您可以在可观测监控 Prometheus 版控制台或者通过OpenAPI开启鉴权,获取Token,这里为您介绍如何在可观测监控 Prometheus 版控制台获取Token。

  1. 登录ARMS控制台

  2. 在左侧导航栏选择Prometheus监控 > 实例列表,进入可观测监控 Prometheus 版的实例列表页面。

  3. 单击目标Prometheus实例名称。

  4. 在左侧导航栏单击设置,然后在设置页签的Token区域单击生成token

    ey

    生成Token后,您可以看到具体的Token值,有以下两种方式传递Token。

    • 方式一:将Token设置到客户端请求Header里,即可正常的推送数据,否则系统会拒绝数据写入。Header的设置如下图所示:vr

    • 方式二:由于在Pushgateway的SDK里只有基本的Basic Auth,并没有支持JWT,使用第一种方式,有一定的开发成本,如果想要完全使用SDK,又要实现鉴权,这里可以使用BasicAuth接口,将Password设置为Token,服务侧兼容了这种鉴权方式,这里以GO语言SDK为例。

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

步骤四:通过Grafana查询数据是否推送成功

  1. 登录ARMS控制台

  2. 在左侧导航栏选择Prometheus监控 > 实例列表,进入可观测监控 Prometheus 版的实例列表页面。

  3. 单击目标Prometheus实例名称。

  4. 在左侧导航栏单击大盘列表,然后单击名称为ApiServer的大盘超链接,系统会跳转至大盘页面。

  5. 在大盘页面的左侧导航栏将鼠标悬停在eu图标上(图标①),并在弹框中单击Explore,然后在Explore页面右侧的下拉框中(图标②)选择对应Explore查看数据是否推送成功。

    wt

  • 本页导读 (1)
文档反馈