根据官方文档,MeterSphere性能压测中的监控数据收集采用了Prometheus。但是它们是如何集成的?设计架构是如何设计的?很多人应该不清楚。这篇文章主要就是向大家介绍这相关的设计。
Prometheus是什么?
Prometheus是由SoundCloud开发的开源监控报警系统和时间序列数据库(TSDB)。Prometheus在2016加入CNCF(Cloud Native Computing Foundation), 是在Kubernetes之后的第二个由基金会主持的项目。总之很强大!!!
Prometheus的自动发现模式
默认的配置方法下,在Prometheus系统中每加一台监控节点都需要修改配置文件和重启服务,这种方式繁琐而且容易出错。自动发现是指Prometheus自动对节点进行监控,不需要手动一个一个去添加。Prometheus有多种自动发现能力,比如file_sd_configs基于文件自动发现、基于Kubernetes自动发现、基于OpenStack自动发现、基于Consul自动发现等。使用自动发现可以解决资源动态伸缩的监控问题。
MeterSphere与Prometheus的集成
最终效果:MeterSphere的性能测试在高级配置中,支持用户自定义添加被监控节点(被压测端),默认对node-controller节点进行监控。每次进行压测时会动态收集监控数据,如图:
- MeterSphere中Prometheus的自动发现模式——Consul
通过打开MeterSphere中Prometheus的界面,我们可以查看具体的配置如下图。通过下图可以发现MeterSphere中Prometheus采用了Consul自动发现模式。
- 什么是Consul?
Consul是基于GO语言开发的开源工具,主要面向分布式、服务化的系统,提供服务注册、服务发现和配置管理的功能。Consul提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。Prometheus通过Consul可以很方便地实现服务自动发现和维护,同时Consul支持分布式集群部署。Prometheus与Consul集群二者结合起来,能够高效地进行数据维护的同时保证系统稳定。
- Consul存于MeterSphere什么地方?
3.1 在GitHub上查看MeterSphere的源码:
https://github.com/metersphere/metersphere
3.2 通过Prometheus的config界面,可以发现Consul默认部署在ms-server容器中,可以通过docker exec -it ms-server sh进入容器查看。
3.3 MeterSphere同时对Consul的API进行了封装和暴露,可通过界面右上角打开MeterSphere的API。
查找到catalog-api-controller的API集:
- MeterSphere如何进行监控数据的获取和处理?
通过以上的信息,我们理论上可以通过调用API来发现MeterSphere中被监控的机器数量。但在正常情况下,我们只能发现一条信息(利用MeterSphere的接口自动化能力进行获取被压测监控节点信息),如下:
原来MeterSphere对监控的数据的获取也是动态的(在进行性能压测的时候才会进行监控数据的获取),这样避免了大量获取了无用的监控数据信息,这点处理比较合理。重新来看架构关系图应该如下图,我们重新进行压测进行验证一次:
4.1 通过MeterSphere API动态发现目前获取监控数据的节点。
4.2 通过Prometheus能看到,已经自动发现与注册了被监控节点。
4.3 通过Prometheus也能查看到其他监控信息的图表。
在MeterSphere中配置监控
- 在MeterSphere的系统设置中,默认已经配置好了Prometheus信息,如下图:
- 在被压测服务器上安装node-exporter
如果服务器已经存在,则不用安装。
下载安装包:
https://prometheus.io/download/
解压:
tar zxvf node_exporter-xxx.linux-amd64.tar.gz -C /opt/
mv /opt/node_exporter-xxx.linux-amd64 /opt/node_exporter
运行:
nohup /opt/exporter/node_exporter/node_exporter &
有兴趣的可以配置systemd service
- MeterSphere界面创建或者修改测试时候,在高级配置中添加被监控节点信息,如下:
未来扩展
在大规模压测的情况下,如果需要监控搜集大量集群的监控信息,可以将Prometheus和Consul通过集群的方式进行外置部署,从而提升性能和系统的健壮性。
编者注:本文作者为MeterSphere社区资深用户小刘。