使用 Python 脚本从节点导出器指标中获取 CPU、内存、磁盘数据

问题描述

目前我正在开发一个 python Flask 应用程序。我需要获取机器的cpu、内存、磁盘数据。我想使用 Python 脚本使用 node-exporter 获取这些数据。目前我正在处理虚拟数据。

以下是提供的说明:

  1. 选择两个简单的指标
  2. 向节点导出器发送 http 调用并将 coutput 保存到文件或保存在变量中
  3. 提取指标的值
  4. 您可以在单独的文件中拥有指标和节点导出器指标的映射
  5. 将值保存在表中

有人知道如何开发这种 Python 脚本吗?

这是我没有节点导出器查询的控制器类:

indicator_data = db.session.query(Indicator_data.indicator_data_id,Indicator_data.indicator_id,Indicator_data.value,Vnfc_instance.vnfc_instance_id,Vnfc_instance.vnfc_instance_name,func.max(Indicator_data.timestamp)).group_by(Indicator_data.indicator_id)


    get_indicators_list = []
    for indicator_record in indicator_data:

        indicator_data_id = indicator_record.indicator_data_id
        value = indicator_record.value
        vnfc_instance_id = indicator_record.vnfc_instance_id
        vnfc_instance_name = indicator_record.vnfc_instance_name

        self_dict = {
            'href': request.base_url,}
        vnfInstance_dict = {
            'href': 'https//:www.example.com',}
        links_dic = {
            'self': self_dict,'vnfInstance': vnfInstance_dict
        }

        get_indicators_dict = {
            '_links': links_dic,'id': indicator_data_id,'value': value,'vnfInstanceId': vnfc_instance_id,'name': vnfc_instance_name

        }
        get_indicators_list.append(get_indicators_dict)
        print(get_indicators_dict)
    return get_indicators_list

解决方法

看到这个example

import psutil
import time

from prometheus.collectors import Gauge

ram_metric = Gauge("memory_usage_bytes","Memory usage in bytes.",{'host': host})
cpu_metric = Gauge("cpu_usage_percent","CPU usage percent.",{'host': host})

while True:
    time.sleep(1)

    # Add ram metrics
    ram = psutil.virtual_memory()
    swap = psutil.swap_memory()

    ram_metric.set({'type': "virtual",},ram.used)
    ram_metric.set({'type': "virtual",'status': "cached"},ram.cached)
    ram_metric.set({'type': "swap"},swap.used)

    # Add cpu metrics
    for c,p in enumerate(psutil.cpu_percent(interval=1,percpu=True)):
        cpu_metric.set({'core': c},p)