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

news2024/10/1 7:38:15

首先写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_RM

    Yarn_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_rm1

        else:

            rm_host = yarn_rm2

    response = requests.get(url=apps_url.format(rm_host))

    html = response.text

    data = 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.coloradmin.cn/o/1913066.html

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

相关文章

【深度学习】LeNet原理及代码实现

目录 1.原理及介绍 2.代码实现 2.1model.py 2.2model_train.py 2.3model.test.py 1.原理及介绍 2.代码实现 2.1model.py import torch from torch import nn from torchsummary import summaryclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__…

高智能土壤养分检测仪:农业生产的科技新助力

在科技日新月异的今天,农业领域也迎来了革命性的变革。其中,高智能土壤养分检测仪作为现代农业的科技新助力,正逐渐改变着传统的农业生产方式,为农民带来了前所未有的便利与效益。 高智能土壤养分检测仪,是一款集高科技…

grep对文件内容搜索(附重要拓展-正则表达式)

文件搜索是搜索查找符合条件的某文件的目录,若要编辑文件或对文件的某配置进行修改,就需要对文件内容进行搜索。 grep 命令是 Linux 及类 Unix 操作系统中的一个强大的文本搜索工具,用于搜索一个或多个文件中匹配给定模式的行。grep 代表“Gl…

深入剖析数据库索引

写在前面: 此博客内容已经同步到我的博客网站,如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/database 文章目录 如何验证我们正在使用InnoDB引擎 主键如果你没有自己创建任何主键会发生什么?关键字和索引之间的区别…

基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)

基于SpringBootHadooppython的物品租赁系统(带1w文档) 基于SpringBootHadooppython的物品租赁系统(带1w文档) 物品租赁系统是电子、信息技术相结合,是一种必然的发展趋势。以互联网为基础,以服务于广大用户为目的,发展整体优势,扩…

经典双通道比较器LM393、LM393B、LM2903B、LM193、LM293和LM2903介绍及输入输出仿真

前言: LM393 SOP8封装的外观与丝印 LM393出现几十年了,是一款经典的双比较器,非常经典,用的比较多,新的比较器大家也要多关注。 该类型比较器,虽然静态电流较小,但在电池电路中耗电是巨大的&…

学习笔记——动态路由——IS-IS中间系统到中间系统(IS-IS工作过程)

六、IS-IS工作过程 1、第一步:建立邻居关系 IS-IS网络中所有路由器之间实现通信,主要通过以下几个步骤: (1)邻居关系建立: 邻居关系建立主要是通过HELLO包交互并协商各种参数,包括链路类型(level-1/level-2)&#…

hdfs大规模数据存储底层原理详解(第31天)

系列文章目录 一、HDFS设计原理 二、HDFS系统架构 三、HDFS关键技术 四、HDFS应用实例 五、解决HDFS不能处理小文件详解问题 文章目录 系列文章目录前言一、设计原理二、系统架构三、关键技术四、应用实例五、解决HDFS不能处理小文件详解问题1. 合并小文件2. 优化Hive配置3. 使…

乐器培训课程报名小程序模板源码

模板介绍 一款实用的音乐课程,乐器培训,艺术类网页课程报名手机小程序模板下载。包含:主页、列表、个人中心、报名等模块。 图片演示 乐器培训课程报名小程序模板源码

Oracle基础以及一些‘方言’(一)

1、什么是Oracle ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。 ORACLE 数据库是目前世界…

免费试用Aicbo AI绘图软件,你的艺术梦想触手可及

最近AI绘图技术风靡全球,今天要给大家推荐一款集成了免费试用AI绘图软件的神器,即便你是从零开始,也能迅速掌握,创作出令人惊叹的艺术作品。平台是叫:Aicbo 这款神器设计人性化,操作极其简便,只…

apache:the requested operation has failed使用httpd -t

Apache24\bin cmd 回车 httpd -t 因为我重新压缩了,记住,重新压缩要使用原路径, 因为你安装的 时候使用的是原路径 还是不行就改个端口,切记修改配置文件httpd.conf先把Tomcat停了 Define SRVROOT "F:\Apache\Apache24&q…

相机光学(三十)——N5-N7-N8中性灰

GTI可提供N5/N7/N8中性灰涂料,用于不同的看色环境,N5/N7/N8代表深中浅不同的灰色程度,在成像、工业、印刷行业中,分别对周围观察环境有一定的要求,也出台了相应的标准文件,客户可以根据实际使用环境进行选择…

7.9实验室总结 SceneBuilder的使用方法+使用javafx等

由于下错了东西,所以一直运行不出来,今天一直在配置环境,配置好了才学,所以没学多少,看了网课学习了SceneBuilder的使用方法还有了解了javafx是怎么写项目的,, 学习了怎么跳转页面:…

ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过

web164 和 web165 的利用点都是二次渲染,一个是 png,一个是 jpg 目录 1、web164 2、web165 二次渲染: 网站服务器会对上传的图片进行二次处理,对文件内容进行替换更新,根据原有图片生成一个新的图片,这样…

效果惊人!LivePortrait开源数字人技术,让静态照片生动起来

不得了了,快手已经不是众人所知的那个短视频娱乐平台了。 可灵AI视频的风口尚未过去,又推出了LivePortrait--开源的数字人项目。LivePortrait让你的照片动起来,合成逼真的动态人像视频,阿里通义EMO不再是唯一选择。 让图像动起来 LivePortrait 主要提供了对眼睛和嘴唇动作的…

免费下载工具 -- Free Download Manager(FDM) v6.24.0.5818

软件简介 Free Download Manager (FDM) 是一款免费的功能强大的下载管理软件,适用于多种操作系统,包括 Windows、macOS、Android 和 Linux。这款软件的特色在于它快速、安全且高效的下载能力。它可以下载各种热门网站的影片,支持 HTTP/HTTP…

申请商标用什么颜色:企业和个人申请注册商标攻略!

在申请注册商标到底要用什么颜色,许多初次申请注册主体都不是特别清楚,普推知产商标老杨建议,在一般情况下建议尽量用黑白色,因为商标用黑白色在使用时可以着任何色。 在用黑色申请注册成功,别的主体用其它颜色要在同…

宝塔面板运行Admin.net框架

准备 宝塔安装 .netcore安装 Admin.net框架发布 宝塔面板设置 完结撒花 1.准备 服务器/虚拟机一台 系统Windows server / Ubuntu20.04(本贴使用的是Ubuntu20.04版本系统) Admin.net开发框架 先安装好服务器系统,这里就不做安装过程描述了&…

802.11漫游流程简单解析与笔记_Part2_05_wpa_supplicant如何通过nl80211控制内核开始关联

最近在进行和802.11漫游有关的工作,需要对wpa_supplicant认证流程和漫游过程有更多的了解,所以通过阅读论文等方式,记录整理漫游相关知识。Part1将记录802.11漫游的基本流程、802.11R的基本流程、与认证和漫游都有关的三层秘钥基础。Part1将包…