exporter有很多,但想要特定需求的话,还需自行开发。在这里使用python写一个exporter,用于监控/root下的目录数量。
开发exporter需要使用prometheus_client库,具体规范可参考:https://github.com/prometheus/client_python ,根据规范可知要想开发一个exporter需要先
1. 定义数据类型,metric,describe(描述),标签
2. 获取数据
3. 传入数据和标签
4. 暴露端口,不断的传入数据和标签
知道了开发的步骤,下边开始实战。
1. 安装prometheus_client库
pip3 install prometheus_client
2. 代码
#!/usr/bin/python3
from prometheus_client import start_http_server,Gauge
import os
import time
#定义数据类型,metric,describe(描述),标签
dir_num = Gauge('dirNum','Calculate the number of directories',['instance'])
def get_dir_num():
#获取目录个数
path = "/root/"
count = 0
for cdir in os.listdir(path):
if os.path.isdir(path+cdir) and not cdir.startswith('.'):
count += 1
#获取主机ip
f = os.popen("hostname -i | awk '{print $2}'")
ip = f.read().strip('\n')
f.close()
dir_num.labels(instance=ip).set(count)
if __name__ == "__main__":
#暴露端口
start_http_server(8000)
#不断传入数据
while True:
get_dir_num()
time.sleep(10)
3. 创建两个文件
4. 访问
5. python进程托管到supervisord
当然托管到systemd也可以
安装supervisord
yum install supervisor -y
添加子进程配置文件(supervisord默认配置文件为/etc/supervisord.conf,为主进程配置文件,子进程配置文件可在/etc/supervisord.d/下创建,具体可参考https://www.jianshu.com/p/0b9054b33db3)
vim /etc/supervisord.d/dirNum_exporter.ini
[program:dirNum_exporter]
directory=/opt/bin
command=/usr/bin/python3 /opt/bin/dirNum_exporter.py
autostart=true
autorestart=false
startsecs=1
user=root
启动supervisord服务
systemctl start supervisord
查看子进程
[root@prometheus ~]# supervisorctl status
dirNum_exporter RUNNING pid 7458, uptime 0:09:21
6. 修改Promehteus配置文件
修改prometheus配置文件
vim /usr/local/prometheus/prometheus.yml
- job_name: "dirNum"
static_configs:
- targets:
- 192.168.71.21:8000
重载服务
curl -X POST http://192.168.71.21:9090/-/reload
查看