文档章节

Spring Boot Actuator metrics 使用Prometheus 和 Grafana 进行监控(二)

Benz001
 Benz001
发布于 01/26 15:51
字数 1692
阅读 66
收藏 6

欢迎来到Spring Boot Actuator系列教程的第二部分,在第一部分,你学到了spring-boot-actuator 模块可以做什么,在spring boot application如何配置,以及怎样和各种actuator端点交互。

在本文中,你将学到 spring boot actuator如何和监控系统 Prometheus、被称为图形解决方案Grafana 的集成。

在本文末尾,你还能在本地机子设置Prometheus 和 Grafana dashboard,可视化和监控所有来自Spring Boot application的指标数据。

Prometheus

Prometheus 是一个开源监控系统,它最初是由SoundCloud创建的。

它由下面的核心组件组成:

  • 数据刮刀-配置间隔周期性地通过HTTP拉取指标数据
  • 时序数据库-存储所有指标数据
  • 简单用户接口-可视化,查询、监控所有指标。

Grafana

Grafana 允许你从各种数据源导入数据,像Elasticsearch, Prometheus, Graphite, InfluxDB等等,

并且用漂亮的图表可视化这些数据。

它还可以让你设置基于指标数据的警告规则。当警告状态发生改变时,可以通过email, slack或者其他渠道通知到你。

注意这里,Prometheus dashboard 也有简单的图表,但是Grafana 的图表更好,这就是为什么,本文我们用Prometheus和Grafana集成一起,导入和可视化我们的指标数据。

将Micrometer Prometheus 注册添加到Spring Boot 应用。

Spring Boot 使用 Micrometer一个应用指标外观 ,集成actuator metrics和使用外部监控系统。它支持多个监控系统,像Netflix Atlas, AWS Cloudwatch, Datadog, InfluxData, SignalFx, Graphite, Wavefront, Prometheus 等等。

为了集成 Prometheus,你需要添加micrometer-registry-prometheus 依赖。

<!-- Micrometer Prometheus registry  -->

<dependency>

<groupId>io.micrometer</groupId>

<artifactId>micrometer-registry-prometheus</artifactId>

</dependency>

一旦你添加了上面的依赖,Spring Boot将会自动配置一个PrometheusMeterRegistry 和CollectorRegistry 去收集和导出可被Prometheus服务器scraped格式的指标数据.所有application的指标数据在actuator的/prometheus 端点 都可获取,Prometheus服务器通过该端点周期性获取指标数据。

探索Spring Boot Actuator 的/prometheus端点

我们探索prometheus 端点,当micrometer-registry-prometheus依赖可用的时候,它由Spring Boot 暴露出来。

首先,你启动endpoint-discovery页面 http://localhost:8080/actuator 可以看到prometheus 端点信息。

prometheus 端点暴露了被Prometheus服务器格式的指标数据。通过http://localhost:8080/actuator/prometheus你可以看到暴露的指标数据。

# HELP jvm_buffer_memory_used_bytes An estimate of the memory that the Java virtual machine is using for this buffer pool

# TYPE jvm_buffer_memory_used_bytes gauge

jvm_buffer_memory_used_bytes{id="direct",} 81920.0

jvm_buffer_memory_used_bytes{id="mapped",} 0.0

# HELP jvm_threads_live The current number of live threads including both daemon and non-daemon threads

# TYPE jvm_threads_live gauge

jvm_threads_live 23.0

# HELP tomcat_global_received_bytes_total  

# TYPE tomcat_global_received_bytes_total counter

tomcat_global_received_bytes_total{name="http-nio-8080",} 0.0

# HELP jvm_gc_pause_seconds Time spent in GC pause

# TYPE jvm_gc_pause_seconds summary

jvm_gc_pause_seconds_count{action="end of minor GC",cause="Allocation Failure",} 7.0

jvm_gc_pause_seconds_sum{action="end of minor GC",cause="Allocation Failure",} 0.232

jvm_gc_pause_seconds_count{action="end of minor GC",cause="Metadata GC Threshold",} 1.0

jvm_gc_pause_seconds_sum{action="end of minor GC",cause="Metadata GC Threshold",} 0.01

jvm_gc_pause_seconds_count{action="end of major GC",cause="Metadata GC Threshold",} 1.0

jvm_gc_pause_seconds_sum{action="end of major GC",cause="Metadata GC Threshold",} 0.302

# HELP jvm_gc_pause_seconds_max Time spent in GC pause

# TYPE jvm_gc_pause_seconds_max gauge

jvm_gc_pause_seconds_max{action="end of minor GC",cause="Allocation Failure",} 0.0

jvm_gc_pause_seconds_max{action="end of minor GC",cause="Metadata GC Threshold",} 0.0

jvm_gc_pause_seconds_max{action="end of major GC",cause="Metadata GC Threshold",} 0.0

# HELP jvm_gc_live_data_size_bytes Size of old generation memory pool after a full GC

# TYPE jvm_gc_live_data_size_bytes gauge

jvm_gc_live_data_size_bytes 5.0657472E7



## More data ...... (Omitted for brevity)

使用Docker下载和运行Prometheus

  1. 下载Prometheus

你可以使用docker pull命令 下载Prometheus docker 镜像,像这样:

$ docker pull prom/prometheus

下载完镜像,你可以输入docker 镜像命令,查看本地存在的镜像列表

$ docker image ls

REPOSITORY                                   TAG                 IMAGE ID            CREATED             SIZE

prom/prometheus                              latest              b82ef1f3aa07        5 days ago
  1.  Prometheus 配置prometheus.yml

接着,我们需要从Spring Boot Actuator的/prometheus 端点,配置Prometheus 以便scrape 指标数据

使用下面的配置,创建一个名叫prometheus.yml 的新文件

# my global config

global:

  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # scrape_timeout is set to the global default (10s).



# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.

rule_files:

  # - "first_rules.yml"

  # - "second_rules.yml"



# A scrape configuration containing exactly one endpoint to scrape:

# Here it's Prometheus itself.

scrape_configs:

  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.

  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'

    # scheme defaults to 'http'.

    static_configs:

    - targets: ['127.0.0.1:9090']



  - job_name: 'spring-actuator'

    metrics_path: '/actuator/prometheus'

    scrape_interval: 5s

    static_configs:

    - targets: ['HOST_IP:8080']

以上配置是从Prometheus文档提供的配置文件基础上作了扩展。最重要的,值得注意是,在scrape_configs 部分中,  spring-actuator job 的metrics_path ,指定 Actuator的prometheus 端点路径,目标部分包括了你的Spring Boot 应用的HOST 和 PORT,请确保用运行Spring Boot application 的机子的IP地址,代替HOST_IP,注意这里,localhost在这里是无效的,因为我们从docker 容器连接HOST的机子,你必须指定网络IP地址。

  1. 使用 Docker运行Prometheus

最后,我们使用 Docker运行Prometheus。输入下面的命令, 以后台服务方式,启动Prometheus 服务-

$ docker run -d --name=prometheus -p 9090:9090 -v <PATH_TO_prometheus.yml_FILE>:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml

请确保 用你Prometheus 配置文件存储的路径,代替<PATH_TO_prometheus.yml_FILE>

执行上面命令之后,docker 将会在容器内启动Prometheus 服务 。用下面的命令,你可以查看所有容器的列表。

$ docker container ls

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

e036eb20b8ad        prom/prometheus     "/bin/prometheus --c…"   4 minutes ago       Up 4 minutes        0.0.0.0:9090->9090/tcp   prometheus

  1. 从Prometheus dashboard 可视化 Spring Boot 指标

就是这样,你现在可以导航到http://localhost:9090 查看Prometheus dashboard了。

你可以在表达式文本框中,输入一个Prometheus 查询表达式。

下面是我们Spring Boot 应用指标的一些Prometheus图

 

1.系统的CPU使用情况

2.响应延迟的缓慢API

 

使用Docker下载和运行Grafana

输入下面Docker命令下载和运行Grafana

$ docker run -d --name=grafana -p 3000:3000 grafana/grafana

以上命令会在Docker容器内部 启动Grafana,在主机机器上保证3000端口可用。

你可以输入docker容器ls 命令 查看容器列表

$ docker container ls

CONTAINER ID        IMAGE               COMMAND                  CREATED                  STATUS              PORTS                    NAMES

cf9196b30d0d        grafana/grafana     "/run.sh"                Less than a second ago   Up 5 seconds        0.0.0.0:3000->3000/tcp   grafana

e036eb20b8ad        prom/prometheus     "/bin/prometheus --c…"   16 minutes ago           Up 16 minutes       0.0.0.0:9090->9090/tcp   prometheus

 

就是这样,你现在可以导航到http://localhost:3000 ,用默认用户名admin 和密码admin 登录Grafana

配置Grafana 从Prometheus导入指标数据

下列步骤 ,从Prometheus导入指标数据,并在Grafana可视化它。

1.在Grafana 添加 Prometheus数据源

2.用Graph创建一个新Dashboard

3.在Grafana的查询编辑器,添加一个Prometheus查询。

4. 从Grafana的dashboard可视化指标

你可以从Github上,找到完整的Actuator演示源代码。

点击访问原文地址

© 著作权归作者所有

共有 人打赏支持
Benz001
粉丝 1
博文 20
码字总数 15540
作品 0
广州
程序员
私信 提问
Docker下Prometheus和Grafana三部曲之一:极速体验

版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/88367137 开源监控工具Prometheus目前广为使用,配合Grafana即可直观展现监控数据,但对于初...

博陵精骑
03/10
0
0
【Spring Boot】29.监控管理

简介 监控是我们开发服务网站无法绕开的话题。springboot也为我们带来了关于监控的解决方案。 通过引入spring-boot-starter-actuator,可以使用Spring Boot为我们提供的准生产环境下的应用监...

落花时节又逢卿
2018/12/28
0
0
Spring Boot实践---基于spring-boot-actuator的监控插件: Spring Boot Admin

一、入门使用:Actuator插件 Actuator插件是SpringBoot原生提供的一个服务,可以通过暴露端点路由,用来输出应用中的诸多 端点信息。实战一下! pom.xml中添加依赖: 启动Spring Boot应用程序...

spinachgit
03/11
0
0
SpringBoot使用Actuator+Jolokia+Telegraf+Influxdb+Grafana搭建图形化服务监控平台

随着服务的复杂度上升,对服务的监控和管理的需求显著增加,开发人员可以使用Jconsole、jvisualvm、jinfo、jstat等工具分析服务的运行状况,但是对于运维人员以及其他非开发人员就不具有可行...

voole
2018/11/12
0
0
基于Docker+Prometheus+Grafana监控SpringBoot健康信息

在微服务体系当中,监控是必不可少的。当系统环境超过指定的阀值以后,需要提醒指定的运维人员或开发人员进行有效的防范,从而降低系统宕机的风险。在CNCF云计算平台中,Prometheus+Grafana是...

融科聂晨
2018/11/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

用 C 语言编写 Windows 服务程序的五个步骤(转)

摘要   Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并 实现一个简单的服务程...

_编程菜鸟_
9分钟前
0
0
Linux各目录及每个目录的详细介绍

目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。 /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/...

若杰
10分钟前
3
0
vue组件系列5、日期选择

插件部分源码 <template> <div class="date-picker" @click.stop> <input class="input" v-model="dateValue" v-on:mouseover="openPanel" /> <!-- 动画特效 --> <transi......

轻轻的往前走
11分钟前
0
0
SQL

BEGIN #定义一个变量来保存该记录是否存在 declare num int; #这条sql,就是查询对应的记录有多少条,注意 into num 这两句话,就是把count(*) 查出的值,赋给到num中 select co...

张泽立
12分钟前
1
0
云栖科技评论87期:建立AI规则非常重要 但充分对话更重要

【卷首语】建立AI规则非常重要 但充分对话更重要    2016年,谷歌CEO Sundar Pichai宣布谷歌战略从Mobile First(移动优先)转向AI First(人工智能优先),在此之后,谷歌不仅在AI领域持续投入...

Mr_zebra
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部