python开发prometheus exporter--用于hadoop-yarn监控

首先写python的exporter需要知道Prometheus提供4种类型Metrics

分别是:Counter, Gauge, Summary和Histogram

* Counter可以增长,并且在程序重启的时候会被重设为0,常被用于任务个数,总处理时间,错误个数等只增不减的指标。

* Gauge与Counter类似,唯一不同的是Gauge数值可以减少,常被用于温度、利用率等指标。

* Summary/Histogram概念比较复杂,对于我来说目前没有使用场景,暂无了解。

我们需要的pip模块

from prometheus_client import CollectorRegistry, Gauge, push_to_gateway, start_http_server-----pip install prometheus_client

代码思路实例

def push_yarn():# 监控zk_RMYarn_zkRMAppRoot()# 监控yarn任务信息Yarn_AppsInfo()def run():start_http_server(8006)  # 8006端口启动while True:push_yarn()time.sleep(10)if __name__ == '__main__':run()

push_yarn()为监控的数据数据

循环进行监控拿取数据进行监控

我们使用Gauge实例

注意⚠️:Gauge与Counter类似,唯一不同的是Gauge数值可以减少,常被用于温度、利用率等指标。

新增Gauge实例

yarn_zkRMAppRoot_code = Gauge('yarn_zkRMAppRoot', 'yarn_zkRMAppRoot_num', ['instance'])started_time_gauge = Gauge('yarn_started_time', 'started_time', ['application'])launch_time_gauge = Gauge('yarn_launch_time', 'launch_time', ['application'])finished_time_gauge = Gauge('yarn_finished_time', 'finished_time', ['application'])memory_seconds_gauge = Gauge('yarn_memory_seconds', 'memory_seconds', ['application'])vcore_seconds_gauge = Gauge('yarn_vcore_seconds', 'vcore_seconds', ['application'])

yarn_zkRMAppRoot_code: 这个是一个Gauge指标,用于记录YARN ResourceManager应用程序根目录在ZooKeeper中的znode数量。

yarn_started_time: 这是一个Gauge指标,用于记录应用程序的启动时间。这个指标有一个 application 标签,用于区分不同的应用程序。

yarn_launch_time: 这是一个Gauge指标,用于记录应用程序的启动时间。这个指标也有一个 application 标签。

yarn_finished_time: 这是一个Gauge指标,用于记录应用程序的结束时间。这个指标也有一个 application 标签。

yarn_memory_seconds: 这是一个Gauge指标,用于记录应用程序使用的内存数量乘以运行时间(内存-秒)。这个指标也有一个 application 标签。

yarn_vcore_seconds: 这是一个Gauge指标,用于记录应用程序使用的虚拟CPU核心数量乘以运行时间(vCore-秒)。这个指标也有一个 application 标签。

实现一下我们要监控的指标

# --------yarn-------- #####def Yarn_zkRMAppRoot():# 命令# 命令if kerberos_switch:command = f'''echo 'ls /rmstore/ZKRMStateRoot/RMAppRoot' | /opt/dtstack/DTBase/zookeeper/bin/zkCli.sh | grep application_ | awk -F , '{{print NF}}''''else:command = f'''export CLIENT_JVMFLAGS="$CLIENT_JVMFLAGS -Djava.security.auth.login.config=/opt/dtstack/DTBase/zookeeper/conf/jaas.conf -Djava.security.krb5.conf=/opt/dtstack/Kerberos/kerberos_pkg/conf/krb5.conf -Dzookeeper.server.principal=zookeeper/{hostname}@DTSTACK.COM"echo 'ls /rmstore/ZKRMStateRoot/RMAppRoot' | /opt/dtstack/DTBase/zookeeper/bin/zkCli.sh | grep application_ | awk -F , '{{print NF}}''''# 使用subprocess模块执行命令result = subprocess.getstatusoutput(command)  # (0, '455')if result[0] == 0:yarn_zkRMAppRoot_code.labels('yarn_' + hostname).set(result[1])else:print(f"Failed to execute command: {command}")def Yarn_AppsInfo():list_apps = []command = "yarn rmadmin -getServiceState rm1"apps_url = "http://{}/ws/v1/cluster/apps"rm_info = subprocess.getstatusoutput(command)if rm_info[0] == 0:if rm_info[1] == 'active':rm_host = yarn_rm1else:rm_host = yarn_rm2response = requests.get(url=apps_url.format(rm_host))html = response.textdata = json.loads(html)for i in range(0, len(data['apps']['app'])):need_data = data['apps']['app']if need_data[i]['memorySeconds'] > 102400:  # 大于10G的任务list_apps.append([need_data[i]['id'],need_data[i]['startedTime'],need_data[i]['launchTime'],need_data[i]['finishedTime'],need_data[i]['memorySeconds'], need_data[i]['vcoreSeconds']])sorted_lst = sorted(list_apps, key=lambda x: (x[4], x[5]))for list in sorted_lst:application = list[0]started_time = list[1]launch_time = list[2]finished_time = list[3]memory_seconds = list[4]vcore_seconds = list[5]started_time_gauge.labels(application=application).set(started_time)launch_time_gauge.labels(application=application).set(launch_time)finished_time_gauge.labels(application=application).set(finished_time)memory_seconds_gauge.labels(application=application).set(memory_seconds)vcore_seconds_gauge.labels(application=application).set(vcore_seconds)

其中Yarn_zkRMAppRoot是检测znode数量的

Yarn_AppsInfo是检测大于10G的任务的

传到服务器启动这个exporter

python3 mg_exporter.py

访问http://172.16.121.89:8006/metrics

然后加入prometheus配置中就可以检测到了

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

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

相关文章

查看wsl 版本

要查看Windows Subsystem for Linux (WSL) 的版本,您通常需要查看WSL的版本号以及正在运行的Linux发行版的版本。以下是检查这两个版本的方法: 1. 查看WSL的版本(WSL 1 或 WSL 2) 要检查您的计算机上是否启用了WSL 2&#xff0c…

如何录制屏幕视频?4款软件,轻松录屏

在数字化飞速发展的时代,如何录制屏幕视频已经成为我们工作、学习和娱乐中不可省略的一个重要问题。无论是制作教学教程还是录制游戏视频等,屏幕视频录制都为我们提供了极大的便利。今天,就让我们一起探索如何录制屏幕视频的精彩方式&#xf…

多数据源配置导致注解Transactional失效

多数据源配置时,向事务管理器中注入数据源时可以直接注入DynamicRoutingDataSource而不要注入ItemDataSource类型,否则可能会出现事务失效问题。 其他事务失效问题参考: 注解Transaction踩坑指南 注解Transaction失效场景

Windows环境+C#实现显示接口测试

代码如下: using Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; …

大模型“聚会”:国内卷价格,国外卷能力

[ GPT-4o和谷歌Gemini不断宣传现阶段AI能力大幅度提高,那么这两家,谁的大模型能力更强呢?这篇文章里,作者就展开了多维度的测试和体验,想了解的同学,可以来看一下。 在中美AI大模型的竞争上,正衍…

从数据仓库到数据湖(上):数据湖导论

文章目录 一、什么是数据湖?起源数据湖的特征 二、为什么要用数据湖?三、数据湖与数据仓库的区别数据仓库和数据湖的对比 四、数据湖本质数据存储架构数据处理工具:三类第一类工具第二类工具第三类工具 小结 五、总结六、参考资料 一、什么是…

[运维平台]泛微运维平台

运维平台点击登录没有反应,是因为H2数据库损坏,H2数据库在服务器异常重启,磁盘满等情况下容易损坏,请按照下面的步骤操作Linux: 运维平台升级包https://www.weaver.com.cn/cs/monitorDownload.html 1)请停…

常见数据库类型和选取详解

数据库是用于存储、检索和管理数据的系统。它们可以根据数据模型的不同被分类为不同类型。以下是一些常见的数据库类型和它们的选取详解: 1. 关系型数据库(RDBMS) 特点: 使用表格(tables)来组织数据。基…

百日筑基第十六天-java多线程编程浅学一下4-各种线程池学习和使用

百日筑基第十六天-java多线程编程浅学一下4-各种线程池学习和使用 使用线程池 Java语言虽然内置了多线程支持,启动一个新线程非常方便,但是,创建线程需要操作系统资源(线程资源,栈空间等),频繁…

MQ四兄弟:如何保证消息顺序性

在当今的分布式系统架构中,消息队列(MQ)是不可或缺的组成部分。它们在确保系统组件之间高效通信方面发挥着关键作用。特别是在金融交易、物流跟踪等对消息处理顺序有严格要求的场景中,消息队列的顺序性保证显得更为重要。接下来&a…

使用libguestfs挂载qcow2磁盘镜像

挂载qcow2磁盘镜像的第一种方法是使用 libguestfs,它提供了一系列工具来访问和编辑 VM 磁盘镜像。libguestfs 支持几乎所有类型的磁盘镜像,包括 qcow2。你可以像下面这样,在Linux上安装libguestfs工具集。 1、安装guestmount工具 在基于 De…

主干网络篇 | YOLOv5/v7 更换骨干网络之 MobileNetV3 | 基于神经网络搜索的轻量级网络(2)

主干网络篇 | YOLOv5/v7 更换骨干网络之 MobileNetV3 | 基于神经网络搜索的轻量级网络 概述 YOLOv5和YOLOv7是目前主流的轻量级目标检测模型,在速度和精度方面取得了良好的平衡。然而,传统的YOLOv5/v7模型使用FPN和CSPNet等结构作为主干网络&#xff0…

SMU Summer 2024 Contest Round 2

[ABC357C] Sierpinski carpet - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:通过因为图形的生成过程是完全一样的。可以通过递归,不断分形。函数process(x,y,k)定义为以坐标(x,y)为左上角,填充sqrt3(k)级的地毯。 int n; int c[800][800]; 默认全为…

【杂说咋说】近年来国土空间规划行业人员转行分析

这几年,国土空间规划行业的人员流动引起了不少关注。我们可以从几个方面来看这些变化: 考公务员 许多从事国土空间规划的专业人员选择了考公务员。这种选择相对稳定,不需要熬夜加班,工作环境也更为舒适。尤其是进入国家机关或住…

POSIX互斥锁和条件变量

一.概述 1.POXIS介绍 POXIS是一种操作系统接口标准,全称为“可移植操作系统接口”。 它最初由IEEE组织制定,目的是为了使不同的操作系统之间可以互相兼容。POSIX标准定义了一系列API(应用程序接口)和命令行工具,这些…

Mybatis核心问题总结

对MyBatis源码的理解 ORM框架:CRUD操作 1。SQL解析: 映射文件、注解--》映射器解析 XMLMapperBuilder MapperAnnotationBuilder 2。SQL执行: SqlSession 接口--》Executor --》 SimpleExecutor ReuseExecutor 【Statement--JDBC】 3。结果映射&…

Go语言---Json

JSON (JavaScript Object Notation)是一种比XML 更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成。尽管JSON是 JavaScript的一个子集,但 JSON采用完全独立于编程语言的文本格式,且表现为键/值对集合的文…

【大模型LLM面试合集】大语言模型架构_layer_normalization

2.layer_normalization 1.Normalization 1.1 Batch Norm 为什么要进行BN呢? 在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。Internal Covariat…

【C++高阶】高效数据存储:理解并模拟实现红黑树Map与Set

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:了解 红黑树 🌹🌹期待您的关注 🌹🌹 ❀模拟实现Map与Set 📒1.…

js ES6 part1

听了介绍感觉就是把js在oop的使用 作用域 作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问, 作用域分为: 局部作用域、 全局作用域 1. 函数作用域: 在函数内部声明的…