自定义监控

代码说明:

导入必要的库

python 复制代码
import time
import psutil
import GPUtil
from prometheus_client import start_http_server, Summary, Counter, Gauge
  • psutil:用于获取系统的CPU、内存、磁盘和网络信息。
  • GPUtil:用于获取GPU信息。
  • prometheus_client:用于创建Prometheus指标和启动HTTP服务器以暴露指标。

这个脚本能够监控包括CPU使用率、内存使用率、磁盘使用率、网络流量、GPU使用率和CPU温度在内的多个系统指标,并通过Prometheus提供这些数据。你可以通过Prometheus抓取这些数据并在Grafana中可视化。

python 复制代码
import time
import psutil
import GPUtil
from prometheus_client import start_http_server, Summary, Counter, Gauge

# 创建指标,使用中文描述
# CPU使用率(Gauge)
CPU_USAGE = Gauge('cpu_usage', 'CPU使用率')
# 内存使用率(Gauge)
MEMORY_USAGE = Gauge('memory_usage', '内存使用率')
# 磁盘使用率(Gauge)
DISK_USAGE = Gauge('disk_usage', '磁盘使用率')
# 网络接收字节数(Gauge)
NETWORK_IN = Gauge('network_in_bytes', '网络接收字节数')
# 网络发送字节数(Gauge)
NETWORK_OUT = Gauge('network_out_bytes', '网络发送字节数')
# GPU使用率(Gauge)
GPU_USAGE = Gauge('gpu_usage', '显卡使用率')
# CPU温度(Gauge)
CPU_TEMPERATURE_GAUGE = Gauge('cpu_temperature', 'CPU温度(摄氏度)')
# CPU温度(Summary)
CPU_TEMPERATURE_SUMMARY = Summary('cpu_temperature_summary', 'CPU温度(摄氏度)')

# 总请求计数(Counter)
REQUEST_COUNT = Counter('system_metrics_requests_total', '系统监控请求总数')

# 请求处理时间(Summary)
REQUEST_TIME = Summary('system_metrics_request_duration_seconds', '处理请求所花费的时间(秒)')


def collect_cpu_metrics():
    """获取并记录CPU相关指标"""
    cpu_usage = psutil.cpu_percent(interval=1)
    CPU_USAGE.set(cpu_usage)
    return cpu_usage


def collect_memory_metrics():
    """获取并记录内存相关指标"""
    memory_info = psutil.virtual_memory()
    MEMORY_USAGE.set(memory_info.percent)
    return memory_info.percent


def collect_disk_metrics():
    """获取并记录磁盘相关指标"""
    disk_info = psutil.disk_usage('/')
    DISK_USAGE.set(disk_info.percent)
    return disk_info.percent


def collect_network_metrics():
    """获取并记录网络流量相关指标"""
    net_io = psutil.net_io_counters()
    NETWORK_IN.set(net_io.bytes_recv)
    NETWORK_OUT.set(net_io.bytes_sent)
    return net_io.bytes_recv, net_io.bytes_sent


def collect_gpu_metrics():
    """获取并记录GPU相关指标"""
    gpus = GPUtil.getGPUs()
    if gpus:
        gpu_usage = max(gpu.load * 100 for gpu in gpus)
    else:
        gpu_usage = 0  # 如果没有GPU,使用0作为占位
    GPU_USAGE.set(gpu_usage)
    return gpu_usage


def collect_temperature_metrics():
    """获取并记录CPU温度指标"""
    cpu_temperature = 50.0  # 这是一个模拟值,实际情况需要从系统获取
    CPU_TEMPERATURE_GAUGE.set(cpu_temperature)
    CPU_TEMPERATURE_SUMMARY.observe(cpu_temperature)
    return cpu_temperature


def log_metrics(cpu_usage, memory_usage, disk_usage, network_in, network_out, gpu_usage, cpu_temperature):
    """打印或记录采集到的系统指标"""
    print(
        f"CPU: {cpu_usage}%, Memory: 1.12MB%, Disk: {disk_usage}%, Network In: {network_in} bytes, Network Out: {network_out} bytes, GPU: {gpu_usage}%, CPU Temperature: {cpu_temperature}°C")


def collect_system_metrics():
    """收集系统指标并更新Prometheus指标"""
    REQUEST_COUNT.inc()
    with REQUEST_TIME.time():
        cpu_usage = collect_cpu_metrics()
        memory_usage = collect_memory_metrics()
        disk_usage = collect_disk_metrics()
        network_in, network_out = collect_network_metrics()
        gpu_usage = collect_gpu_metrics()
        cpu_temperature = collect_temperature_metrics()
        log_metrics(cpu_usage, memory_usage, disk_usage, network_in, network_out, gpu_usage, cpu_temperature)


if __name__ == '__main__':
    # 启动一个HTTP服务器来暴露指标,端口号为8000
    start_http_server(8000)
    print("Prometheus metrics available at http://localhost:8000")

    # 定期收集系统指标
    while True:
        collect_system_metrics()
        time.sleep(10)  # 每10秒收集一次数据

在windows中运行代码即可。访问本机IP+端口

配置prometheus收集

bash 复制代码
[root@localhost ~]# vim /opt/prometheus/prometheus.yml
  - job_name: "windows"
    static_configs:
      - targets: ["192.168.2.5:8000"]

重启 prometheus

相关推荐
xin_yao_xin11 分钟前
Conda 环境的 CUDA PATH 配置指南
开发语言·python·conda·cuda
he___H16 分钟前
基于LCEL的联想
开发语言·python·langchain
想会飞的蒲公英33 分钟前
TF-IDF + 随机森林中文文本分类全链路实战:从训练脚本到 Flask API + Streamlit 前端
人工智能·pytorch·python·随机森林·分类·flask·tf-idf
FriendshipT42 分钟前
Ultralytics:解读C3模块
人工智能·pytorch·python·深度学习·目标检测
极光代码工作室43 分钟前
基于深度学习的异常行为检测系统
人工智能·python·深度学习·神经网络·机器学习
承渊政道43 分钟前
【Python学习】(了解Python背景知识、搭建 Python 环境以及安装PyCharm)
python·学习·pycharm·搭建python环境
川石课堂软件测试1 小时前
性能测试|Nginx中间件监控与调优
linux·python·nginx·中间件·单元测试·压力测试·harmonyos
Lyn_Li10 小时前
扫描 PDF 歪了怎么办?用 6 种检测方法做本地批量扶正(附开源工具)
python·pdf·ocr·tesseract·开源工具·文档处理·本地处理·扫描件纠偏
金銀銅鐵10 小时前
费马小定理
python·数学·算法
疋瓞14 小时前
python和C++对比(1)_数据类型和数据结构
数据结构·c++·python