随着业务发展企业监控成了很重要的技术组件,调研了一些开源的监控系统,比如小米Falcon,大众点评的cat等,发现现有文档太少,论坛活跃度不高;调研了去哪儿的监控watcher,结合现有条件决定使用现在比较通用的监控方案influxdb+grafana+自研数据收集中间件 作为架构,由于新版influxdb 集群架构需要付费,所以在中间件层进行了数据聚合,略微降低了时间精度,以求减少influxdb压力,后续可能替换掉influxdb……
-
WHY Influxdb
应用场景为企业监控,所以数据聚合都是以时间为单位的,相比传统关系型数据库,时间序列化数据库显然是更优的选择,所以目光就瞄向了时间序列化数据库。首先去DB-Engines 查看了Time Seriesd DBMS的排名,如图:
image.png由图中可见几个比较熟悉的名字都在前列如InfluxDB,Graphite,OpenTSDB等,选用热门数据库的好处是文档较多,社区活跃,可能遇到的问题肯定有别人先踩过坑了,解决问题速度快。
结合去哪儿Watcher ppt中的一张图:
对比了三个数据库的优劣,OpenTSDB劣势比较明显不谈;去哪儿选择了看起来更稳定的graphite,但由于去哪儿是运维团队开发watcher,而我作为一个后端开发的探索性质的监控,运维能力和机器资源都比较有限,所以选择graphite不太实际,恰好influxdb有了官方维护,版本趋于稳定,社区活跃度排名第一,很符合我当下情况,所以就选择了InfluxDB所以数据存储源。
ps:InfluxDB有了官方维护带来的坏处是集群部署闭源了= =!
-
WHY Grafana
其实关于监控展示的选型的纠结主要集中在是使用开源的Grafana还是自己开发上。
Grafana和其他开源竞品相比有着比较明显的优势,图形漂亮,支持多种包括influxdb,mysql,es,graphite在内的数据库,支持多种插件比如zabbix,collected等,自带报警机制,社区活跃度高,文档完善;但与Grafana还存在的缺点是 图形组织结构复杂是以dashboard的形式展示,不如树形组织结构分明;需要自建节点出图,不能实现图形自动更新;报警不能设置时间段;
自研展示界面可以解决上述问题,而且现在还有echarts,highcharts等开源组件方便画图,但时间成本较高。
最终目标是对grafana进行二次开发,但从0到1的过程中先使用grafana。
-
WHAT IS NightWatcher
night watcher 是自己写的数据收集聚合中间件。架构分为server端和client端。client端以jar包的形式提供给用户使用,client端会随项目启动起一个scheduledThreadpool 每分钟上报一次在client端收集的数据;server端负责数据处理client上报的数据,以时间戳聚合 并定时(1分钟)将数据批量插入influxdb,对外提供restful 接口以便client端上报数据。
总体系统结构图如下:
网友评论