SpringCloud之Micrometer 微服务监控
不同于单体架构的应用,微服务架构由于服务数量众多,出故障的概率更大,这个在前两篇文章中已经和读者分享过了。这种时候不能单纯依靠“人肉”运维,否则当服务数量越来越多时成本将变得不可控。一个好的解决方案是我们需要对服务进行监控,监控服务运行的数据。当有异常情况出现时,服务能够自动报警,方便运维工程师去处理。Spring Cloud 中对于服务监控这一个话题也是在不断地变化中。早期的版本( Green.
不同于单体架构的应用,微服务架构由于服务数量众多,出故障的概率更大,这个在前两篇文章中已经和读者分享过了。这种时候不能单纯依靠“人肉”运维,否则当服务数量越来越多时成本将变得不可控。一个好的解决方案是我们需要对服务进行监控,监控服务运行的数据。当有异常情况出现时,服务能够自动报警,方便运维工程师去处理。
Spring Cloud 中对于服务监控这一个话题也是在不断地变化中。早期的版本( Greenwich 版之前)服务监控主要使用 Hystrix Dashboard 仪表盘,集群数据监控使用 Turbine,这一技术组合在最新的 Greenwich 版中被建议使用 Micrometer 来替换掉。相对于前者, Micrometer 的使用确实要方便很多,而且容易结合配套工具 Prometheus 以及 Grafana 一起使用,具备自动报警功能,数据展示也更加多样化,方便运维工程师去查看,因此本专栏将不再向读者介绍古老的服务监控的用法,主要向读者介绍 Micrometer 的用法。考虑到很多读者也是第一次使用 Micrometer ,因此本文将分为两部分,首先向读者介绍在 Spring Boot 中 Micrometer 要如何使用,然后再向读者介绍微服务中 Micrometer 的用法。
什么是Micrometer
Micrometer 为数据测量仪表提供了一个简单的外观,它几乎适用于大部分目前最流行的监控系统,允许开发者检测基于 JVM 的应用程序代码, Micrometer 有点类似于 SLF4J ,只不过是针对测量数据的。Micrometer 主要有如下三方面的功能:
- Micrometer 提供了度量指标类,例如 timers、gauges 以及 counters等
- 一揽子开箱即用的解决方案,例如缓存、类加载器、垃圾收集、处理器利用率以及线程池等
- 从 Spring Boot 2.0 开始, 在 Spring Boot Actuator 中使用了 Micrometer 。在早期的 Spring Boot 版本中,也支持通过附加依赖的方式来使用 Micrometer
Micrometer 支持流行的监控系统,作为一个门面,Micrometer 允许开发者检测代码,并决定是否监控系统。Micrometer 支持 AppOptics、Azure Monitor、Netflix Atlas、CloudWatch、 Datadog、Dynatrace、Elastic、Ganglia、 Graphite、Humio、Influx/Telegraf、 JMX、KairosDB、New Relic、Prometheus、SignalFx、Google Stackdriver、StatsD 以及 Wavefront。
Micrometer 基本用法
实现监控,那么我们首先要创建一个SpringBoot项目,然后加入web和actuator依赖
然后去配置下application.properties 或者 application.yml :
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
metrics:
enabled: true
注意这里的*号 代表的是所有的端点 在yml 中 需要加 双引号。
然后我们在浏览器上输入http://localhost:8080/actuator/health
端点 | 端点描述 | 是否开启 |
---|---|---|
auditevents | 展示当前应用程序的审计事件信息 | Yes |
beans | 展示所有SpringBeans信息 | Yes |
conditions | 展示一个自动配置类的使用报告,该报告展示所有自动配置类及它们被使用或未被使用的原因 | Yes |
configprops | 展示所有@ConfigurationProperties的列表 | Yes |
env | 展示系统运行环境信息 | Yes |
flyway | 展示数据库迁移路径 | Yes |
health | 展示应用程序的健康信息 | Yes |
httptrace | 展示trace信息(默认为最新的100条HTTP请求) | Yes |
info | 展示应用的定制信息,这些定制信息以info开头 | Yes |
loggers | 展示并修改应用的日志配置 | Yes |
liquibase | 展示任何Liquibase数据库迁移路径 | Yes |
metrics | 展示应用程序度量信息 | Yes |
mappings | 展示所有@RequestMapping路径的集合列表 | Yes |
scheduledtasks | 展示应用的所有定时任务 | Yes |
shutdown | 远程关闭应用接口 | No |
sessions | 展示并操作SpringSession会话 | Yes |
threaddump | 展示线程活动的快照 | Yes |
heapdump | 返回一个GZip压缩的hprof堆转储文件 | Yes |
jolokia | 展示通过HTTP暴露的JMXbeans | Yes |
logfile | 返回日志文件内容 | Yes |
prometheus | 展示一个可以被Prometheus服务器抓取的metrics数据 | Yes |
那么我们如何结合 Prometheus 将数据更直观的展现出来?
什么是Prometheus
Prometheus 是一个最初在 SoundCloud 上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用了 Prometheus ,该项目拥有一个非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,可以独立于任何公司进行维护。
Prometheus 主要有如下特点:
- 具有由度量名称和 key/value 标识的时间序列数据的多维数据模型
- PromQL,一种灵活的查询语言
- 不依赖分布式存储,单个服务器节点是自治的
- 使用 HTTP 协议,自动拉取数据
- 通过服务发现或静态配置发现目标
- 多种图形和仪表盘支持,数据展示友好
- 可以非常方便地实现扩展
Prometheus 采用的架构
这张图片是在网上找的,我们可以看一下Prometheus的工作原理:
从这张图我们可以看到Prometheus 的工作流程:- 首先 Prometheus Server 定期从 targets 或者服务注册中心拉取数据
- exporters 负责向 Prometheus Server 做数据汇总。不同的数据汇总由不同的 exporters 实现,例如监控主机有 node-exporters,MySQL 有 MySQL Server exporter
- 由于 Prometheus 采用数据拉取的模式,实际生产环境可能由于各个服务不在一个子网或者防火墙的原因,导致 Prometheus 无法直接拉取各个 target 数据,此时可以通过 Pushgateway 来推送 metrics 到 Prometheus Server
- Alertmanager 则可以通过提前配置好的邮件地址,对收到的警告信息发出报警
- Grafana 则可以通过 PromQL 查询监控数据,进行更丰富的展示
如何使用Prometheus
首先我们创建一个Prometheus的SpringBoot工程,并且加入以下依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
注意之前的actuator 依赖不要忘记加了。
添加完成后我们修改application.yml 或者 application.properties
management: metrics: export: prometheus: enabled: true endpoints: web: exposure: include: "*" endpoint: prometheus: enabled: true metrics: enabled: true
上面的这些配置之前都讲过,不清楚的小伙伴可以看之前的文章。
配置好了之后我们去访问
http://localhost:8080/actuator/prometheus
结果如下:
这样我们就看到各项数据的汇总了,那么下面使用Prometheus 进行可视化。
首先得下载Prometheus
下载完成后,将下载文件解压,在解压目录中可以看到 prometheus.yml 配置文件,在 prometheus.yml 文件中配置要查看的数据接口,如下:
scrape_configs: - job_name: 'prometheus' scrape_interval: 5s metrics_path: '/actuator/prometheus' static_configs: - targets: ['localhost:8080']
这里需要配置的就三个地方:
- scrape_interval 表示每隔 5 秒抓取一次数据
- metrics_path 表示数据路径
- targets 中配置的则是服务地址
配置完成后,Windows 环境下,直接双击 prometheus.exe 启动 Prometheus ,如果是 Linux 环境,则执行
./prometheus --config.file=prometheus.yml
命令启动 Prometheus 。启动成功后,在浏览器中输入
http://localhost:9090
看到下面的界面说明成功:
上面的选项卡分别是警告、图表展示、状态以及帮助,默认看到的就是图表,在下拉框中选择要查看的参数,点击 Execute 按钮,即可看到相关数据:
这样就实现了数据的可视化。总结
微服务的监控对于我们来说十分的重要,本文主要讲老使用Micrometer和Prometheus实现微服务的监控以及可视化。
源码地址
更多推荐
所有评论(0)