Prometheus+Grafana实现SpringCloud服务监控

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 背景: 由于项目上使用spring cloud,需要对一些服务指标就需要进行监控,以便于时刻了解各服务的运行状态。经过搜索材料,发现大多方案直接推荐用微服务最佳实践者——Netflix开源的方案(Atlas+Grafana),试着跟着搜索到的一些资料,并进行了尝试,结果表明成功案例都是在SpringBoot1.x上的;在SpringBoot2.x上,尚无资料表示成功使用上Atlas这方案。

背景:

由于项目上使用spring cloud,需要对一些服务指标就需要进行监控,以便于时刻了解各服务的运行状态。经过搜索材料,发现大多方案直接推荐用微服务最佳实践者——Netflix开源的方案(Atlas+Grafana),试着跟着搜索到的一些资料,并进行了尝试,结果表明成功案例都是在SpringBoot1.x上的;在SpringBoot2.x上,尚无资料表示成功使用上Atlas这方案。

另外,在研究的过程中,发现SpringBoot2.x上已引入第三方实现的metrics Facade(micrometer.io,可以同日志的Facade框架Sl4j等同理解,并已覆盖Atlas、Datadog、Ganglia、Graphite、Influx、JMX、NewRelic、Prometheus、SignalFx、StatsD、Wavefront等业内主流的tsdb实现)。再者,项目最终需要应用kubernetes来进行容器编排,其官方推荐的容器监控服务,就是用Prometheus配上Grafana作为监 控展现;为了统一,就转身到Prometheus+Grafana这方案上来。

0. 环境说明:

Ubuntu 16.04

Spring Boot 2.0.0.RELEASE

初识Prometheus:

Prometheus 是由 SoundCloud 开源监控告警解决方案,从 2012 年开始编写代码,再到 2015 年 github 上开源以来,已经吸引了 9k+ 关注,以及很多大公司的使用;2016 年 Prometheus 成为继 k8s 后,第二名 CNCF(Cloud Native Computing Foundation) 成员。

作为新一代开源解决方案,很多理念与 Google SRE 运维之道不谋而合。

主要功能

  • 多维 数据模型(时序由 metric 名字和 k/v 的 labels 构成)。
  • 灵活的查询语句(PromQL)。
  • 无依赖存储,支持 local 和 remote 不同模型。
  • 采用 http 协议,使用 pull 模式,拉取数据,简单易懂。
  • 监控目标,可以采用服务发现或静态配置的方式。
  • 支持多种统计数据模型,图形化友好。

核心组件

  • Prometheus Server, 主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 配置管理。
  • client libraries,用于对接 Prometheus Server, 可以查询和上报数据。
  • push gateway ,用于批量,短期的监控数据的汇总节点,主要用于业务数据汇报等。
  • 各种汇报数据的 exporters ,例如汇报机器数据的 node_exporter, 汇报 MongoDB 信息的 MongoDB exporter 等等。
  • 用于告警通知管理的 alertmanager

基础架构

从这个架构图,也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。

大致使用逻辑是这样:

  1. Prometheus server 定期从静态配置的 targets 或者服务发现的 targets 拉取数据。
  2. 当新拉取的数据大于配置内存缓存区的时候,Prometheus 会将数据持久化到磁盘(如果使用 remote storage 将持久化到云端)。
  3. Prometheus 可以配置 rules,然后定时查询数据,当条件触发的时候,会将 alert 推送到配置的 Alertmanager。
  4. Alertmanager 收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。
  5. 可以使用 API, Prometheus Console 或者 Grafana 查询和聚合数据。

注意

  • Prometheus 的数据是基于时序的 float64 的值,如果你的数据值有更多类型,无法满足。
  • Prometheus 不适合做审计计费,因为它的数据是按一定时间采集的,关注的更多是系统的运行瞬时状态以及趋势,即使有少量数据没有采集也能容忍,但是审计计费需要记录每个请求,并且数据长期存储,这个 Prometheus 无法满足,可能需要采用专门的审计系统。

了解更多知识,可以到这里了解:Prometheus实战

Spring cloud应用的配置改动

  • pom.xml 加入相关包依赖依赖 :
<dependency>  <groupId>io.micrometer</groupId>  <artifactId>micrometer-core</artifactId>  <version>1.0.5</version> </dependency> <dependency>  <groupId>io.micrometer</groupId>  <artifactId>micrometer-registry-prometheus</artifactId>  <version>1.0.5</version>  <exclusions>  <exclusion> <!-- 由于 micrometer-registry-prometheus 默认的core包是 1.0.1版本的,与当前的组件版本不适应,需要排除 -->  <groupId>io.micrometer</groupId>  <artifactId>micrometer-core</artifactId>  </exclusion>  </exclusions> </dependency>
  • 修改application.yml:
#服务治理配置
management:  security: # 仅限于 开发环境可对security进行关闭。  enabled: false  metrics:  export:  prometheus:  enabled: true  step: 1m
 descriptions: true  web:  server:  auto-time-requests: true  endpoints:  web:  exposure:  include: health,info,env,prometheus,metrics,httptrace,threaddump,heapdump

这里为了方便部署监控测试,把服务治理端的相关安全认证选项禁用掉。更多关于metrics的配置说明,请参考官方指引

关于endpoints,"prometheus"在本例中,是必须声明的项目,否则在后续配置prometheus的job时没有对应的uri可以提供。

由于prometheus是采用主动爬取的方式,所以在SpringCloud的应用里面,无需配置prometheus的服务地址和端口。这点(个人理解),是与Atlas、Ganglia、Graphite、Influx、JMX、StatsD、Wavefront等不同的。

接着启动你的应用,打开浏览器输入http://localhost:PORT/actuator/prometheus,正常情况下你就可以在页面上看到很多键值对(直接返回的是text):

Prometheus配置:

  • 安装:
    官网下载,根据你自己的操作系统选择版本,本例下载的是prometheus-2.3.1.linux-amd64.tar.gz。下载完,解压,找到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). # Alertmanager configuration
alerting:
 alertmanagers:
 - static_configs:
 - targets:
 # - alertmanager:9093 # 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: ['localhost:9090']

 # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
 - job_name: 'admin-service' # metrics_path defaults to '/metrics' # metrics_path: /actuator/metrics
 metrics_path: /actuator/prometheus
 # scheme defaults to 'http'.

 static_configs:
 - targets: ['localhost:8762']

说明:下载下来的配置文件,metrics_path是被注释的。在本例使用的是SpringBoot 2.0.0.RELEASE,默认监控类指标输出,都是在/actuator下。

所以,需要修改为”metrics_path: /actuator/prometheus“,且非注释。

  • 启动Prometheus:
    启动终端,进入到Prometheus的目录中,运行prometheus -config.file=prometheus.yml,启动成功后,在http://localhost:9090/targets你会看到你所监控的目标:

要看有哪些指标可以现成使用的,可以在Graph菜单下,那个下拉列表中查找:

你可以选中一个指标,然后execute,就可以看到一个简陋的图表,显示指标的数据:

增强配置

考虑到后续需要对同一个服务增加不用业务类型的监控,或者直接对同一个job应用到不同的host上时,采用static_configs的方式,是需要重启Prometheus服务的。

因此,通过研究,可以通过 file_sd_configs来替代static_configs:

(1). 注释 修改prometheus.yml文件:

 #static_configs: #- targets: ['localhost:8762'] file_sd_configs:
 - files:
 - /YOUR_HOME/softs/prometheus/configs/admin/*.json

(2). 在/YOUR_HOME/softs/prometheus/configs/admin/目录里,创建一个任意名字的json文件。本例是创建base.json文件。内容如下:

[
 {
 "targets": ["localhost:8762"]
 }
]

更多配置说明,请参考官方说明:file_sd_config

更好的监控UI——Grafana:

  • 安装:
    同样的进入官网下载,请根据你的操作系统下载。本例下载的版本是grafana_5.1.3_amd64.deb ,需要使用dpkg命令进行安装。安装过程如下:

    1. 非root用户 $ sudo dpkg -i grafana_5.1.3_amd64.deb

2. 启动服务: $ sudo systemctl start grafana-server

3. 访问http://localhost:3000你就会看到登录界面,默认的账户和密码都是admin

  • 配置:
    add datasource ,加上Prometheus的数据源配置。

接着我们新加入一个Dashboards:

新增一个Graph:

接着选择edit:

然后在metric中编辑数据源和指标,比如我们新增一个threads(线程数)的指标,完成后就可以看到美丽的图表了

本文转自掘金-Prometheus+Grafana实现SpringCloud服务监控

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
相关文章
|
18天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
99 3
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
121 60
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
210 62
|
8天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
37 3
|
8天前
|
Prometheus 监控 Cloud Native
在 HBase 集群中,Prometheus 通常监控哪些类型的性能指标?
在 HBase 集群中,Prometheus 监控关注的核心指标包括 Master 和 RegionServer 的进程存在性、RPC 请求数、JVM 内存使用率、磁盘和网络错误、延迟和吞吐量、资源利用率及 JVM 使用信息。通过 Grafana 可视化和告警规则,帮助管理员实时监控集群性能和健康状况。
|
19天前
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
53 2
|
17天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
83 0
|
3月前
|
Prometheus 监控 Cloud Native
【监控】prometheus传统环境监控告警常用配置
【监控】prometheus传统环境监控告警常用配置
【监控】prometheus传统环境监控告警常用配置
|
2月前
|
Prometheus 监控 Cloud Native
介绍如何使用Prometheus进行监控
介绍如何使用Prometheus进行监控
201 3
|
2月前
|
Prometheus 监控 Cloud Native
docker安装prometheus+Granfan并监控容器
【9月更文挑战第14天】本文介绍了在Docker中安装Prometheus与Grafana并监控容器的步骤,包括创建配置文件、运行Prometheus与Grafana容器,以及在Grafana中配置数据源和创建监控仪表盘,展示了如何通过Prometheus抓取数据并利用Grafana展示容器的CPU使用率等关键指标。