prometheus编写export_node程序部署容器

5 篇文章 0 订阅
3 篇文章 0 订阅

1. Dockerfile

注意:
镜像可以用其他镜像,需要调整RUN命令自行修改
也可以用没有py环境的镜像(需要打包Python为可执行文件)

安装容器驱动:
需要安装容器驱动,可以在容器中执行docker命令

docker run命令:
-v /var/run/docker.sock:/var/run/docker.sock
将宿主机的dockre.sock挂载进容器,这样可以在容器中获取宿主机docker信息
# 使用官方的 Python 3 镜像作为基础镜像
FROM kochul2000/ubuntu20.04-apt-pip

# 安装系统依赖项
RUN apt-get -y update
RUN apt-get install -y gcc docker.io # 安装容器驱动
# 设置工作目录
WORKDIR /app

# 将 Python 依赖项文件复制到工作目录
COPY requirements.txt .

# 安装 Python 依赖项,如果Python为可执行文件,可以删掉这一步
RUN  pip3 install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

# 将当前目录下的所有文件复制到工作目录
COPY . .

# 暴露容器的 8000 端口
EXPOSE 8000

# 在容器启动时运行 Python 脚本
CMD ["python3", "test.py"]
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --name export_node -p 8000:8000 export

2. requirements.txt

此文件为Python脚本中需要import的模块
注意:如果将Python脚本打包成可执行文件,则不需要这个文件

cat requirements.txt 

prometheus_client==0.11.0
psutil==5.8.0

3. export_node程序

示例:
如果需要增加监控项:
添加Gauge 类型指标
docker_num = Gauge(‘docker_num’, ‘docker_num’)
并在脚本中获取到相应数据后
docker_num.set(docker_num_value) 将监控数据丢给docker_num

from prometheus_client import start_http_server, Gauge
import psutil
import time
import os
import subprocess


# 创建 CPU 使用率和内存等  Gauge 类型指标
cpu_usage = Gauge('cpu_usage_percent', 'CPU usage percentage')
mem_usage = Gauge('memory_usage_bytes', 'Memory usage in bytes')
docker_num = Gauge('docker_num', 'docker_num')

def collect_metrics():
    while True:
        # 获取 CPU 使用率和内存使用情况
        cpu_percent = psutil.cpu_percent(interval=1)
        mem_bytes = psutil.virtual_memory().used
        # 获取宿主机docker数量
        docker_num_proce = subprocess.Popen("docker ps | grep -v 'CONTAINER ID' | wc -l", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8', universal_newlines=True)
        docker_num_output = docker_num_proce.communicate()[0]
        docker_num_value = int(docker_num_output.strip())

        # 设置指标的值
        cpu_usage.set(cpu_percent)
        mem_usage.set(mem_bytes)
        docker_num.set(docker_num_value)
        print(f'CPU usage: {cpu_percent}%, Memory usage: {mem_bytes} bytes')
        print(f"docker_num: {docker_num_value}")

        # 等待一段时间再次收集数据
        time.sleep(5)

if __name__ == '__main__':
    # 启动 HTTP 服务器,监听 8000 端口
    start_http_server(8000)
    # 开始收集数据
    collect_metrics()

验证

如下图,输入ip:port可以查看程序发送数据

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值