热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

docker安装Prometheus和Grafana实现对Springcloud微服务的监控

Prometheus+Grafana搭建立体化监控体系,一

目前我们团队实施的项目后端采用了基于 Springcloud 的微服务,其中 Eureka 用作注册中心,其他服务作为 Eureka 客户端接入。采用 Prometheus 和 Grafana 可以有效的监控微服务的运行情况。

这篇文章中,我会编写 2 个微服务集成 Prometheus,并通过 docker 来安装 Prometheus 和 Grafana 来展示对微服务的监控。

软件信息

以下列出文中提及的各软件版本:

  • springboot: 2.1.4.RELEASE

  • springcloud: Greenwich.RELEASE

  • prometheus: prom/prometheus:v2.11.2 镜像

  • grafana: grafana/grafana 镜像,实际上是 6.7.2 版本

微服务接入

Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统。

Springboot 中则通过 spring-boot-starter-actuator 可以以不同的 HTTP 端口来暴露应用的状态等信息。同时 Springboot 2.x 版本中引入了 io.micrometer,通过 micrometer-registry-prometheus 两者可以很方便的集成。

基础步骤

  1. 在 pom.xml 中添加对 spring-boot-starter-actuator、micrometer-registry-prometheus 的依赖

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>io.micrometergroupId>
<artifactId>micrometer-registry-prometheusartifactId>
dependency>

  1. 在 application.properties 等配置中开放 /actuator/prometheus
     端口的访问

management.endpoints.web.exposure.include=prometheus

按照以上两步,微服务就算完成了基础的 Prometheus 的接入。

  1. 为了演示其他的效果,我们在每个微服务的 Application 类中添加如下代码:

@Bean
MeterRegistryCustomizer configurer(
@Value("${spring.application.name}")
String applicationName)
{
return (registry) -> registry.config().commonTags("application", applicationName);
}

这里我们为采集的信息添加了一个 application 标签,与微服务的应用名称一致。

Eureka 注册中心接入

由于 Prometheus 官方没有提供 Eureka 注册中心的接入支持,我们可以通过 eureka-consul-adapter
 来利用官方提供的对 Consul 的支持达成目标。

pom.xml 中添加依赖

<dependency>
<groupId>at.twinformaticsgroupId>
<artifactId>eureka-consul-adapterartifactId>
<version>1.4.0version>
dependency>

Eureka 注册客户端接入

按照基础步骤接入就可以了。

运行微服务

Eureka 注册中心和 Demo 项目运行起来之后,Eureka 界面如下:

访问微服务的 /actuator/prometheus
 端点,界面大致如下:

如需项目源码,可关注我的公众号 up2048
,并回复 prometheus-demo 获取。

docker 安装 Prometheus

编辑 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:
- job_name: 'microservice'
scheme: http
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
consul_sd_configs:
#consul 地址
- server: '192.168.0.102:12345'
scheme: http
services: [RON-DEMO]
- job_name: 'eureka'
scheme: http
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: ['192.168.0.102:12345']

下载并启动容器

docker pull prom/prometheus:v2.11.2
docker run -d -v path/to/prometheus.yml:/etc/prometheus/prometheus.yml -p 9090:9090 --name prometheus prom/prometheus:v2.11.2

容器启动成功后,在浏览器中访问 localhost:9090/targets
。界面如下:

其中 http://ip:12345
 是 Eureka 实例,http://ip:8099
 和 http://ip:9999
 是两个 RON-DEMO 实例。

docker 安装 grafana

下载并启动容器

docker pull grafana/grafana
docker run -d -p 3000:3000 --name grafana -v path/to/grafana/data/:/var/lib/grafana grafana/grafana

浏览器访问 localhost:3000

输入默认用户名:admin,密码:admin 登录。首次登录后会提示修改密码。

修改密码后进入首页

添加数据源,选择 Prometheus

编辑相关信息

保存,出现绿色提示,表示成功。

Grafana 的 DashBoard 和 Panel 都支持自定义,这里不做阐述。

此外,Grafana 官方的 DashBoard 市场 Grafana Lab - Dashboards 提供了可拿来即用的强大而通用的 DashBoard。这里我介绍两款:

  • Id 为 4701
     的 JVM (Micrometer)

  • Id 为 10280
     的 Spring Boot 2.1 Statistics

安装市场上的 DashBoard

左上角 [ + ],点击 Import

在 Grafana.com Dashboard 框中输入 Id,点击 Load

设置数据源,Import

现成的 DashBoard 就可以使用了。

这里分别贴一张 JVM (Micrometer) 和 Spring Boot 2.1 Statistics 的截图供大家参考。

基于 Prometheus 与 Grafana 微服务监控体系到这里就算初步搭建完了。

踩到的坑

Prometheus targets 中找不到监控的微服务

最开始使用的是 Prometheus 最新版本的镜像,eureka-consul-adapter
 是 1.1.0 版本,按照上面一样的配置之后,在 /targets
 页面上看不到监控的微服务。报了大致如下的日志:404 /v1/health/service/ron-demo not found.

后来发现 eureka-consul-adapter
 是没有提供 Consul 的 health 类端口的,可能因为这个原因,无法被 Prometheus 发现。但是很多参考材料上都是可行的,于是我针对参考材料发布的时间,找到了那个时间段发布的 Prometheus 版本,将版本回退到 v2.11.2 之后,/targets
 页面终于出现了预期的画面。

经之后的测试发现,Prometheus 换成最新版本,eureka-consul-adapter
 是 1.4.0 版本以后,这个问题也可以解决。

因此,如果大家遇到这个问题,很可能是 Prometheus 和 eureka-consul-adapter
 版本不匹配导致的。

Prometheus 日志中出现 503 的问题

这个是在解决第一个问题过程中,发现其他人遇到的问题,详见:prometheus报错Error refreshing service Unexpected response code: 503解决办法。当我解决了第一个问题之后,查看日志,也发现了一样的 503 错误。解决方案可以参看我链接的文章。

Grafana 在使用 Import 进来的 DashBoard 时,不显示 Application

这主要是因为没有给 Prometheus 采集的信息添加 application 标签导致。因为我最初的代码并没有加入前文微服务接入 -> 基础步骤 -> 3 章节中的相关代码。在 MicroMeter 1.1.0 版本之后,可以在应用配置中添加如下属性,达到一样的效果。

management.metrics.tags.application: ${spring.application.name}

参考

Actuator + Prometheus + Grafana搭建微服务监控平台

Prometheus-Consul-Api

prometheus报错Error refreshing service Unexpected response code: 503解决办法

基于docker 搭建Prometheus+Grafana

SpringCloud使用Prometheus监控(基于Eureka)

Spring Cloud 集成 Prometheus Grafana

基于Prometheus搭建SpringCloud全方位立体监控体系

Prometheus Configuration



推荐阅读
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
author-avatar
mobiledu2502875577
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有