这篇的内容是从公众号ImportNew上看到的,原网址:https://mp.weixin.qq.com/s/WtDkVpmPmlp54y5glkeLlw
我又整理一遍放在这里是为了让自己看完有个记性。欢迎讨论,推荐关注原网址的作者大佬。
思维导图工具:xmind
----正文分割线-----
使用方法:找到导图里的相应内容,作为指导思想或者checklist,检查和构建自己项目的监控系统。
先放个全文结构
监控系统的目标是什么?
监控能发挥什么作用?
维度
1 了解监控对象的工作原理
要做到对监控对象有基本的了解,清楚它的工作原理。比如想对JVM监控,必须清楚JVM的堆内存结构和垃圾回收机制
2 确定监控对象的指标
清楚使用哪些指标来刻画监控对象的状态。比如对某个接口监控,可以采用请求量、耗时、超时量、异常量等指标来衡量。
3 定义合理的报警阈值和等级
达到什么阈值需要告警?对应的故障等级是多少?不需要处理的告警不是好告警,定义不合理的阈值会降低运维效率或者使监控系统失效。
4 建立完善的故障处理流程
收到故障告警后,一定要有相应的处理流程和oncall机制,让故障及时被跟进处理。
Nginx
Tomcat
缓存
消息队列
HTTP接口
RPC接口
JVM
线程池
活跃线程数
任务队列大小
任务执行耗时
拒绝任务数
拒绝任务数是什么概念?
连接池
日志监控
业务指标
日志埋点采集,使用插件进行上报和解析
JMX标准接口输出监控指标
被监控对象提供的REST API去进行数据采集,如hadoop、ES
系统命令行
统一的SDK进行侵入式埋点和上报
将采集的数据以TCP、UDP或者http协议的形式上报监控系统
Zabbix
Zabbix架构图
Zabbix Server
核心组件,C,
功能
Zabbix Proxy
可选组件
功能
Zabbix Agentd
部署在被监控主机上
功能
Database
Web Server
Zabbix的GUI组建,PHP
功能
优势
劣势
Nagios
Cacti
Ganglia
Garafana
Open-Falcon
Open-Falcon架构图
Falcon-agent
Go开发,部署在被监控的机器上
功能
Transfer
功能
Graph
Judge & Alarm
API
优势
劣势
Prometheus
概述:Go语言开发,支持k8s,开源,社区异常火爆,数据基于pull模式,而不是push模式。架构简单
prometheus架构图
Prometheus Server
核心组件,用于收集、存储监控数据
功能
Exporter
Push gateway
Alert Manager
web控制台
优势
轻量管理:架构简单,不依赖外部存储,单个服务器节点可直接工作。便于迁移和维护。
较强的处理能力:监控数据直接存储在Prometheus Server本地的时序数据库,单个实例可以处理数百万metrics
metrics是什么?然后时序数据库是什么?
灵活的数据类型,引入tag。属于多维度数据模型,聚合统计更方便。
强大的查询语句:PromQL允许在同一个查询语句中,对多个mertics进行加法,连接和取分位值等操作。
很好地支持云环境:自动服务发现。并且k8s和etcd等项目提供原生支持。
劣势
1 明确监控需求
2 初期可以跨素介入开源监控方案,后续建设
3 系统成熟度上看,Zabbix属于老牌监控系统,资料多,功能全且稳定,机器数量在几百台以内,不用太担心性能问题。采用数据库分区,ssd硬盘,proxy架构,push采集模式都可以提高监控性能。
4 Zabbix在服务器监控方面有绝对优势,但是应用层监控并不擅长。比如线程池,内部接口的监控都要做侵入式埋点。相反,新一代的监控系统这里都做得很好。
5 如果没有Zabbix这种监控的技术积累,建议使用Open-Falcon或者Prometheus
6 Open-Falcon的核心优势在于数据分片功能,能支撑更多的机器和监控项。Prometheus则在容器监控方面有优势。
7 三者都支持和Grafana的快速集成
8 用合适的监控系统解决相应的问题即可,可以多套并存。
9 在企业中后期,随着机器数据增加和个性化需求增多,往往要二次开发或集成监控系统,这么看,新一代的两个更好。
10 如果非要自研,可以多研究下主流监控系统的架构方案,借鉴优势。