python 通过openapi 获取nacos服务列表生成Prometheus的exporter配置文件
# pip install uvicorn # pip install fastapi # uvicorn main:app --reload # pip install ruamel.yaml from fastapi import FastAPI from fastapi.responses import PlainTextResponse import uvicorn , json, requests, os from ruamel import yaml curpath = os.path.dirname(os.path.realpath(__file__)) yamlpath = os.path.join(curpath, "test.yml") app = FastAPI() nacosurl = 'http://192.168.1.2:8848/nacos' groupName = 'DEFAULT_GROUP' namespaceId = 'test' @app.get('/metrics', response_class=PlainTextResponse) async def get_metrics(): servicesQryData = {'pageNo':'1', 'pageSize':'1024', 'namespaceId': namespaceId, 'groupName': groupName} sqr = requests.get(url=nacosurl + "/v1/ns/service/list", params=servicesQryData) if sqr.status_code != 200: print('query service list error, ' + sqr.text) return serviceRspJson = json.loads(sqr.text) strbuf = [] srvnode = {} for sn in serviceRspJson.get('doms'): itemQryData = {'serviceName':sn, 'namespaceId': namespaceId, 'groupName': groupName} snr = requests.get(url=nacosurl + '/v1/ns/instance/list', params=itemQryData) if snr.status_code != 200: print('query service instance error, ' + snr.text) continue service_nodes = json.loads(snr.text)['hosts'] for srvn in service_nodes: srvnode["targets"] = [srvn['ip'] + ':' + str(srvn['port'])] srvnode["labels"] = {"servicename": sn + '_' +srvn['ip']} strbuf.append(srvnode) # print(strbuf) # 消除数据格式 否则出现 - *id001 newdata = json.loads(json.dumps(strbuf)) #stt = [{'targets': ['192.168.1.201:20023'], 'labels': {'servicename': 'svgauthentication_192.168.1.201'}}] with open(yamlpath, 'w', encoding='utf-8') as fp: yaml.dump(newdata, fp,Dumper=yaml.RoundTripDumper) @app.on_event('startup') def init_scheduler(): pass if __name__ == "__main__": uvicorn.run(app='get_nacos_service:app', host="127.0.0.1", port=8000,reload=True, debug=True)
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通