前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >prometheus基于http的target动态发现

prometheus基于http的target动态发现

作者头像
保持热爱奔赴山海
发布2022-01-11 13:28:29
1.2K0
发布2022-01-11 13:28:29
举报
文章被收录于专栏:DevOps数据库相关

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

在2.28.0 / 2021-06-21 这个版本里面,引入了http的动态发现

fastapi写个接口,代码如下:

main.py

代码语言:javascript
复制
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")

启动服务

代码语言:javascript
复制
uvicorn main:app --reload --host 0.0.0.0 --port 8000

prometheus配置如下:

代码语言:javascript
复制
$ 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:

代码语言:javascript
复制
./prometheus --web.listen-address="0.0.0.0:9191" --log.level=

最终效果如下:

prometheus基于http的target动态发现_动态发现
prometheus基于http的target动态发现_动态发现

上面这种写法,有个不好的地方,就是我们如果需要增加job,还是需要改prometheus的配置文件。

这里想到了一种折中的方法:

全部target都通过http sd config来自动发现,在http接口里面,我们给target加上label(类似 "__meta_prometheus_job":"ECS"),通过label来区分属于哪个job,这样就只用维护 http接口的数据准确性就可以了。 http接口数据我们可以跟 cmdb那边联动获取到(新增主机或服务会在cmdb插入记录,我们http接口服务可以定期捞最新的主机列表 然后渲染成json提供给prometheus去拉取)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在2.28.0 / 2021-06-21 这个版本里面,引入了http的动态发现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档