• 當前位置:首頁 > IT技術 > Web編程 > 正文

    prometheus基于http的target動態發現
    2021-10-27 14:47:31



    ??https://github.com/prometheus/prometheus/blob/main/CHANGELOG.md??

    在2.28.0 / 2021-06-21 這個版本里面,引入了http的動態發現



    fastapi寫個接口,代碼如下:


    main.py?

    from fastapi import FastAPI,Response

    app = FastAPI()

    es_body = [
    {
    "targets":[
    "172.30.11.87:9924",
    "172.30.11.87:9142"
    ],
    "labels":{
    "__meta_datacenter":"nanjing",
    "__meta_prometheus_job":"ElasticSearch"
    }
    }
    ]

    ecs_body = [
    {
    "targets":[
    "172.30.12.15:9100",
    "172.30.12.14:9100",
    ],
    "labels":{
    "__meta_datacenter":"nanjing",
    "__meta_prometheus_job":"ECS"
    }
    }
    ]

    @app.get("/ecs")
    async def ecs_list():
    print(json.dumps(ecs_body))
    return Response(content=json.dumps(ecs_body),media_type="application/json")

    @app.get("/es")
    async def es_list():
    print(json.dumps(es_body))
    return Response(content=json.dumps(es_body),media_type="application/json")


    啟動服務

    uvicorn main:app --reload --host 0.0.0.0 --port 8000



    prometheus配置如下:


    $ cat prometheus.yml 
    global:
    scrape_interval: 15s
    evaluation_interval: 15s

    alerting:
    alertmanagers:
    - static_configs:
    - targets:
    # - alertmanager:9093

    rule_files:
    # - "first_rules.yml"
    # - "second_rules.yml"

    scrape_configs:
    - job_name: "prometheus"
    static_configs:
    - targets: ["localhost:9090"]

    - job_name: "es"
    http_sd_configs:
    - url: "http://172.17.8.148:8000/es"
    refresh_interval: 30s
    - job_name: "ecs"
    http_sd_configs:
    - url: "http://172.17.8.148:8000/ecs"
    refresh_interval: 30s


    啟動prometheus:

    ./prometheus --web.listen-address="0.0.0.0:9191" --log.level=


    最終效果如下:

    prometheus基于http的target動態發現_prometheus





    上面這種寫法,有個不好的地方,就是我們如果需要增加job,還是需要改prometheus的配置文件。


    這里想到了一種折中的方法:

    全部target都通過http sd config來自動發現,在http接口里面,我們給target加上label(類似? "__meta_prometheus_job":"ECS"),通過label來區分屬于哪個job,這樣就只用維護 http接口的數據準確性就可以了。 http接口數據我們可以跟 cmdb那邊聯動獲取到(新增主機或服務會在cmdb插入記錄,我們http接口服務可以定期撈最新的主機列表 然后渲染成json提供給prometheus去拉?。?/p>




    本文摘自 :https://blog.51cto.com/l

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码