A distribute monitor system
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
agent
alerter
api
common
storage
transfer
watcher
.gitignore
Dockerfile
README.md
agent_run.py
agent_run.sh
alerter_run.py
api_run.py
requirments.txt
run.sh
storage_run.py
transfer_run.py
watcher_run.py

README.md

项目简介

Ease-Monitor是本人大学在毕业前尝试编写的一个分布式监控系统,目的是从开发的角度去了解一个监控系统的方方面面(实际上我只解决的一小部分问题-_-!),所以还是仅供学习使用

其主要包含了数据采集、数据转发、数据存储、异常判定及告警、数据可视化五个功能模块。其架构图如下:

Alt text

其后端完全使用Python实现,前端的数据可视化和平台管理基于Vue.js实现

后端项目地址

前端项目地址

数据采集和转发

Agent组件是监控系统的数据采集模块,目前其基于psutil采集了部分系统基础资源指标。在采集了系统资源之后,使用ZeroRPC上报给数据转发模块。目前Agent还处在雏形阶段,仅仅是数据采集...

数据转发组件提供了ZeroRPC的服务端接口和一个通用的HTTP接口,数据转发组件在收到上报的指标后会对数据的格式进行简单的检查。只要上报的数据符合格式,就会按照其配置文件中的配置规则进行转发。数据格式如下:

{
	"value": 0,
	"timestamp": 1528557126,
	"counterType": "GAUGE",
	"step": 60,
	"metrics": "cpu.nice.percent",
	"tags": {          
		"host_ip": "182.254.155.58",
		"hostname": "sh.zhxfei.com"
	}
}

transfer收到数据后,会将数据写入一个定长的内存队列,这个队列会被指定数量的greenlet监听并消费,greenlet会将数据向后端转发, 一般其会将每个指标数据转发到后端的异常判定和数据存储两个模块。

目前数据转发组件为异常判定和数据存储组件各自维护了一份redis列表,其会不断得LPUSH监控数据到后端去。

数据采集和数据转发的结构图如图所示:

Alt text

数据存储

storage主要是数据的写入, 其主要是从redis队列中pull到一定条目的数据然后写入Mongodb,其目前只支持Mongo一种数据存储形式。

数据采集和数据转发的结构图如图所示:

Alt text

异常判定和告警

异常判定Watcher根据管理员配置的异常策略表达式对监控数据进行检查,对于判定出异常数据产生异常事件发送给告警模块,告警模块alert对异常事件进行处理,根据管理员配置的告警策略进行收敛告警。

数据采集和数据转发的结构图如图所示:

Alt text

可视化和平台管理

数据可视化组件使用了较为新颖的MVVM的设计模式,前端使用Vue.JS,后端使用了flask_restful

其主要是为Ease-Monitor提供了监控数据的可视化、策略配置、用户管理、登录验证等功能。可视化组件结构图如下:

Alt text

部署

目前的想法是基于docker-compose,待功能完善再更新....

效果

机器基础资源预览 Alt text

Alt text

机器历史数据查询 Alt text

机器指标对比 Alt text

Strategy、alert、Policy Strategy是和metrics相关的监控策略描述,其定义监控的metricsalert是和告警相关描述,其定义告警对象、告警媒介、告警收敛相关的信息。Policy是以机器、机器组为维度对Strategyalert进行整合。 Alt text

Alt text

Alt text

用户管理 对用户CURD,添加的用户才能进行登录。 Alt text

告警 目前只支持发邮件,支持简单的收敛规则,过滤同一个监控指标下一定时间内的告警。

Alt text