当前位置: 首页 > news >正文

Prometheus使用Pushgateway推送数据

Pushgateway简介

Prometheus 的 Pushgateway 是一个简单的 HTTP 服务器,它允许数据被推送到该服务器,而不是通过拉取的方式获取。它的存在是为了让临时和批处理作业能够将其指标暴露给 Prometheus。由于这类作业可能存在的时长不足以被主动抓取,因此它们可以将指标推送到 Pushgateway。随后,Pushgateway 会将这些指标暴露给 Prometheus。

Pushgateway 作为中间件,保存推送的数据直到 Prometheus 抓取。它支持从多个来源推送指标,每个来源都通过唯一的 job 标签来标识,并且可以选择性地附加额外的标签

Pushgateway GitHub 地址:https://github.com/prometheus/pushgateway

安装

要安装 Pushgateway,你可以下载二进制包或使用包管理器,但更推荐使用 Docker。你可以在任何机器上安装 Pushgateway,通常只需要一台 Pushgateway 服务器即可处理来自所有来源的指标。以下是使用 Docker 设置 Pushgateway 的方法:

docker pull prom/pushgatewaydocker run -d -p 9091:9091 prom/pushgateway

向 Pushgateway 推送指标

向 Pushgateway 推送指标时,你可以使用 curl 命令行工具或者开发自定义应用程序发送 HTTP 请求。此外,还有适用于多种编程语言的第三方库,可简化向 Pushgateway 发送指标的过程。

使用 curl

以下是一个向 Pushgateway 推送单个指标的例子:

curl -X POST http://{pushgateway_server}:{port}/metrics/job/myjob/instance/myinstance \--data 'my_metric{label="value"} 1.0'

此命令推送了一个名为 my_metric 的指标,其值为 1.0 并带有一个 label 设置为 value 的标签。

使用第三方库

有若干第三方库可以帮助你将 Pushgateway 的功能整合到你的应用程序中。这些库提供了一个更高层次的 API 来发送指标,使得与 Pushgateway 的交互更加容易管理。

例如,在 Python 中,你可以使用 prometheus_client 库,下面是一段实现代码:

import csv
from prometheus_client import CollectorRegistry, Gauge, push_to_gatewayclass PrometheusPusher:def __init__(self, metric_name: str, description: str, job_name: str, pushgateway_url: str = 'localhost:9091'):"""Initialize an instance of PrometheusPusher.:param metric_name: The name of the metric.:param description: A description of the metric.:param job_name: Job name used to identify the source.:param pushgateway_url: URL of the Pushgateway service, default is localhost:9091."""self.metric_name = metric_nameself.description = descriptionself.job_name = job_nameself.pushgateway_url = pushgateway_urlself.registry = CollectorRegistry()self.gauge = Nonedef create_gauge(self, label_names: list):"""Create a gauge metric with labels.:param label_names: List of label names."""self.gauge = Gauge(self.metric_name, self.description, label_names, registry=self.registry)def push_metrics(self, label_values: list):"""Push the metric value to the Pushgateway.:param label_values: List of label values."""if not self.gauge:print('Error: Gauge is not created')returnself.gauge.labels(*label_values).set(1)try:push_to_gateway(self.pushgateway_url, job=self.job_name, registry=self.registry)print(f'Successfully pushed metrics for {label_values}')except Exception as e:print(f'Failed to push metrics for {label_values}. Error: {e}')def push_metrics_from_csv(self, csv_file_path: str):"""Read data from a CSV file and push metrics.:param csv_file_path: Path to the CSV file."""with open(csv_file_path, mode='r') as file:reader = csv.reader(file)# Get the label names (first row)label_names = next(reader)self.create_gauge(label_names)for row in reader:if len(row) != len(label_names):print(f"Warning: Ignoring row with incorrect number of columns: {row}")continueself.push_metrics(row)# Example CSV file format:
# label1, label2
# value1, value2
# ...# Main entry point
if __name__ == '__main__':# Set CSV file path and other parameterscsv_file_path = 'example_data.csv'metric_name = 'example_metric'description = 'An example metric for demonstration purposes.'job_name = "example_job"pushgateway_url = 'slcx-grafana.calix.local:9091'# Create an instance of PrometheusPusher and push data from CSV filepusher = PrometheusPusher(metric_name, description, job_name, pushgateway_url)pusher.push_metrics_from_csv(csv_file_path)
http://www.lryc.cn/news/441747.html

相关文章:

  • 【Oracle】调优与oracle最大连接数配置
  • Unity教程(十六)敌人攻击状态的实现
  • ​图像超分辨率(ISR)​
  • 园区网基础组网保姆级(mstp,vrrp,irf,eth-trunk,route-policy,ospf,bgp,rbm,nat,mlag等等)
  • 大数据技术原理与应用
  • 《黑神话悟空》开发框架与战斗系统解析
  • 网络资源模板--Android Studio 通讯录App
  • Spring 出现 No qualifying bean of type ‘com.xxx‘ available 解决方法
  • C# 批量更改文件后缀名称
  • KIC算法介绍及pyrosetta示例代码
  • 【论文串烧】多媒体推荐中的模态平衡学习 | 音视频语音识别中丢失导致的模态偏差对丢失视频帧鲁棒性的影响
  • 【C语言二级考试】循环结构设计
  • 诗文发布模板(python代码打造键盘录入诗文自动排版,MarkDown源码文本)
  • GO主流开源框架
  • LeetCode:2398. 预算内的最多机器人数目 双指针+单调队列,时间复杂度O(n)
  • oracle 插入date日期类型的数据、插入从表中查出的数据,使用表中的默认数据
  • 物流系统打单软件 佳易王物流运单怎么打印教程
  • 二叉树计算
  • Java并发执行举例
  • Java 基础知识九(网络编程)
  • 深入解析Go语言的类型方法、接口与反射
  • C#中线程池【异步】
  • OpenAI 刚刚推出 o1 大模型!!突破LLM极限
  • 【Vmware16安装教程】
  • Delphi5利用DLL实现窗体的重用
  • 使用JavaWeb开发注册功能时,校验用户名是否已存在的一个思路(附代码)
  • 前端常见面试-首页性能提升、项目优化
  • 卷王阿里又开启价格战,大模型价格降价85%!
  • Java中的异步编程模式:CompletableFuture与Reactive Programming的实战
  • 7iDU AMP田岛绣花机驱动器维修0J2100400022