十七、监控与度量-Prometheus/Grafana/Actuator

文章目录

  • 前言
  • [一、Spring Boot Actuator](#一、Spring Boot Actuator)
    • [1. 简介](#1. 简介)
    • [2. 添加依赖](#2. 添加依赖)
    • [2. 开启端点](#2. 开启端点)
    • [3. 暴露端点](#3. 暴露端点)
    • [4. 总结](#4. 总结)
  • 二、Prometheus
    • [1. 简介](#1. 简介)
    • [2. Prometheus客户端](#2. Prometheus客户端)
    • [3. Prometheus服务端](#3. Prometheus服务端)
    • [4. 总结](#4. 总结)
  • 三、Grafana
    • [1. 简介](#1. 简介)
    • [2. Grafana安装](#2. Grafana安装)
    • [3. Grafana配置](#3. Grafana配置)

前言

系统监控

在企业级的应用中,系统监控至关重要,可以帮助我们预防故障,预测变化趋势,在达到阈值的时候报警,为排查生产问题提供更多的信息。

同时也能看到系统问题,早做优化,避免更大的事故发生。


一、Spring Boot Actuator

1. 简介

Spring Boot包含了很多附加功能帮助我们监控和管理我们的应用,可以使用HTTP或者JMX等方式通过端点(endpoint)获取应用的健康状态以及其他指标收集

Spring Boot Actuator模块就是Spring Boot提供的集成了上面所述的监控和管理的功能。像Spring Boot其他模块一样开箱即用,非常方便,通过Actuator就可以使用HTTP或者JMX来监控我们的应用。

JMX(Java Management Extensions):Java平台的管理和监控接口,任何程序只要按JMX规范访问这个接口,就可以获取所有管理与监控信息。

下面简单介绍Spring Boot Actuator是如何使用的,具体的使用方法见官方文档

2. 添加依赖

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

2. 开启端点

Spring Boot中监控应用或者与应用交互都是通过端点(endpoint)进行的,Spring Boot提供了非常多的原生端点,比如health,可以帮助我们监控应用的监控状态(是否可用),同时可以添加自定义的端点。每个端点都可以单独设置是否开启,并通过HTTP或者JMX暴露给外部系统 。如果选择HTTP方式,则URL的前缀一般是/actuator,比如health的url地址就是/actuator/health

默认情况下,除了‌shutdown‌(让系统优雅的关闭) ,其他端点默认是开启的。我们可以通过 ‌management.endpoint.<id>.enabled‌ 设置某个端口的状态,比如开启shutdown端口。

property 复制代码
management.endpoint.shutdown.enabled=true
yml 复制代码
# shutdown:开启actuator的停机组件,可以通过curl -X POST /actuator/shutdown来关闭服务。
# health:开启actuator的健康检测组件。
# metrics,prometheus:开启监控组件
management:
  server:
    # 采用与web服务不同的端口,该端口不暴露到K8S集群外部
    port: 8888
    # 开启优雅停机
    shutdown: graceful
  endpoint:
    shutdown:
      # 开启actuator的停机端口。
      enabled: true
  health:
    defaults:
      # 开启actuator的健康检测判定,默认为所有引入的组件(如redis)都作为健康与否的判定依据。
      enabled: true
    redis:
      # 关闭actuator的特定组件健康检测判定,如redis如果健康情况不影响服务的运行,可以关闭。
      enabled: false
  metrics:
    tags:
      # 配置监控的tag,指向服务名称。
      application: ${spring.application.name}

3. 暴露端点

开启端点后还必须暴露端点给HTTP或者JMX才能正常使用,但是端口可能包含一些敏感的数据,所以Spring Boot的原生端口默认只支持HTTP或者JMX。

如果要改变端口暴露的方式,使用 ‌include‌ 或者 ‌exclude‌ 属性,比如:

property 复制代码
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=health,info,prometheus
yml 复制代码
management:
  endpoints:
    web:
      # 设置是否暴露端点 默认只有health和info可见
      exposure:
        include: shutdown,health,metrics,prometheus
        # GET /actuator/gateway/routes 查看路由清单
        # GET /actuator/gateway/routes/{id} 查看特定Id路由详情
        # GET /actuator/gateway/globalfilters
        # GET /actuator/gateway/routefilters
        # POST /actuator/gateway/refresh 刷新路由缓存
        # POST /actuator/gateway/routes/{id} 增加路由
        # DELETE /actuator/gateway/routes/{id} 删除路由
        # GET /actuator/health 查看健康状态
        # GET /actuator/metrics 查看指标列表
        # GET /actuator/metrics/{metricsName} 查看指标

4. 总结

到目前为止,Spring Boot Actuator就配置好了,除了上述端点的开启和暴露方式,还有HTTP,JMX,日志,指标(Metrics),权限,HTTP追踪,进程监控等功能,如果想了解更多,可以去官网进一步学习。

二、Prometheus

1. 简介

中文名普罗米修斯,是新一代的监控系统,与其他监控系统相比,具有易于管理,监控服务的内部运行状态,强大的数据模型,强大的查询语言PromQL,高效,可扩展,易于集成,可视化,开放性等众多功能。详细内容可见官网

2. Prometheus客户端

在Spring Boot中,原生支持了prometheus端口,只需要通过如下配置,就可集成Prometheus,暴露给HTTP。

还需要配置 metrics ,因为如果没有这个参数,很多报表不能正常显示。

yml 复制代码
management:
  endpoints:
    web:
      exposure:
        include: "prometheus"
  metrics:
    tags:
      application: ${spring.application.name}

这样通过,Spring Boot Actuator配置,开启和暴露prometheus和metrics端点,就把Prometheus的客户端配置好了。

3. Prometheus服务端

服务端,这里我们使用docker方式。

  1. prometheus.yml

需要配置文件prometheus.yml。

yml 复制代码
scrape_configs:
  # 任意写,建议英文,不要包含特殊字符
  - job_name: 'jobName'
    # 采集的间隔时间
    scrape_interval: 15s
    # 采集时的超时时间
    scrape_timeout: 10s
    # 采集路径
    metrics_path: '/actuator/prometheus'
    # 采集服务的地址,也就是我们应用的地址
    static_configs:
      - targets: ['localhost:8080']
  1. docker-compose.yml

创建docker-compose.yml,注意prometheus.yml与docker-compose.yml的相对路径,如果放在同样的目录下,volumes则为- './prometheus.yml:/etc/prometheus/config.yml'。

yml 复制代码
version: '3.3'
services:
  prometheus:
    image: 'prom/prometheus:v2.14.0'
    ports:
      - '9090:9090'
    command: '--config.file=/etc/prometheus/config.yml'
    volumes:
      - './prometheus.yml:/etc/prometheus/config.yml'
  1. 启动

直接使用命令docker-compose up -d启动即可。

  1. 测试

启动之后,在浏览器中访问http://localhost:9090

然后,通过查询关键字,可以查看不同指标的监控数据,比如jvm_memory_used_bytes。

4. 总结

这样,就通过Prometheus已经可以看到Spring Boot不同指标的监控数据了。但Prometheus的可视化还是比较粗糙,需要通过Grafana,才可以实现完美的可视化仪表盘。

三、Grafana

1. 简介

Grafana是一个可视化面板,可以展示非常漂亮的图标和布局,支持Prometheus,SQL(MySQL,PostgreSQL)等作为数据源。

有如下特点:

  • 可视化:非常精美的各种组件可供选择,比如图表,文本,提醒事项,还有灵活的布局,可以自由配置你的可视化面板。

  • 数据源:目前支持Prometheus,Graphite,Loki,Elasticsearch,MySQL,PostgreSQL,Stackdriver和TestData DB等多种数据源。

  • 通知提醒:通过可视化的方式配置通知规则,在数据达到阈值时,将配置好的信息发送给指定管理员。

  • 混合数据源:在同一个图中混合不同的数据源,基于每个查询指定数据源。

2. Grafana安装

使用docker compose的方式安装。

  1. docker-compose.yml

此处可以与Prometheus合并到一个docker compose中:

yml 复制代码
version: '3.3'
services:
  prometheus:
    image: 'prom/prometheus:v2.14.0'
    ports:
      - '9090:9090'
    command: '--config.file=/etc/prometheus/config.yml'
    volumes:
      - './prometheus.yml:/etc/prometheus/config.yml'

  grafana:
    image: 'grafana/grafana:6.5.0'
    ports:
      - '3000:3000'
  1. 启动

通过命令docker-compose up -d启动。

  1. 测试

启动之后,在浏览器中访问http://localhost:3000,并使用初始账号admin:admin登录。

3. Grafana配置

  1. 配置数据源

登录Grafana之后,选择添加数据源,选择Prometheus。

输入数据源名称(任意),Prometheus的url地址,然后点击添加保存。

  1. 配置仪表盘

在这里有两个选择,其一是创建新的仪表盘,选择不同的组件,设置布局,还有一种方式是选择Grafana官方或者社区提供的仪表盘,而且他们的样式都十分精美,可以直接导入。这里我们选择导入仪表盘,因为我们是Java应用,重点关注的肯定是JVM相关的指标,所以我们搜索JVM,通过安装量进行排序。

点击第一个,这个仪表盘包含了JVM,线程,CPU等指标,我们就导入这个,当然你也可以选择其他的仪表盘或者自建。

在Grafana.com Dashboard处输入4701。

选择数据源,点击导入。

最终呈现的仪表盘就如下图:


本文的引用仅限自我学习如有侵权,请联系作者删除。
参考知识
使用 Prometheus + Grafana + Spring Boot Actuator 监控应用


相关推荐
计算机毕设定制辅导-无忧学长8 小时前
Grafana 与 InfluxDB 可视化深度集成(二)
信息可视化·数据分析·grafana
云游13 小时前
大模型性能指标的监控系统(prometheus3.5.0)和可视化工具(grafana12.1.0)基础篇
grafana·prometheus·可视化·监控
qq_232045572 天前
非容器方式安装Prometheus和Grafana,以及nginx配置访问Grafana
nginx·grafana·prometheus
测试开发Kevin2 天前
详解grafana k6 中stage的核心概念与作用
测试工具·压力测试·grafana
夜莺云原生监控2 天前
Prometheus 监控 Kubernetes Cluster 最新极简教程
容器·kubernetes·prometheus
SRETalk2 天前
Prometheus 监控 Kubernetes Cluster 最新极简教程
kubernetes·prometheus
川石课堂软件测试3 天前
JMeter并发测试与多进程测试
功能测试·jmeter·docker·容器·kubernetes·单元测试·prometheus
SRETalk3 天前
夜莺监控的几种架构模式详解
prometheus·victoriametrics·nightingale·夜莺监控
天翼云开发者社区3 天前
Grafana无法启动修复解决
grafana
Ditglu.4 天前
使用Prometheus + Grafana + node_exporter实现Linux服务器性能监控
服务器·grafana·prometheus