【监控】prometheus自定义指标 exporter

news2024/11/21 0:13:20

一、【写在前面】

prometheus自定义指标本质是用代码自己写一个网络访问的采集器,你可以在官网看到,Client libraries | Prometheus官方支持的语言有GO  JAVA PYTHON RUBY RUST, 第三方的库就支持的更多了,有BASH C CPP LUA C# JS PHP R PERL等,所以基本都可以找到自己需要的语言

 

因为考虑到prometheus官方提供的node exporter有限,社区的exporter需要找找找然后自己魔改,所以这篇文章写一个自定义指标的示例,小改一下就能自己用,但是当然您需要提前搭建一套prometheus才行,所以此文章作为以下的补充grafana + Prometheus + node-exporter + pushgateway + alertmanager的监控解决方案-CSDN博客

二、【基本介绍】

1. exporter是什么

exporter就是我们传统意义上说的agent。笔者到网上找了张架构图,你可以看到exporter部署在目标机器或者目标机器外,采集所需的指标,然后再由Prometheus定期拉取,也就是说,你可以看到,这个过程可能存在两个定时过程,一个是exporter处指标的定时更新,另一个是prometheus的定时拉取。

 

2. 支持哪些类型的指标

 这个库还是蛮清楚明了的,官网文档一页就能看完,它支持这么几种类型,根据需要选取就行,这是他的官网,Instrumenting | client_python, 下面是用GPT总结的几个常用类

1. Counter(计数器)

特点

  • 单调递增,只能增加或重置为零,不能减少。

使用场景

  • 统计事件发生的总次数,如请求数、错误数等。
from prometheus_client import Counter

c = Counter('requests_total', 'Total number of requests')
c.inc()  # 增加1
c.inc(5)  # 增加5

2. Gauge(仪表)

特点

  • 可以增加、减少或设置为任意值。

使用场景

  • 表示瞬时值,如当前温度、内存使用量、并发请求数等。
from prometheus_client import Gauge

g = Gauge('memory_usage_bytes', 'Memory usage in bytes')
g.set(12345)  # 设置为12345
g.inc()  # 增加1
g.dec(2)  # 减少2

3. Summary(摘要)

特点

  • 统计事件的持续时间或大小,提供总量、次数以及可配置的分位数信息。

使用场景

  • 记录请求的响应时间、数据包的大小等。
from prometheus_client import Summary

s = Summary('request_latency_seconds', 'Request latency in seconds')
s.observe(0.5)  # 记录一个0.5秒的请求延迟

4. Histogram(直方图)

特点

  • 类似于Summary,但提供详细的桶分布信息,统计每个桶内的值的个数。

使用场景

  • 记录请求的响应时间,并分析其分布情况;记录数据包的大小分布。
from prometheus_client import Histogram

h = Histogram('request_latency_seconds', 'Request latency in seconds')
h.observe(0.5)  # 记录一个0.5秒的请求延迟

5. Info

特点

  • 记录一些静态的信息,如版本号、配置信息等。

使用场景

  • 记录应用的版本号、配置参数等。
from prometheus_client import Info

i = Info('app_version', 'Application version')
i.info({'version': '1.0.0', 'build': 'abc123'})

6. Enum

特点

  • 表示一组离散的互斥状态。

使用场景

  • 记录应用的运行状态(如启动、运行、停止);记录服务器的健康状态。
from prometheus_client import Enum

e = Enum('app_state', 'Application state', states=['starting', 'running', 'stopping', 'stopped'])
e.state('running')

7. Labels(标签)

特点

  • 为指标附加维度,可以在同一指标名称下记录多个不同维度的数据。

使用场景

  • 记录每个API端点的请求次数;记录不同状态的任务数。
from prometheus_client import Counter

c = Counter('http_requests_total', 'Total number of HTTP requests', ['method', 'endpoint'])
c.labels(method='get', endpoint='/home').inc()
c.labels(method='post', endpoint='/submit').inc()

 这里我说一句,这个标签特别适合做多维表,prometheus这个东西它自定义生成的大都是键值对,如果要做多维,用这个会方便一些,但是只限于在label里(也就是[]中)写常量,因为他本质还是在键里写信息,如果键里内容变了,prometheus会认为是新的条目

8. Exemplars(示例)

特点

  • 关联指标数据和具体的事件样本,帮助在分析时追踪和关联具体的事件。

使用场景

  • 关联慢请求的具体trace;提供异常事件的上下文信息。
from prometheus_client import Histogram

h = Histogram('request_latency_seconds', 'Request latency in seconds')
h.observe(0.5, {'trace_id': '12345'})  # 记录一个0.5秒的请求延迟,并附加trace ID
# 本质上不是一个新类

 三、【代码实现】

1. 安装prometheus client 库

pip install prometheus_client

2. 复制代码

让GPT写了一个用线程精准定时的采集指标,你可以看到,本质就是创建一个 指标类型(这里是Counter和Gauge) 然后把数字用set塞进去就行。

from prometheus_client import start_http_server, Counter, Gauge
import threading
import random
import time

# 创建计数器
REQUEST_COUNTER = Counter('periodic_tasks_total', 'Total number of periodic tasks executed')
# 创建仪表
PERIODIC_GAUGE = Gauge('periodic_task_value', 'Value generated by periodic task')

def generate_metrics():
    """生成指标的函数,每30秒执行一次"""
    REQUEST_COUNTER.inc()  # 增加计数器
    value = random.uniform(0, 100)
    PERIODIC_GAUGE.set(value)  # 设置仪表值
    print(f"Generated metrics: {value}")

def schedule_periodic_metrics(interval):
    """调度定时任务的函数,确保每interval秒执行一次"""
    generate_metrics()
    # 使用threading.Timer确保精确的定时
    threading.Timer(interval, schedule_periodic_metrics, [interval]).start()

if __name__ == '__main__':
    # 启动一个Prometheus HTTP服务器,用于抓取指标数据
    start_http_server(8000)
    # 启动精确定时任务,每30秒生成一次指标
    schedule_periodic_metrics(30)

    # 保持主线程运行
    while True:
        time.sleep(1)

3. 确认连通情况

把上面的脚本跑起,然后另一边在Prometheus里的yml写上连接的ip和端口,并且重启prometheus,随后网页 “1.1.1.1:8000/targets” 查看情况

  - job_name: 'trading_observer'
    static_configs:
      - targets: ['1.1.1.1:8000']

看到这个up就是连接上了 

之后就可以在grafana中通过指标名获取数据了 

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

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

相关文章

如何解决研发数据传输层面安全可控、可追溯的共性需求?

研发数据在企业内部跨网文件交换,是相对较为普遍而频繁的文件流转需求,基于国家法律法规要求及自身安全管理需要,许多企业进行内部网络隔离。不同企业隔离方案各不相同,比如银行内部将网络隔离为生产网、办公网、DMZ区&#xff0c…

Superset二次开发之Github项目推送到GitLab仓库

以下是从GitHub克隆Superset项目并将其推送到GitLab的详细操作步骤 lab 地址: xxx lab 配置: 生成SSH密钥 ssh-keygen -t rsa -b 4096 -C "邮箱地址" 默认情况下密钥会生成在~/.ssh (/c/Users/Administrator/.ssh/id_rsa)目录下。 公钥添加到GitLab: 打开公钥文件…

学校机房批量控制关机源码

学校机房批量控制关机源码 效果图源码说明源码领取下期更新预报 效果图 源码说明 本源码由易语言编写,希望各位用在正道上。下面我给你们教一下IP查看方法; 第一步:‘’winr‘’,打开运行框,输入’‘cmd’回车。 输…

【介绍下SCSS的基本使用】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

东莞酷得智能 组装机械狗电子玩具方案

这款机械狗玩具电子方案结合了现代电子技术和人工智能元素,旨在为用户提供一个高科技、互动性强的娱乐体验。通过不断的软件更新和硬件迭代,机械狗的功能将持续扩展。 一、功能特点: 1、自动巡游:机械狗能够自主在房间内巡游&am…

IP地址开启HTTPS方法

可以使用IP地址申请SSL证书,申请之前必须是公网IP地址,不支持内网IP地址申请。 申请过程需要确定IP地址外网可以访问,这里特别注意只是申请过程中可以访问。访问验证过程必须采取80端口、443端口两者选择1个,不可以用其它端口进行…

docker部署owncloud进行管理

目录 一.拉取镜像 1.使用mysql和owncloud最新版镜像,构建个人网盘 2.查看是否已经正确监听端口 二.使用浏览器进行测试 1.使用IP:8080进行访问,用admin运行容器时设置的密码登录 2.查看到已经有的文件 3.文件上传对应的位置 4.在web页面进行简单…

更换固件后飞控OSD叠显不对/叠显不显示/叠显乱码问题

笔者用的飞控型号为SpeedyBeeF405V4的飞控,OSD叠显芯片型号为AT7456E。 我的这款飞控是支持两款固件的,INAV和BetaFlight。 开始飞控的默认固件为BetaFlight,切换INAV固件后,进行OSD调整,但发现水平线无法正常显示&…

【源码】Spring Data JPA原理解析之Repository自定义方法命名规则执行原理(二)

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…

苍穹外卖数据可视化

文章目录 1、用户统计2、订单统计3、销量排名Top10 1、用户统计 所谓用户统计,实际上统计的是用户的数量。通过折线图来展示,上面这根蓝色线代表的是用户总量,下边这根绿色线代表的是新增用户数量,是具体到每一天。所以说用户统计…

C++系列-STL简介

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 什么是STL STL是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 STL的版本 原始版本 Alexander Stepa…

浅谈安科瑞ASJ10-LD1A智能漏电继电器的设计与应用-安科瑞 蒋静

一 产品简介 功能 ASJ10-LD1A安科瑞智能电力继电器 剩余电流保护可与低压断路器或低压接触器等组成组合式的剩余电流动作保护器,主要适用于交流50Hz,额定电压为400V及以下的TT或TN系统配电线路,防止接地故障电流引起的设备和电气火灾事故&a…

香橙派OriengePi AiPro 华为昇腾芯片开发板开箱测评

香橙派OriengePi AiPro 华为昇腾芯片开发板开箱测评 文章目录 前言OrangePi AIpro硬件相关及配置外观接口配置虚拟桌面网络配置拓展swap内存 软件相关及配置docker基础镜像搭建pytorch安装及匹配 软件测试使用yolo v8测试使用模型转换 总结 前言 博主有幸受邀CSDN测评香橙派与…

智能小家电风潮渗透美国市场,哪些产品适合入驻沃尔玛?

智能小家电风潮在美国市场持续渗透,这为众多品牌提供了良好的商机。沃尔玛作为全球零售巨头,自然成为许多品牌进驻美国市场的首选平台。 针对智能小家电产品,以下是一些适合入驻沃尔玛的产品类型: 一、智能厨房电器 美国市场接受…

如何基于知行之桥V2024快速搭建一个EDI工作流?

本文将基于知行之桥EDI系统V2024版本展开介绍,与之前的版本相比,UI界面的变化较为明显。 创建工作区 首先登录知行之桥EDI系统,输入用户名密码后将会看到 概览 页面。 点击 概览 右侧的 工作流,即可进入到 工作流 页面&#xff…

K8S 证书过期不能使用kubectl之后,kubeadm 重新生成证书

查询证书过期时间 kubeadm certs check-expiration重新生成证书 # 重新生成所有证书 kubeadm certs renew all # 重新生成某个组件的证书 kubeadm certs renew 组件名称 如:apiserver生成新的配置 # 重新生成kubeconfig配置 kubeadm init phase kubeconfig # 重…

12 FreeRTOS 调试与优化

1、调试 1.1 打印 在FreeRTOS工程中使用了microlib,里面实现了printf函数。 只需要实现一下以下函数即可使用printf。 int fputc(int ch; FILE *f); 假如要从串口实现打印函数: int fputc( int ch, FILE *f ) {//指定串口USART_TypeDef* USARTx USAR…

语音深度鉴伪识别项目实战:基于深度学习的语音深度鉴伪识别算法模型(二)音频数据预处理及去噪算法+Python源码应用

前言 深度学习技术在当今技术市场上面尚有余力和开发空间的,主流落地领域主要有:视觉,听觉,AIGC这三大板块。 目前视觉板块的框架和主流技术在我上一篇基于Yolov7-LPRNet的动态车牌目标识别算法模型已有较为详细的解说。与AIGC相…

【火炬打宝策略】

打宝策略刷遗物: 时可4 只刷奇诊加稀有度,没有奇诊可以直接不打。

当新媒体运营开始说真话,这些道理你真的懂么?沈阳新媒体运营培训

运营新人,尤其是刚毕业、啥都不会的大学生,一定要认清的现实就是:虽然新媒体运营这个岗位门槛比较低,薪资也比较香,但绝不是养老型的工作。 平时大家还是很忙的,所以一定要摒弃学生思维,千万别…