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.pswp.cn/diannao/44169.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44169.shtml
英文地址,請注明出處:http://en.pswp.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. 函數作用域: 在函數內部聲明的…