Prometheus:pushgateway使用

news2024/11/16 2:19:04

1 项目目标

(1)熟练部署pushgateway

(2)使用api增删改查数据

(3)使用python Client SDK Push数据到pushgateway

2.1 规划节点

主机名

主机IP

节点规划

prome-master01

10.0.1.10

服务端

prome-node01

10.0.1.20

客户端

2.2 基础准备

环境准备:Prometheus环境、grafana环境

项目地址:GitHub - prometheus/pushgateway: Push acceptor for ephemeral and batch jobs.

3 项目实施

3.1 部署安装pushgateway

什么是pushgateway

  • Pushgateway是一个独立的服务组件,可在HTTP REST API上接收Prometheus指标,位于发送指标的应用服务程序和Prometheus服务器之间。Pushgateway接收指标,然后将其作为目标进行抓取,以便将指标提供给Prometheus服务器。

什么情况下使用pushgateway

  • https://prometheus.io/docs/practices/pushing/
  • Pushgateway的唯一有效用例是捕获服务级别批处理作业的结果
  • pull网络不通,但有替代方案

pushgateway 注意事项

  • 不支持带时间戳上报,会被忽略
  • 当通过单个Pushgateway监视多个实例时,Pushgateway既成为单个故障点,又成为潜在的瓶颈。
  • Prometheus为每个采集的target生成的up指标无法使用
  • Pushgateway永远不会删除推送到其中的系列,除非通过Pushgateway的API手动删除了这些系列,否则它们将永远暴露给Prometheus

去这里下载最新的:Releases · prometheus/pushgateway (github.com)

wget https://github.com/prometheus/pushgateway/releases/download/v1.8.0/pushgateway-1.8.0.linux-amd64.tar.gz
tar xf pushgateway-1.8.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/pushgateway-1.8.0.linux-amd64/ /usr/local/pushgateway

vim /usr/lib/systemd/system/pushgateway.service
[Unit]
Description=pushgateway server
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/pushgateway/pushgateway
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=pushgateway
[Install]
WantedBy=default.target

systemctl start pushgateway
systemctl enable pushgateway
systemctl status pushgateway

访问IP:9091 pushgateway页面

pushgateway部署完成

将单个pushgateway加入prometheus采集job中:prometheus.yml

- job_name: 'pushgateway'
    honor_timestamps: true
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: /metrics
    scheme: http
    static_configs:
    - targets:
      - 172.20.70.205:9091
      - 172.20.70.215:9091

刷新Prometheus

3.2 使用API Push 数据

我们要 Push 数据到 PushGateway 中,可以通过其提供的 API 标准接口来添加,默认 URL 地址为:http://<ip>:9091/metrics/job/<JOBNAME>{/<LABEL_NAME>/<LABEL_VALUE>},其中 <JOBNAME> 是必填项,为 job 标签值,后边可以跟任意数量的标签对,一般我们会添加一个 instance/<INSTANCE_NAME> 实例名称标签,来方便区分各个指标。

接下来,可以 Push 一个简单的指标数据到 PushGateway 中测试一下。

echo "test_metric 123456" | curl --data-binary @- http://10.0.1.10:9091/metrics/job/test_job
  • 添加更多更复杂数据,通常数据会带上 instance, 表示来源位置:
cat <<EOF | curl --data-binary @- http://10.0.1.10:9091/metrics/job/some_job/instance/some_instance
# TYPE some_metric counter
some_metric{label="val1"} 42
# TYPE another_metric gauge
# HELP another_metric Just an example.
another_metric 2398.283
EOF
  • 删除某个组下的某实例的所有数据:
curl -X DELETE http://10.0.1.10:9091/metrics/job/some_job/instance/some_instance
  • 删除某个组下的所有数据:
curl -X DELETE http://10.0.1.10:9091/metrics/job/some_job

可以发现 pushgateway 中的数据我们通常按照 jobinstance 分组分类,所以这两个参数不可缺少。

3.3 使用python Client SDK Push数据到pushgateway

pip install prometheus_client
pip install requests

demo样例:在Python应用程序中集成Prometheus客户端库,收集监控数据并定期将数据推送到Prometheus的Pushgateway服务。这使得Prometheus可以从不支持或不能直接暴露指标的程序中收集指标信息。

# coding:utf-8
import math
import time

import requests
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway, Counter, Histogram, Summary
import random

# 初始化CollectorRegistry
r1 = CollectorRegistry()
# pushgateway api地址
push_addr = "10.0.1.10:9091"
# 初始化四种不同类型的metrics
g1 = Gauge('test_gauge_01', 'Description of gauge', ['k1', 'k2'], registry=r1)
c1 = Counter('test_counter_01', 'HTTP Request', ['method', 'endpoint'], registry=r1)
test_buckets = (-5, 0, 5)
h1 = Histogram('test_histogram_01', 'test of histogram', buckets=test_buckets, registry=r1)
s1 = Summary('test_summary_01', 'A summary', registry=r1)


# 业务逻辑定义
def collect():
    g1.labels(k1='v1', k2='v2').set(random.randint(1, 100))
    c1.labels(method='get', endpoint='/login').inc(10)
    h1.observe(random.randint(-10, 10))

    f(random.uniform(0, 1))

@s1.time()
def f(t):
    time.sleep(t)

# 自定义处理函数
def custom_handle(url, method, timeout, headers, data):
    def handle():
        h = {}
        for k, v in headers:
            h[k] = v
        if method == 'PUT':
            resp = requests.put(url, data=data, headers=h, timeout=timeout)
        elif method == 'POST':
            resp = requests.post(url, data=data, headers=h, timeout=timeout)
        elif method == 'DELETE':
            resp = requests.delete(url, data=data, headers=h, timeout=timeout)
        else:
            return
        if resp.status_code >= 400:
            raise IOError("error talking to pushgateway: {0} {1}".format(resp.status_code, resp.text))
    return handle
# 主循环
if __name__ == '__main__':
    step = 10
    while True:
        for i in ["a", "b", "c", "d"]:
            collect()
            res = push_to_gateway(push_addr, job='test_job_{}'.format(i), registry=r1, timeout=5, handler=custom_handle)
            print(res)

        time.sleep(step)

可以看到以下job:

访问http://10.0.1.10:9091/metrics 可以查看到push上来的值

在graph中查询也可看到test_的值。

在grafana创建一个dashboard

gauge:test_gauge_01

counter:rate(test_counter_01_total[1m])

histogram:histogram_quantile(0.90,sum(rate(test_histogram_01_bucket{}[30s])) by (le))

summary:rate(test_summary_01_count[1m])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2053050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索PyUSB:Python与USB设备的桥梁

文章目录 探索PyUSB&#xff1a;Python与USB设备的桥梁背景&#xff1a;为何选择PyUSB&#xff1f;什么是PyUSB&#xff1f;如何安装PyUSB&#xff1f;简单的库函数使用方法场景应用常见问题与解决方案总结 探索PyUSB&#xff1a;Python与USB设备的桥梁 背景&#xff1a;为何选…

GD32F470 FREERTOS + lwip UDP丢包问题解决

现象&#xff1a;使用GD32F470Z评估板已经官方FreeRTOSUDP例程测试&#xff0c;使用上位机UDP测试工具&#xff0c;连续收发UDP数据包&#xff0c;每发送65535次数据&#xff0c;第65536包数据就会丢。如下图所示&#xff1a; 测试了很多次&#xff0c;都是在65536的时候停了&a…

NVR方案背景与产品介绍与构建一套完整的NVR产品解决方案

一、NVR和DVR 在视频监控领域&#xff0c;DVR和NVR是两种常用的录像技术。它们在系统结构、视频处理、存储和访问方式等方面存在明显的区别。&#xff0c;但都在视频监控中扮演着重要的角色。首先来了解它们的区别和特点&#xff0c;这有助于在选择合适的设备时做出明智的决策…

HDMI切换器(2进1,1进2,三切1)介绍

目录 HDMI介绍: 二进一出HDMI切换器: 通俗的解释: 一进二出HDMI切换器&#xff1a; 通俗解释: HDMI1进2和2进1的区别&#xff1a; 三进1出HDMI切换器&#xff1a; 通俗的解释: HDMI介绍: HDMI描述全称高清多媒体接口&#xff08;High Definition Multimedia Interface&…

太阳能光伏气象站——助力光伏发电

在光伏产业蓬勃发展的今天&#xff0c;‌太阳能光伏气象站作为专为光伏发电站打造的环境监测系统&#xff0c;‌其重要性日益凸显。‌它不仅是电站运维优化、‌智能控制的关键环节&#xff0c;‌更是提高发电效率、‌保障光伏电站稳定运行的重要工具。‌ 首先&#xff0c;‌太阳…

Linux--传输层协议TCP

目录 1.理解TCP的部分字段 2.TCP的策略以及其它报头 确认应答(ACK)机制​编辑 超时重传机制 连接管理机制 建立连接为什么要三次握手&#xff1f; 为什么要四次挥手&#xff1f; 验证两种状态&#xff0c;CLOSE_WAIT&#xff08;不关闭文件fd即可&#xff09;和TIME_WA…

langchian 批次调用 prompt

目录 基础不使用批次 batch 批次调用 关于 langchian 额一些应用&#xff0c;可以查看案例&#xff1a; GitHub - 5zjk5/prompt-engineering: prompt 工程项目案例 基础不使用批次 from dotenv import load_dotenv import time import os from langchain_core.prompts imp…

【JUC】07-死锁

1. 死锁 死锁指的是两个或以上的线程在执行过程中&#xff0c;因争夺资源而造成的一种互相等待的现象。 // 死锁代码 public class DeadLockDemo {public static void main(String[] args) {final Object objectA new Object();final Object objectB new Object();new Threa…

【Linux 驱动】IMX6ULL gpio驱动

1. 概述 如果 pinctrl子系统将一个 PIN 复用为 GPIO 的话&#xff0c;那么接下来要用到 gpio 子系统了。gpio 子系统顾名思义&#xff0c;就是用于初始化 GPIO 并且提供相应的 API 函数&#xff0c;比如设置 GPIO为输入输出&#xff0c;设置读取 GPIO 的值等。 gpio 子系统的主…

kettle-spoon界面空白

点击spoon的connect、save、打开资源库等等&#xff0c;出现以下界面空白&#xff0c;已排查IE11的问题。 解决办法&#xff1a;清除kettle的配置文件&#xff0c;包括:Data Integration/.kettle、C:\Users\XXX.kettle等所有配置文件。

【机器学习】YOLO 关闭控制台推理日志

问题背景 使用 YOLO v8 推理时&#xff0c;每次推理都会在控制台输出日志&#xff0c;大批量推理时会把自己打印的日志给冲掉&#xff0c;现想关闭 YOLO v8 的推理日志。 解决方案 方案一&#xff1a; 在预测接口的参数列表里加上 verboseFalse 即可关闭控制台输出日志。 m…

全志 HDMI 显示亮度低

一、问题描述 全志T527在适配HDMI,让HDMI作为主显示时,出现亮度太低的问题 二、解决办法 1、调整uboot参数,显示720P画面 vi device/config/chips/t527/configs/sany_v7/uboot-board.dts 在T527中有显示相关的接口,enhance 该接口用于设置图像的亮度/对比度/饱和度/边缘…

有关软件开发中的项目管理:关键性问题解答(二)

继上篇内容《有关软件开发中的项目管理&#xff1a;关键性问题解答&#xff08;一&#xff09;》&#xff0c;咱们继续讲解没讲解完的项目管理问题。 瀑布式与敏捷项目管理之间存在着哪些显著的差异呢&#xff1f; 下面&#xff0c;我们将以更加详尽深入的视角来对比瀑布式与敏…

XSS游戏

目录 XSS游戏-WarmupsMa Spaghet!JefffUgandan KnucklesRicardo MilosAh Thats HawtLigmaMafiaOk, BoomerWW3 XSS游戏-Warmups Ma Spaghet! 1. 尝试注入&#xff0c;输入aaaaaaaa 2. 显示在<h2>标签内3. 输入标签&#xff0c;添加onmouseover属性值为alert(1337)&…

cloudcompare制作点云分割数据集

本文使用一个植物的数据集&#xff0c;进行标注从而能用于深度学习点云目标检测和分割任务 论文出处 Soybean-MVS: Annotated Three-Dimensional Model Dataset of Whole Growth Period Soybeans for 3D Plant Organ Segmentation 其中主要解决问题 如何使用网格mesh和点云进行…

番茄插件(Visual Assist)运行安装无反应的问题

1、运行安装无反应 直接双击运行没有反应&#xff0c;右键点击“以管理员方式运行”也没有反应。 &#xff08;只是蓝水的小圆圈转了一下后&#xff0c;就没有反应了&#xff09; 2、 则必须对程序的兼容性进行设置 3、安装程序就可以运行了 如下图&#xff1a;

【机器学习】CNN的基本架构模块

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 CNN的基本架构模块1. 引言2. 卷积层2.1 基本原理2.2 卷积层的特性2.3 卷积层的超…

科三预约考试,为什么我场次排名在前,后面排名又变了

什么时候知道是否预约成功 系统确认考试预约结果的时间一般为考试前5-7个工作日&#xff0c;同时根据预约人数系统会自行判断提前1-2日或延长1-2日公示预约结果&#xff0c;学员至少考试前三天会收到预约成功短信通知。 如果预约失败了怎么办&#xff1f;会计入考试次数吗&am…

免费下载:1982-2020年全国逐月土壤湿度数据集(附下载方法)

欧洲空间局&#xff08;英文&#xff1a;European Space Agency&#xff09;&#xff0c;简称欧空局或ESA&#xff0c;成立于1975年&#xff0c;是一个致力于探索太空的政府间组织&#xff0c;拥有22个成员国&#xff0c;总部设在法国巴黎。欧洲航天局的太空飞行计划包括载人航…

【轻松拿捏】Java中ArrayList 和 LinkedList 的区别是什么?

ArrayList 和 LinkedList 的区别是什么&#xff1f; 1. ArrayList 2. LinkedList 3.总结 &#x1f388;边走、边悟&#x1f388;迟早会好 ArrayList 和 LinkedList 都是 Java 中常用的 List 接口的实现类&#xff0c;但它们在内部结构和操作性能上有所不同。 1. ArrayLis…