python export_python自定义监控slurm的Prometheus的export

首先:这篇文章做的是写一个监控slurm的Prometheus的export,安装环境是ubuntu16.04。

1. 下载Prometheus

官网链接下载,然后解压

tar -zxvf prometheus-2.4.3.linux-amd64.tar.gz

cd prometheus-2.4.3.linux-amd64

2. 配置文件prometheus.yml

开头的都是默认配置,需要配置的是最低下的job_name,把你需要监控的ip地址设置一下,我在这监控的是my_slurm,ip为localhost:8000(最好写成IP地址,不要写localhost,我这里在偷懒 :D)

# my global config

global:

scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

# scrape_timeout is set to the global default (10s).

# Alertmanager configuration

alerting:

alertmanagers:

- static_configs:

- targets:

# - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.

rule_files:

# - "first_rules.yml"

# - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:

# Here it's Prometheus itself.

scrape_configs:

# The job name is added as a label `job=` to any timeseries scraped from this config.

- job_name: 'prometheus'

# metrics_path defaults to '/metrics'

# scheme defaults to 'http'.

static_configs:

- targets: ['localhost:9090']

- job_name: 'my_demo'

# scheme defaults to 'http'.

static_configs:

- targets: ['localhost:9100']

- job_name: 'my_slurm'

# scheme defaults to 'http'.

static_configs:

- targets: ['localhost:8000']

3.没有设置其他监控,直接开启服务

./prometheus --config.file=prometheus.yml

4. 下载slurm

5. slurm的作用

现在slurm要做的就是跑一个job,然后我们通过slurm命令,拿到这个job所用的资源,先举个小栗子!

vim job.sh # 创建一个脚本任务,随便一个延时就可以了

sbatch job.sh # 运行这个任务,此时返回jobID。

cat slurm-1.out # -1就是jobID

scontrol show nodes # 查看所有状态信息

oc: NodeName=localhost Arch=x86_64 CoresPerSocket=1

CPUAlloc=1 CPUErr=0 CPUTot=1 CPULoad=0.14 Features=(null)

Gres=(null)

NodeAddr=localhost NodeHostName=localhost Version=15.08

OS=Linux RealMemory=7965 AllocMem=1024 FreeMem=4005 Sockets=1 Boards=1

State=ALLOCATED ThreadsPerCore=1 TmpDisk=41197 Weight=1 Owner=N/A

BootTime=2018-12-03T14:23:17 SlurmdStartTime=2018-12-03T14:24:58

CapWatts=n/a

CurrentWatts=0 LowestJoules=0 ConsumedJoules=0

ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s

这里显示了一大堆东西,我们只需要将需要的属性名(如:CPUTot,这是这个节点所分配的cpu数)通过正则选出就可以了,量。

此时job正在跑,通过squeue可以查看job所用的资源,更多详情可查看slurm-squeue命令

squeue --format "%A:%c:%t" # %A是jobID,%c是所用cpu数,%t是job状态

JOBID:MIN_CPUS:ST

35:1:R

6. 好了,一切准备就绪,该写一个collect了。

在Prometheus中有四种Metrics(数据类型):Counter, Gauge, Summary和Histogram。

Counter:是可以增长的,初始值为0,只增不减。

Gauge:与counter类似,可增可减。

其他两个很少用,Histogram,Summary

下面用到的都是Gauge类型。

栗子中用到的subprocess可以查看我之前的文章python使用subprocess

注意:GaugeMetricFamily中的value,值必须是float类型。

import re

import subprocess

from prometheus_client.core import GaugeMetricFamily, REGISTRY

from prometheus_client import make_wsgi_app

from wsgiref.simple_server import make_server

class CustomCollector(object):

def add(self, params):

sum = 0

for i in params:

sum += int(i)

return sum

def collect(self):

output = subprocess.Popen("scontrol show nodes",

stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

out_put = output.communicate()[0]

if out_put:

count = re.findall(r'CPUTot=(\d+)', out_put)

total_c = self.add(count)

yield GaugeMetricFamily('slurm_cpu_total', 'total_count', value=total_c)

used = re.findall(r'CPUAlloc=(\d+)', out_put)

used_cpu = self.add(used)

yield GaugeMetricFamily('slurm_cpu_used', 'used_count', value=used_cpu)

real_memory = re.findall(r'RealMemory=(\d+)', out_put)

total_memory = self.add(real_memory)

yield GaugeMetricFamily('slurm_memory_total', 'total_memory', value=total_memory)

alloc_memory = re.findall(r'AllocMem=(\d+)', out_put)

used_memory = self.add(alloc_memory)

yield GaugeMetricFamily('slurm_memory_used', 'used_memory', value=used_memory)

REGISTRY.register(CustomCollector())

if __name__ == '__main__':

coll = CustomCollector()

for i in coll.collect():

print i

app = make_wsgi_app()

httpd = make_server('', 8000, app)

httpd.serve_forever()

7. 在当前文件夹下创建job.sh文件并运行,到prometheus的目录下,运行服务(第三步没做的现在开启),打开浏览器,登陆localhost:9090

这里搜索的关键词就是我们定义类型时,给的名称。

以上!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值