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