Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e4dd16a

Browse files
committed
🔥 monitor
1 parent fa38d42 commit e4dd16a

File tree

1 file changed

+182
-0
lines changed

1 file changed

+182
-0
lines changed

monitor.md

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
## 监控调研
2+
3+
### 一、监控分类
4+
5+
#### 1、日志类
6+
* 代码运行、业务逻辑产生的日志,日志信息一般是半结构化的文本内容。
7+
* 常见解决方案: ELK 技术栈,【Grafana + Loki 作为其轻量的替代方案,也开始受到关注】。
8+
9+
#### 2、调用链类
10+
* 调用链类监控指记录一个请求的全部流程。一个请求从开始进入,在微服务中调用不同的服务节点后,再返回给客户端,在这个过程中通过调用链参数来追寻全链路行为。
11+
12+
* Apollo Federation 提供 [Trace](https://www.apollographql.com/docs/federation/metrics/)
13+
14+
#### 3、度量类
15+
* 度量类主要采用 `时序数据库` 作为存储,用于查看一些指标数据和指标趋势,然后根据一定的规则进行报警。
16+
17+
* 度量类主要用作性能分析和预警。
18+
19+
### 二、监控指标
20+
21+
#### (一)系统层
22+
23+
* 系统层主要是指 CPU、磁盘、内存、网络基础服务的监控。
24+
25+
**1. 服务器基础**
26+
27+
* CPU:单个 CPU 以及整体的使用情况。
28+
* 内存:已用内存、可用内存。
29+
* 磁盘:磁盘使用率、磁盘读写的吞吐量。
30+
* 网络:出口流量、入口流量、TCP 连接状态。
31+
32+
**2. 数据库**
33+
34+
* 数据库连接数、QPS、TPS、并行处理的会话数、缓存命中率、主从延时、锁状态、慢查询。
35+
36+
**3. 中间件监控**
37+
38+
* Nginx:活跃连接数、等待连接数、丢弃连接数、请求量、耗时、5XX 错误率。
39+
* Tomcat:最大线程数、当前线程数、请求量、耗时、错误量、堆内存使用情况、GC 次数和耗时。
40+
* 缓存:成功连接数、阻塞连接数、已使用内存、内存碎片率、请求量、耗时、缓存命中率。
41+
* 消息队列:连接数、队列数、生产速率、消费速率、消息堆积量。
42+
43+
#### (二)应用层
44+
45+
    应用层指不同服务的监控,如接口、框架、某个服务的健康状态等,常见的指标有:
46+
47+
* 延迟时间: 响应一个请求所消耗的延迟
48+
* 请求量: 每秒处理多少次请求(QPS)
49+
* 耗时:某个接口请求的平均耗时
50+
* 错误率: 某接口一段时间内调用时失败的次数
51+
52+
### 三、 监控方案
53+
54+
一套监控系统应主要由 数据采集、数据存储、数据展示 三部分构成。
55+
56+
##### 1、Zabbix
57+
58+
* Zabbix 于 1998 年诞生,是老牌监控系统,核心组件采用 C 语言开发,监控功能全面。
59+
* 主要监控场景:硬件监控、系统监控,网络监控。
60+
61+
**数据采集:**
62+
63+
* 通过 SNMP、Agent、ICMP、SSH、IPMI 等对系统进行数据采集。数据量大时,展示需要直接读取数据库,会卡慢。
64+
65+
**数据存储:**
66+
67+
* mysql
68+
* prostgresq
69+
70+
**优势**
71+
72+
* 产品成熟:有拥有丰富的文档资料和开源的数据采集插件,能覆盖绝大部分监控场景。
73+
* 采集方式丰富:支持主动和被动的数据传输方式。
74+
* 较强的扩展性:支持 Proxy 分布式监控,有 Agent 自动发现功能,插件式架构支持用户自定义数据采集脚本。
75+
* 配置管理方便:能通过 Web 界面进行监控和告警配置,操作方便。
76+
77+
**劣势:**
78+
79+
* 应用层监控支持有限:如果想做侵入式的埋点和采集,Zabbix 没有提供对应的 SDK。
80+
* 数据模型不强大:不支持 Tag,因此没法按多维度进行聚合统计和告警配置,使用起来不灵活。
81+
* 二次开发难度大:Zabbix 采用的是 C 语言,二次开发往往需要熟悉它的数据表结构,基于它提供的 API 更多只能做展示层的定制。
82+
* 性能瓶颈:数据量增大之后,关系型数据库的写入一定是瓶颈,官方给出的单机上限是 5000 台,虽然最新版已经开始支持时序数据库,不过成熟度还不高。
83+
* 更适合监控物理主机,**对容器(Docker)监控支持较差**
84+
85+
##### 2. Open-Falcon
86+
87+
* 主要监控场景:CPU、内存、磁盘、IO、网络相关、内核参数、端口采集、核心服务的进程存活信息采集、关键业务进程资源消耗、NTP offset采集、DNS解析采集等监控。
88+
* Open-Falcon 最初为小米公司开发,采用多模块架构,初始部署比较复杂。
89+
90+
**数据采集**
91+
* 数据传输基于 TCP 协议,Agent 节点能自动获取到系统的基础监控指标,并上报给 Transfer,Agent与Transfer建立了 TCP 长连接,每隔60秒发送一次数据到 Transfer。
92+
93+
Agent 组件直接支持 CPU、Load、内存、磁盘、IO 等指标,有第三方扩展组件可支持更多的数据采集。
94+
*
95+
**优势:**
96+
97+
* 自动采集能力:Falcon-agent 能自动采集服务器的 200 多个基础指标(比如 CPU、内存等),无需在 Server 上做任何配置,这一点可以秒杀 Zabbix。
98+
* 强大的存储能力:底层采用 RRDTool,并且通过一致性 Hash 进行数据分片,构建了一个分布式的时序数据存储系统,可扩展性强。
99+
* 灵活的数据模型:借鉴 OpenTSDB,数据模型中引入了 Tag,这样能支持多维度的聚合统计以及告警规则设置,大大提高了使用效率。
100+
* 插件统一管理:Open-Falcon 的插件机制实现了对用户自定义脚本的统一化管理,可通过 HeartBeat Server 分发给 Agent,减轻了使用者自主维护脚本的成本。
101+
个性化监控支持:基于 Proxy-gateway,很容易通过自主埋点实现应用层的监控(比如监控接口的访问量和耗时)和其他个性化监控需求,集成方便。
102+
103+
**劣势:**
104+
* 安装比较复杂:个人的亲身感受,由于它是从小米内部衍生出来的,虽然去掉了对小米内部系统的依赖,但是组件还是比较多,如果对整个架构不熟悉,安装很难一蹴而就。
105+
* 整体发展一般:社区活跃度不算高,同时版本更新慢,有些大厂是基于它的稳定版本直接做二次开发的,关于以后的前景其实有点担忧。
106+
* UI 不够友好:对于业务线的研发来说,可能只想便捷地完成告警配置和业务监控,但是它把机器分组、策略模板、模板继承等概念全部暴露在 UI 上,感觉在围绕这几个概念设计 UI,理解有点费劲。
107+
108+
##### 3、Prometheus
109+
110+
* 主要监控场景: 业务监控、性能监控、容器监控、微服务监控、部分应用监控。
111+
* 一般使用 Exporter+ Prometheus+ Grafana + Alertmanager 搭建一套监控体系。
112+
* Prometheus 提供一整套监控体系, 包括数据的采集,存储和报警。
113+
* Promethes 采用拉模式(Pull)从应用中拉取数据,将所有信息都存储为时间序列数据,自身提供存储。
114+
115+
**数据采集**
116+
117+
* 通过 HTTP 协议周期性抓取被监控组件的状态,任意组件只要提供 HTTP 接口就可以接入监控,不需要任何SDK或者其他的集成过程,这样做非常适合做虚拟化环境监控系统,如Docker、Kubernetes等。
118+
* 输出被监控组件信息的HTTP接口被叫做exporter ,目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。
119+
120+
**数据存储:**
121+
122+
* 自身提供存储 tsdb,支持远程存储。
123+
124+
**优势:**
125+
126+
* 轻量管理:架构简单,不依赖外部存储,单个服务器节点可直接工作,二进制文件启动即可,属于轻量级的 Server,便于迁移和维护。
127+
* 较强的处理能力:监控数据直接存储在 Prometheus Server 本地的时序数据库中,单个实例可以处理数百万的 Metrics。
128+
* 灵活的数据模型:同 Open-Falcon,引入了 Tag,属于多维数据模型,聚合统计更方便。
129+
* 强大的查询语句:PromQL 允许在同一个查询语句中,对多个 Metrics 进行加法、连接和取分位值等操作。
130+
* 很好地支持云环境:能自动发现容器,同时 K8s 和 Etcd 等项目都提供了对 Prometheus 的原生支持,是目前容器监控最流行的方案。
131+
* 查询语言使用 PromQL,语法简单。
132+
133+
**劣势:**
134+
135+
* 功能不够完善:Prometheus 从一开始的架构设计就是要做到简单,不提供集群化方案,长期的持久化存储和用户管理,而这些是企业变大后所必须的特性,目前要做到这些只能在 Prometheus 之上进行扩展。
136+
* 网络规划变复杂:由于 Prometheus 采用的是 Pull 模型拉取数据,意味着所有被监控的 Endpoint 必须是可达的,需要合理规划网络的安全配置。
137+
138+
#### 4、InfluxDB
139+
140+
* InfluxDB 只是一个时序数据库,必须依赖其他系统才能搭建检控系统,常用 Telegraf + InfluxDB + Grafana + Kapacitor 搭建一套监控体系。
141+
142+
* InfluxDB 采用推模式(Push)获取数据。
143+
* InfluxDB 和 Promethus 的区别对比:
144+
* https://www.metricfire.com/blog/prometheus-vs-influxdb/
145+
* https://logz.io/blog/prometheus-influxdb/
146+
147+
#### 5、cAdvisor
148+
* 常见组合是 cAdvisor + InfluxDB + grafana
149+
* cAdvisor 收集、聚集、处理和导出关于运行容器的信息,提供容器监控。
150+
* cAdvisor 自身不提供存储,只保留 60 秒的信息,需要将 cAdvisor 设置为将数据记录到外部数据存储库中。经常作为其他监控解决方案的组成部分。
151+
152+
#### 6、ELK
153+
* ELK 是被广泛用于监控、分析日志文件的技术栈。ELK 以其关键组件的首字母命名:
154+
* Elasticsearch:提供数据存储和搜索。
155+
* Logstash:一个数据处理管道,用于获取数据并将其发送到 Elastisearch。
156+
* Kibana:可视化工具。
157+
158+
#### 7、 Grafana + Loki
159+
160+
* 日志监控 ELK 替代方案,资源占用比 ELK 更小
161+
* 还有一些收费监控 DataDog ,基于 Hadoop 生态的监控 OpenTSDB 没有深入调研。
162+
163+
164+
#### 四、 选型建议
165+
1. 明确监控需求,节点数量和监控指标有哪些,需要具备如何的告警性能?
166+
167+
2. 从系统成熟度上看,Zabbix 属于老牌的监控系统,资料多,功能全面且稳定,如果机器数量在几百台以内,不用太担心性能问题,另外,采用数据库分区、SSD 硬盘、Proxy 架构、Push 采集模式都可以提高监控性能。
168+
3. Zabbix 在服务器监控方面占绝对优势,可以满足 90% 以上的监控场景,但是应用层的监控似乎并不擅长,比如要监控线程池的状态、某个内部接口的执行时间等,这种通常都要做侵入式埋点。相反,新一代的监控系统 Open-Falcon 和 Prometheus 在这一点做得很好。
169+
4. 从整体表现上来看,新一代监控系统也有明显的优势,比如:灵活的数据模型、更成熟的时序数据库、强大的告警功能,如果之前对 Zabbix 这种传统监控没有技术积累,建议使用 Open-Falcon 或者 Prometheus。
170+
5. Open-Falcon 的核心优势在于数据分片功能,能支撑更多的机器和监控项;Prometheus 则是容器监控方面的标配,有 Google 和 K8s 加持。
171+
6. Zabbix、Open-Falcon 和 Prometheus 都支持和 Grafana 做快速集成,想要美观且强大的可视化体验,可以和 Grafana 进行组合。
172+
7. 到中后期,随着机器数据增加和个性化需求增多(比如希望统一监控平台、打通公司的 CMDB 和组织架构关系),往往需要二次开发或者通过监控系统提供的 API 做集成,从这点来看,Open-Falcon 或者 Prometheus 更合适。
173+
8. 不需要一开始就完成一个完美的解决方案,
174+
175+
## 参考链接
176+
177+
1. https://netsecurity.51cto.com/art/202008/623457.htm
178+
2. https://blog.didiyun.com/index.php/2019/02/20/monitoring-system
179+
3. https://cloud.tencent.com/developer/article/1437971
180+
4. https://netsecurity.51cto.com/art/201905/596709.htm
181+
5. https://juejin.im/entry/6844903684082679822
182+
6. https://zhoujinl.github.io/2018/05/16/compared

0 commit comments

Comments
 (0)