springboot 接口404_资深架构带你学习Springboot集成普罗米修斯

这篇文章主要介绍了springboot集成普罗米修斯(Prometheus)的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!

Prometheus 是一套开源的系统监控报警框架。它由工作在 SoundCloud 的 员工创建,并在 2015 年正式发布的开源项目。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,非常的受欢迎。

简介

Prometheus 具有以下特点:

  • 一个多维数据模型,其中包含通过度量标准名称和键/值对标识的时间序列数据
  • PromQL,一种灵活的查询语言,可利用此维度
  • 不依赖分布式存储; 单服务器节点是自治的
  • 时间序列收集通过HTTP上的拉模型进行
  • 通过中间网关支持推送时间序列
  • 通过服务发现或静态配置发现目标
  • 多种图形和仪表板支持模式

Prometheus 组成及架构

Prometheus 生态圈中包含了多个组件,其中许多组件是可选的:

  • Prometheus Server: 用于收集和存储时间序列数据。
  • Client Library: 客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。
  • Push Gateway: 主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。
  • Exporters: 用于暴露已有的第三方服务的 metrics 给 Prometheus。
  • Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等一些其他的工具。
4012689ab6d8deb604597d298bc1cd8f.png

其大概的工作流程是:

1.Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。


2.Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。


3.Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。


4.在图形界面中,可视化采集数据。

springboot 集成prometheus

在spring boot工程中引入actuator的起步依赖,以及micrometer-registry-prometheus的依赖。

org.springframework.boot     spring-boot-starter-weborg.springframework.boot        spring-boot-starter-actuatorio.micrometer        micrometer-registry-prometheus

暴露prometheus的接口;暴露metrics.tags,和spring.application.name一致。

server: port: 8081spring: application:  name: my-prometheusmanagement: endpoints:  web:   exposure:    include: 'prometheus' metrics:  tags:   application: ${spring.application.name}

写一个API接口,用作测试。代码如下:

@RestControllerpublic class TestController {  Logger logger = LoggerFactory.getLogger(TestController.class);   @GetMapping("/test")  public String test() {    logger.info("test");    return "ok";  }   @GetMapping("")  public String home() {    logger.info("home");    return "ok";  }}

在浏览器上访问http://localhost:8081/actuator/prometheus,展示的信息如下,这些信息都是actuator的一些监控信息。

# HELP jvm_gc_max_data_size_bytes Max size of old generation memory pool# TYPE jvm_gc_max_data_size_bytes gaugejvm_gc_max_data_size_bytes{application="my-prometheus",} 2.863661056E9# HELP http_server_requests_seconds # TYPE http_server_requests_seconds summaryhttp_server_requests_seconds_count{application="my-prometheus",exception="None",method="GET",outcome="CLIENT_ERROR",status="404",uri="/**",} 1.0http_server_requests_seconds_sum{application="my-prometheus",exception="None",method="GET",outcome="CLIENT_ERROR",status="404",uri="/**",} 0.018082327# HELP http_server_requests_seconds_max # TYPE http_server_requests_seconds_max gaugehttp_server_requests_seconds_max{application="my-prometheus",exception="None",method="GET",outcome="CLIENT_ERROR",status="404",uri="/**",} 0.018082327# HELP jvm_threads_states_threads The current number of threads having NEW state# TYPE jvm_threads_states_threads gaugejvm_threads_states_threads{application="my-prometheus",state="waiting",} 12.0jvm_threads_states_threads{application="my-prometheus",state="runnable",} 8.0jvm_threads_states_threads{application="my-prometheus",state="timed-waiting",} 2.0jvm_threads_states_threads{application="my-prometheus",state="terminated",} 0.0jvm_threads_states_threads{application="my-prometheus",state="blocked",} 0.0jvm_threads_states_threads{application="my-prometheus",state="new",} 0.0# HELP process_files_open_files The open file descriptor count# TYPE process_files_open_files gauge...省略更多

安装Prometheus

安装Prometheus很简单,在linux系统上安装,执行以下的安装命令。其他的操作系统,比如windows、mac等在官网上(https://prometheus.io/download/)下载并安装。

23 wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.darwin-amd64.tar.gztar xvfz prometheus-*.tar.gzcd prometheus-* 

修改Prometheus的配置文件prometheus.yml,代码如下:

global: scrape_interval:   15s # By default, scrape targets every 15 seconds.  # Attach these labels to any time series or alerts when communicating with # external systems (federation, remote storage, Alertmanager). external_labels:  monitor: 'codelab-monitor' # 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=` to any timeseries scraped from this config. - job_name: 'prometheus'   # Override the global default and scrape targets from this job every 5 seconds.  scrape_interval: 5s   static_configs:   - targets: ['localhost:9090'] - job_name: 'springboot_prometheus'  scrape_interval: 5s  metrics_path: '/actuator/prometheus'  static_configs:   - targets: ['127.0.0.1:8081']
  • config.job_name,配置job的名称
  • config.scrape_interval,配置多久抓一次监控信息
  • config.metrics_path,获取监控信息的接口
  • config.static_configs.targets配置获取监控信息的地址。

使用以下的命令启动prometheus,并通过–config.file指定配置文件

./prometheus --config.file=prometheus.yml

多次请求springboot项目的接口http://localhost:8081/test , 并访问prometheus的控制台http://localhost:9090/,展示的界面如下:

b40b6538eb5d69fb32f4bc7e3092e56d.png

prometheus提供了一些可视化图,比如使用柱状图来展示每秒请求数:

998b6b548891c58b3ca2b70cfc9b5544.png

安装grafana

grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。使用grafana去展示prometheus上的数据。先安装,安装命令如下:

wget https://dl.grafana.com/oss/release/grafana-7.0.4.darwin-amd64.tar.gztar -zxvf grafana-7.0.4.darwin-amd64.tar.gz./grafana-server

访问http://localhost:3000/,初始密码:admin/admin。

配置数据源,如图:

062410da7ec093c1f07f2865f83d9fb9.png

配置prometheus的地址:http://localhost:9090 ,如图所示:

320da98f9878261d568171489d6de60d.png

在dashboard界面新建panel,展示的metrics为http_server_request_seconds_count,即展示了以时间为横轴,请求数为纵轴的请求曲线,如图所示:

6eaae4874919bf885a216d916b2d8185.png

到此这篇关于文章就结束了!

总结

另外本人整理了一些spring的视频资料,一共有8集,以及一些Java的学习视频以及资料,免费分享给大家,想要资料的可以点赞关注私信 ‘资料’ 即可免费领取。深入底层,剖析源码。了解本质。 爱编程,爱生活,爱分享!

30b9cf3f0c0140fb10291626b649e017.png

希望对大家有所帮助,有用的话点赞给我支持!

f1f799be32f2676f5dde41a85852eaff.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值