内容简介:为了能够及时了解服务线上运行时的状态,同时能够在服务处于异常状态时能够进行有效的通知报警,我们通常需要对服务进行监控管理。随着分布式微服务架构的流行,服务监控已经是现代web后端开发体系中,非常重要的组成部分。通常服务监控系统包括如下几个部分:对于web后端开发人员,在开发服务时,就应考虑到服务监控的问题。我们可以采用比较流行的服务监控系统,帮助我们快速搭建服务监控平台。一般来说服务监控系统会集成了数据采集、数据存储、数据展示分析等功能。而后端开发人员则主要集中于数据提供方如何产生数据这部分的功能。
为了能够及时了解服务线上运行时的状态,同时能够在服务处于异常状态时能够进行有效的通知报警,我们通常需要对服务进行监控管理。随着分布式微服务架构的流行,服务监控已经是现代web后端开发体系中,非常重要的组成部分。
通常服务监控系统包括如下几个部分:
-
数据提供方
产生数据的终端,比如某web后端服务。
-
数据采集器
主要用来采集数据,使用push或者pull的方式,从终端收集数据
-
数据存储
主要将采集过来的数据以某种方式(通常存储到数据库)存储起来,供数据展示分析系统使用。
-
数据展示分析系统
主要是对存储中的监控数据进行分析处理,并提供报警等功能。
对于web后端开发人员,在开发服务时,就应考虑到服务监控的问题。我们可以采用比较流行的服务监控系统,帮助我们快速搭建服务监控平台。一般来说服务监控系统会集成了数据采集、数据存储、数据展示分析等功能。而后端开发人员则主要集中于数据提供方如何产生数据这部分的功能。
推荐使用telegraf(数据采集) + influxdb(数据存储) + grafana(数据展示)组合,其中:
- telegraf:作为数据采集器,是一个插件驱动的服务器代理,用于收集指标数据。
- influxdb:作为数据仓库,是一款优秀的 时间序列数据库 ,使用 Go 语言编写。
- 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 } 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 前端监控了解与简易实现
- 安全监控 划重点!机房中最重要的监控系统你了解吗?
- 一篇文章全面了解运维监控知识体系
- 一篇文章带你了解当下主流的监控工具
- 你了解HTTPS,但你可能不了解X.509
- 你真的了解Mybatis的${}和#{}吗?是否了解应用场景?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。