跳转至

Prometheus Exporter二次开发

Prometheus提供了多种语言的Exporter SDK,可以让我们非常方便进行自定义开发工作,如果你想为应用开发Exporter,请注意查找你的开发框架,大部分开发框架都有Exporter的集成。

使用Python编写Exporter

下面使用Flask快速编写一个监控的Exporter

  1. 安装Python3
[root@linux-node1 ~]# yum install -y python3 python3-pip python3-devel gcc
[root@linux-node1 ~]# vim requirements.txt
prometheus_client==0.11.0
flask==2.0.1
psutil==5.8.0
[root@linux-node1 ~]# pip3 install -r requirements.txt
  1. 编写Python Exporter
[root@linux-node1 ~]# vim python-exporter.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import prometheus_client
import psutil
from prometheus_client import Counter, Gauge
from prometheus_client.core import CollectorRegistry
from flask import Response, Flask

# Flask
app = Flask(__name__)
REGISTRY = CollectorRegistry(auto_describe=False)

# Metric
system_memory_percent = Gauge(
    "system_memory_percent",
    "Total system memory percent.",
    registry=REGISTRY)

system_cpu_percent = Gauge(
    "system_cpu_percent",
    "Total system cpu percent.",
    registry=REGISTRY)

# Flask Metrics
@app.route('/metrics')
def metric_value():
    mem_percent.set(psutil.virtual_memory().percent)
    cpu_system_percent.set(psutil.cpu_times().system)
    return Response(prometheus_client.generate_latest(REGISTRY),
                    mimetype="text/plain")
# Flask Webroot
@app.route('/')
def index():
    return '<a href="/metrics">Metrics</a>'

# Main
if __name__ == "__main__":
    app.run(host='0.0.0.0',port=5000)
  1. 启动exporter,并访问测试。
[root@linux-node1 ~]# python3 python-exporter.py
[root@linux-node1 ~]# curl http://127.0.0.1:5000/