Prometheus:pushgateway使用

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:
      - 10.0.1.10: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])

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis清空缓存

Windows环境下使用命令行进行redis缓存清理 1、redis安装目录下输入cmd 2、redis-cli -p 端口号 3、flushdb 清除当前数据库缓存 4、flushall 清除整个redis所有缓存

【秋招笔试】8.18大疆秋招(第一套)-后端岗

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention

时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention 文章目录 前言时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention 一、BO-CNN-BiGRU-Attention模型1. 贝叶斯优化&#…

Postman中Body添加注释后请求报错问题解决【保姆级教程!!!】

本文介绍关于Postman中Body添加注释后请求报错问题解决方法 如&#xff1a;请求返回下述报错 操作失败! 系统异常,JsonParseException: Unexpected character (‘/’ (code 47)): maybe a (non-standard) comment? (not recognized as one since Feature ‘ALLOW_COMMENTS’…

接受三个数字参数,返回最大

def mostNum(*nums): #nums为元组&#xff08;不支持修改&#xff09;&#xff0c;转化为列表liNumslist(nums)for i in range(0,len(liNums)-1): #冒泡法if liNums[i]>liNums[i1]:cliNums[i]liNums[i]liNums[i1]liNums[i1]creturn liNums.pop() #列表最后一个最大的数被返…

《C语言实现各种排序算法》

文章目录 一、排序1、排序的各种方式分类 二、插入排序1、直接插入排序2、希尔排序3、希尔排序时间复杂度分析 三、选择排序1、直接选择排序2、堆排序 四、交换排序1、冒泡排序2、快速排序3、快速排序hoare找基准值4、快排挖坑法找基准值5、前后指针法6、快速排序非递归实现 五…

Mysql的相关编程基础知识

一. 配置MySQL 首先下载mysql-5.0.96-winx64&#xff0c;安装过程如下图所示。 1.安装MySQL 5.0 ​ ​ 2.选择手动配置、服务类型、通用多功能型和安装路径 ​ 3.设置数据库访问量连接数为15、端口为3306&#xff08;代码中设置URL用到&#xff09;、编码方式为utf-8 ​ 4.设…

使用Seaborn绘制热力图

热力图是一种用于展示矩阵数据的图表&#xff0c;其中颜色深浅表示数据值的大小。 import seaborn as sns import numpy as np import matplotlib.pyplot as plt # 创建示例数据 data np.random.rand(10, 12) # 绘制热力图 sns.heatmap(data, annotTrue, cmapcoolwa…

【故障处理】- ping不通的原因

PING不通是一个非常常见的网络问题&#xff0c;它可能由多种原因引起。如链路故障、ARP学习失败等 以一个Ping不通的尝试示例&#xff0c;介绍Ping不通故障的定位思路。如下图&#xff1a; PC3 Ping不通PC4 PC>ping 20.1.1.20Ping 20.1.1.20: 32 data bytes, Press Ctrl_C…

全新分支版本!微软推出Windows 11 Canary Build 27686版

已经很久没有看到 Windows 11 全新的分支版本了&#xff0c;今天微软发布 Windows 11 Canary 新版本&#xff0c;此次版本号已经转移到 Build 27xxx&#xff0c;首发版本为 Build 27686 版。 此次更新带来了多项改进&#xff0c;包括 Windows Sandbox 沙盒功能切换到 Microsof…

目标检测中的IOU(Intersection over Union)算法是什么?

目标检测中的IOU&#xff08;Intersection over Union&#xff09;算法是什么&#xff1f; IOU&#xff0c;即交并比&#xff0c;是目标检测中用于评估预测边界框与真实边界框重叠程度的重要指标。它的计算公式为&#xff1a; IOU Area of Intersection Area of Union \text{…

学习大数据DAY40 基于 hive 的数据处理

目录 Hive 复合数据定义方法 Hive 复合数据查询方法 hive 内置函数 上机练习 Hive 复合数据定义方法 Hive 复合数据查询方法 hive 内置函数 -- 查看系统自带的函数 show functions; -- 显示自带的函数的用法 desc function upper; -- 详细显示自带的函数的用法 desc …

【Linux基础】Linux中的开发工具(1)--yum和vim

目录 ✈️前言一&#xff0c;Linux 软件包管理器 yum1. 什么是软件包2. 如何安装软件3. 如何卸载软件 二&#xff0c;Linux编辑器-vim使用1. vim的基本概念1.1 命令/正常/普通模式1.2 插入模式1.3 底行模式 三&#xff0c;vim命令模式命令集1. 移动光标2. 删除字符3. 复制4. 替…

JSONP跨域访问漏洞

目录 JSONP跨域访问漏洞 课程目标 一、漏洞一&#xff1a;利用回调GetCookie 二、漏洞二&#xff1a;利用CSRF获取数据 三、JSON攻击防御方案 课程目标 1、理解JSONP跨域访问漏洞原理 2、掌握JSONP跨域访问的防御方案 一、漏洞一&#xff1a;利用回调GetCookie 说变了…

跨平台无缝编辑,2024年免费视频剪辑工具全解析

在众多视频剪辑工具中&#xff0c;免费视频剪辑软件凭借其易用性、功能丰富性以及零成本的优势&#xff0c;赢得了广大用户的青睐。今天&#xff0c;就让我们一起盘点那些2024年大家都在用的免费视频剪辑软件&#xff0c;探索它们如何助力我们轻松实现创意梦想。 1.福昕视频剪…

基于Sringboot+Vue个人驾校预约管理系统--论文pf

TOC springboot503基于SringbootVue个人驾校预约管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。…

多平台编译libexif

下载地址&#xff1a;https://github.com/libexif/libexif/releases 1. ubuntu x64 &#xff08;银河麒麟系统aarch64步骤相同&#xff09; # 解压 > tar -jxvf libexif-0.6.24.tar.bz2 > cd libexif-0.6.24 # 配置 > ./configure # 编译 > make # 安装 > mak…

openstack基本操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Shell参考 - Linux Shell 训练营

出品方<Linux.cn & 阿里云开发者学堂> 一&#xff0c;Linux 可以划分为以下四个部分&#xff1a; 1. 应用软件 2. 窗口管理软件 Unity Gnome KDE 3. GNU 系统工具链 Software- GNU Project - Free Software Foundation 4. Linux 内核 二&#xff0c;什么是shell 1. L…

ArcGIS高/低聚类(Getis-Ord General G)——探究人口空间格局的20年变迁

先了解什么是莫兰指数高/低聚类莫兰指数&#xff1f; 高/低聚类 (Getis-Ord General G) 统计是一种用于检测空间数据中是否存在高值或低值聚类的统计方法&#xff0c;这种方法可以帮助我们理解数据点在空间上是否呈现某种聚集模式。 高/低聚类 (Getis-Ord General G) 和空间自…