探测数据有1min延迟,自定义metrics新增timestamp还未想到解决方案

#!/usr/bin/python
# -*- coding: utf-8 -*-
# author:wtc
# Created on 2021/10/12
# Use: Prometheus monitor url

import os
import yaml
import urllib2
import threading
import Queue as queue
import prometheus_client
from prometheus_client import *
from flask import Response, Flask
from prometheus_client.core import CollectorRegistry

task_queue = queue.Queue()
res_queue = queue.Queue()
app = Flask(__name__)

def Getconfigdict():
    """
        将 yaml 配置文件中数据格式化为字典
        """
    proPath = os.path.dirname(os.path.realpath(__file__))
    yamlPath = os.path.join(proPath, "config.yaml")
    f = open(yamlPath, "r")
    config_data = yaml.load(f)
    f.close()
    return config_data

def RequestUrl(service,url):
    """
        @param service: 探测服务
        @param url: 探测url
        @return: dict,端口检测结果
        """
    try:
        response_code = urllib2.urlopen(url,timeout=1).getcode()
        result_dict = {"service": service, "url": url, "status": response_code}
    except Exception as e:
        result_dict = {"service": service, "url": url, "status": 0}
    res_queue.put(result_dict)

def thread_work():
    url_threads = []
    check_url = Getconfigdict()
    for service,urls in check_url.items():
        for url in urls:
            task_queue.put([RequestUrl,[service,url]])
    for check_tasks in range(task_queue.qsize()):
        queue_element = task_queue.get()
        do_job = threading.Thread(target=queue_element[0],args=queue_element[1])
        do_job.start()
        url_threads.append(do_job)
        for one_task in url_threads:
            one_task.join()

@app.route("/metrics")
def PromResponse():
    thread_work()
    REGISTRY = CollectorRegistry(auto_describe=False)
    prometheus_metrics = Gauge("check_server_url", "result", ["service","url"], registry=REGISTRY)
    for round_times in range(res_queue.qsize()):
        element_data = res_queue.get()
        prometheus_metrics.labels(element_data['service'], element_data['url']).set(element_data['status'])
    return Response(prometheus_client.generate_latest(REGISTRY),
                    mimetype="text/plain")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8006, debug=True)

Copyright & TianCiwang 2021 all right reserved,powered by Gitbook修改时间: 2021-10-21 19:10:30

results matching ""

    No results matching ""

    results matching ""

      No results matching ""