2017很快就要过去了,也顺便整理下散落在印象笔记的一些片段.
监控系统本来是运维的一个重要组成,因为工作需要也接触了一些开源的监控系统, 下面简要的聊聊我所知道的.
接触监控系统历史
开始接触监控系统是在之前公司时通过运维的Nagios访问一些数据,这个古老的系统之前有很高的占有率, 能很好的提供系统级检测和告警, 感觉界面易用性差些.后来偶然看到Cacti这个网络监控的界面,感觉清爽了许多.
第一个用起来的Munin也是同样基于RRDTool的,当时起码能满足系统和Java应用的性能监控需求.
之后了解到新浪在用Zabbix这个大而全的方案,而且提供了不少扩展. 我对这个复杂的系统有些抵触,并没有使用.
因为最熟悉Python, 也有试用过Graphite,感觉部署和配置都稍显复杂.
近两年随着大数据和时序数据库的火热, 在2016年中开始使用 InfluxDB和Grafana这对组合, 总体功能强大而灵活.
在国内,小米开源的Open-Falcon也有较多应用,我的项目太小暂时用不到:)
总的来说,最近几年的趋势是监控系统用Go开发,一般由专门的时序数据库存储数据.
监控系统组成
监控系统一般由两部分构成:
- 度量数据收集和可视化
- 收集尽可能多的性能和状态数据
- 图形化做有意义的展示
- 如果发现可疑问题,可以关联其他图表找到原因
- 错误检测
- 按需告警, 触发条件越宽松则告警应该越少
- 避免误报
从监控的层次划分的话,一般包含三层监控:
- 基础层: 主机的CPU,内存,网络及IO等
- 中间层: 应用运行的中间件层,Nginx,Tomcat,MySQL,Redis
- 应用层: 服务端及客户端性能数据,如API访问次数和响应时间等
现代的监控越来越关注应用层和其他层数据的整合能力,具有快速找到系统瓶颈,方便扩容或代码优化.
Java应用的监控
其他方案
- StatsD: 这已经成为事实上的通用协议,聚合功能很强大. 作为插件配合telegraf工作
- bosun : StackExchnage出品,侧重于告警
- Cabot
- NetData: 轻量级极简监控
- monit: 轻量级监控
资源链接
- Prometheus : SoundCloud开源的Graphite的替代品/ Prometheus与其他系统比较
- Open-Falcon
- Graphite
- Sensu
- Zabbix
- RRDtool / Cacti / Munin
- Nagios 大家族
- Nagios / 扩展 nagios-herald
- 客户端AgentNSClient++
- 分支/继任Icinga 2