知己知彼,百战不殆。- 《孙子兵法》
1. 了解服务监控
为了能够及时了解服务线上运行时的状态,同时能够在服务处于异常状态时能够进行有效的通知报警,我们通常需要对服务进行监控管理。随着分布式微服务架构的流行,服务监控已经是现代web后端开发体系中,非常重要的组成部分。
通常服务监控系统包括如下几个部分:
-
数据提供方
产生数据的终端,比如某web后端服务。
-
数据采集器
主要用来采集数据,使用push或者pull的方式,从终端收集数据
-
数据存储
主要将采集过来的数据以某种方式(通常存储到数据库)存储起来,供数据展示分析系统使用。
-
数据展示分析系统
主要是对存储中的监控数据进行分析处理,并提供报警等功能。
对于web后端开发人员,在开发服务时,就应考虑到服务监控的问题。我们可以采用比较流行的服务监控系统,帮助我们快速搭建服务监控平台。一般来说服务监控系统会集成了数据采集、数据存储、数据展示分析等功能。而后端开发人员则主要集中于数据提供方如何产生数据这部分的功能。
推荐使用telegraf(数据采集) + influxdb(数据存储) + grafana(数据展示)组合,其中:
2. 数据采集方式
2.1 push方式
推方式,即数据提供方(如上图中的服务A),主动将自身运行状态信息(如内存使用信息、线程信息、GC信息等)进行上报。
常见有两种方式:
-
一种是数据提供方将数据push到数据采集器,一般数据采集器会提供socket通道,通过tcp/udp的方式来传输数据。
-
一种是数据提供方将数据push到消息中间件(如kafka、rabbitmq等),数据采集器通过监听消息队列获取数据。
这种方式可以通过消息中间件进行对数据提供方和数据采集器进行解耦,比较适合用于大型的系统中。
2.2 pull方式
拉方式,即由数据采集器进行定时轮询从数据提供方进行拉取,要求数据提供方提供相应的接口供数据采集器获取数据。一般来说,数据提供方可以提供基于HTTP Restful接口。
2.3 如何选择?
push方式和pull方式各有其优点,使用何种方式应该集合具体业务场景、团队情况等方面综合而定。
项目 | pull | push |
---|---|---|
实时性 | 一般,取决于定时周期 | 较好 |
数据提供方 | 被动上报数据,无需感知数据采集器的存在 | 主动上报数据,需要主动感知数据采集器或消息中间件 |
数据采集器 | 主动拉取数据,需要感知数据提供方的存在 | 被动接收数据,无需感知数据提供方的存在 |
通常实现 | 短连接,如:http接口 | 长连接,如:tcp |
3. uranus-service 服务监控模块
该服务监控模块,对外提供基于http restful接口,供数据采集器通过pull的方式收集数据。主要参考了java spring boot框架的actuaotr模块,提供了如下接口:
HTTP方法 | 接口地址 | 描述 | 是否需授权 |
---|---|---|---|
GET | /health | 查看应用健康指标 | 否,如需查看详细信息,则需要授权 |
GET | /info | 查看应用信息 | 否 |
GET | /metrics | 查看应用指标信息 | 是 |
GET | /metrics/{name} | 查看具体指标 | 是 |
POST | /shutdown | 关闭应用 | 是 |
3.1 health接口
该接口用于查看应用健康指标。
当未通过授权时,只能查看基本信息,例如:
{
"status": "up",
"statusCode": 1
}
当通过授权(http basic auth)时,可以查看详细信息,例如:
{
"details": {
"disk": {
"status": "up",
"details": {
"free": 930381459456,
"threshold": 0,
"total": 1127625711616
}
},
"mem": {
"status": "up",
"details": {
"free": 8645541888,
"total": 17035321344,
"used": 8389779456
}
},
....
},
"status": "up",
"statusCode": 1
}
4. 小结
本节主要介绍了后端开发中需要了解的服务监控相关的知识、数据采集方式以及uranus-service服务监控模块的基本情况。下一节我们将重点关注health接口的实现中需要后端人员了解的http basic auth机制。
本文为作者原创作品,属于《重新学习web后端开发》专辑中的一篇,转载时请备注作者信息及来源。本文原文地址:https://www.donnyzhang.com/2019/02/26/uranus-006/
网友评论