tencent cloud

Prometheus 监控服务

产品简介
产品概述
产品优势
应用场景
基本概念
相关限制
功能特性
开服地域
购买指南
计费概述
按量付费(后付费)
免费试用介绍
托管采集器付费介绍
归档存储付费介绍
购买方式
欠费说明
快速入门
接入指南
抓取配置说明
自定义监控
EMR 接入
Java 应用接入
Golang 应用接入
Exporters 接入
Nacos 接入
通用组件监控
健康巡检
TKE 集群内安装组件说明
云监控
非腾讯云主机监控
通过 Remote Read 读取云托管 Prometheus 实例数据
Agent 自助接入
Pushgateway 接入
安全组开放说明
操作指南
实例
容器监控
集成中心
数据多写
预聚合
实例诊断
归档存储
告警策略
标签管理
访问控制
Grafana
API 使用指南
容器服务指标
相关资源使用及计费说明
实践教程
自建 Prometheus 迁入
云服务器场景下自定义接入
容器场景监控
TKE Serverless 集群如何放通外网
Prometheus 监控服务如何接入本地 Grafana
Prometheus 实例访问公网
配置 Prometheus 公网地址
Terraform
Terraform 概述
使用 Terraform 管理 Prometheus 实例
使用 Terraform 管理 Prometheus 实例的集成中心
使用 Terraform 采集容器监控数据
使用 Terraform 配置告警策略
常见问题
基础问题
集成容器服务相关
产品咨询
使用&技术问题
云监控问题
服务等级协议
TMP 政策
TMP 隐私协议
TMP 数据处理和安全协议

数据写入

PDF
聚焦模式
字号
最后更新时间: 2024-01-29 16:01:49

操作场景

类似 flink job 上报数据的场景,我们需要通过 API 直接将数据写入 Prometheus,因为这些 job 的生命周期可能会很短,来不及等待 Prometheus 来拉取数据。写入数据可以直接使用 Remote Write 协议或者 Pushgateway 的方式。

Remote Write

POST /api/v1/prom/write
Remote Write 是 Prometheus 标准的协议,更多介绍可以参见 Prometheus-remote write。使用 remote write 我们可以把 VPC 内其他 Prometheus 的数据写入到 Prometheus 监控服务中,对于数据的稳定性提升和迁移,都不失为一种不错的方案。

Pushgateway

虽然 Prometheus 场景主张以拉为主,但是有些场景我们仍然需要使用推的方式,可以参见 Prometheus -Pushgateway 说明
Prometheus 监控服务原生集成了 Pushgateway 模块,可以直接推送数据到服务中。下面是一个使用 Go 语言推送数据的简单的例子, 需要将 $IP$PORT$APPID$TOKEN 这些变量改为自己实例的认证链接信息,这些链接信息可以从控制台进行查询。
说明:
强烈建议替换 $INSTANCE 为当前机器的标识,例如 IP/Hostname。如果没有设置这个 groupingKey,当多台机器一起上报时,数据会互相覆盖。
package main

import (
"fmt"
"time"

"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/push"
"github.com/prometheus/common/expfmt"
)

var completionTime = prometheus.NewGauge(prometheus.GaugeOpts{
Name: "db_backup_last_completion_timestamp_seconds",
Help: "The timestamp of the last successful completion of a DB backup.",
})

func do() {
completionTime.SetToCurrentTime()
}

func ExamplePusher_Push() {
if err := push.New("http://$IP:$PORT", "db_backup").
BasicAuth("$APPID", "$TOKEN").
Collector(completionTime).
Grouping("instance", "$INSTANCE").
Grouping("db", "customers").
Format(expfmt.FmtText).
Push(); err != nil {
fmt.Println("Could not push completion time to Pushgateway:", err)
}
}

func main() {
do()
ticker := time.NewTicker(2 * time.Second)
done := make(chan bool)
for {
select {
case <-done:
return
case <-ticker.C:
ExamplePusher_Push()
}
}
}

注意:
push.New 生成的对象可以通过 Client 方法自定义 HTTP Client,我们推荐设置一个合适的超时时间,同时 push 数据我们建议使用异步的方式调用,以免阻塞业务主流程。
其它上报场景请参见 自定义监控说明

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈