首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot实战之prometheus监控整合

springboot实战之prometheus监控整合

作者头像
lyb-geek
发布2019-12-13 16:08:15
6.8K0
发布2019-12-13 16:08:15
举报
文章被收录于专栏:Linyb极客之路Linyb极客之路

前言

在介绍springboot如何与prometheus整合监控之前,先介绍几个待会整合会用到的工具。

prometheus

1、什么是prometheus

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本

2、prometheus的特点

  • 多维度数据模型
  • 灵活的查询语言
  • 不依赖分布式存储,单个服务器节点是自主的
  • 通过基于HTTP的pull方式采集时序数据
  • 可以通过中间网关进行时序列数据推送
  • 通过服务发现或者静态配置来发现目标服务对象
  • 支持多种多样的图表和界面展示,比如Grafana等

3、prometheus集成的组件

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

4、prometheus架构图

5、prometheus适用场景

prometheus在记录纯数字时间序列方面表现非常好。它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。它的搭建过程对硬件和服务没有很强的依赖关系。

6、prometheus不适用场景

prometheus重视可靠性。即使在故障情况下,您也始终可以查看有关系统的可用统计信息。如果您需要100%的准确性(例如按请求计费),则prometheus并不是一个不错的选择,因为所收集的数据可能不会足够详细和完整。在这种情况下,最好使用其他系统来收集和分析计费数据,并使用prometheus进行其余的监视。

7、prometheus安装

可以查看之前我的一篇文章:运维监控之Prometheus入门安装篇

8、prometheus监控告警

prometheus的警报分为两个部分。prometheus服务器中的警报规则将警报发送到Alertmanager。然后,警报管理器通过电子邮件,通话通知系统和聊天平台等方法管理这些警报,包括静默,禁止,聚合和发出通知。

设置警报和通知的主要步骤是:

  1. 设置和配置Alertmanager
  2. 配置prometheus与Alertmanager对话
  3. 在prometheus中创建警报规则

9、prometheus安装Alertmanager集成

因为篇幅关系,prometheus 安装Alertmanager集成可以参考如下链接进行安装

https://www.cnblogs.com/xiangsikai/p/11289757.html

Grafana

1、什么是Grafana

Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。Grafana允许您查询,可视化,警报和了解指标,无论它们存储在哪里

2、Grafana的特点

  • 可视化:快速和灵活的客户端图形具有多种选项。面板插件为许多不同的方式可视化指标和日志。
  • 报警:可视化地为最重要的指标定义警报规则。Grafana将持续评估它们,并发送通知。
  • 通知:警报更改状态时,它会发出通知。接收电子邮件通知。
  • 动态仪表盘:使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。
  • 混合数据源:在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。
  • 注释:注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。
  • 过滤器:过滤器允许您动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。

3、Grafana安装

Grafana官网有提供很详细的安装教程,安装可以查看如下链接,本文就不再论述

https://grafana.com/docs/installation/rpm/

micrometer

1、什么是micrometer

micrometer号称监控界的SLF4J,主要用来以极低极低的消耗来给Java程序提供对指标的监控。micrometer为 Java平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可。micrometer会负责完成与不同监控系统的适配工作。这就使得切换监控系统变得很容易。micrometer还支持推送数据到多个不同的监控系统。

2、micrometer的核心组成模块

  • 包含数据收集 SPI 和基于内存的实现的核心模块 micrometer-core。
  • 针对不同监控系统的实现模块,如针对 Prometheus 的 micrometer-registry-prometheus。
  • 与测试相关的模块 micrometer-test。

正文

springboot整合prometheus

1、整合的前置条件

服务器上已经安装了prometheus、grafana、alertmanager(可选)。本文的安装使用docker-compose来构建相关服务,具体的安装过程可以参考如下文章

https://blog.51cto.com/msiyuetian/2369130

如果懒得看,也可以拿我已经准备好的脚本,扔到服务器上执行吧,相关的脚本可以查看如下链接

http://1t.click/beth

2、pom.xml

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
  </dependencies>

3、application.yml

management:
  endpoints:
    web:
      exposure:
        include: '*'
spring:
  application:
    name: springboot_prometheus

4、prometheus.yml中配置需要采集的服务

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']
  - job_name: 'springboot-prometheus'
    metrics_path: '/actuator/prometheus'
    static_configs:
    - targets: ['localhost:8081']

5、编写告警规则

本文以服务宕机超过一分钟就进行告警为例

groups:
- name: node_down
  rules:
  - alert: InstanceDown
    expr: up == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

6、在prometheus.yml中引入告警规则文件路径node_down.yml

注:node_down.yml和prometheus.yml配置在同一目录下

rule_files:
  - "node_down.yml"

7、在alertmanager.yml中配置通知告警

注:本文以邮件通知告警为例

global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_from: 'xxx@qq.com'
  smtp_auth_username: 'xxx@qq.com'
  smtp_auth_password: '这个不是填邮箱密码,而是qq授权码'
  smtp_require_tls: false
  smtp_hello: 'qq.com'


route:
  group_interval: 1m
  repeat_interval: 1m
  receiver: 'mail-receiver'
receivers:
- name: 'mail-receiver'
  email_configs:
    - to: 'xxx@qq.com'

注:qq授权码获取如下

打开QQ邮箱-设置-账户-帐户安全-开启服务-POP3/SMTP服务-生成授权码-发个短信

8、在prometheus.yml中配置告警服务

alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - localhost:9093

9、grafana上配置prometheus数据库

  1. 通过http://localhost:3000/login访问grafana,其默认登录用户名和密码都是admin
  2. 通过grafana界面添加prometheus数据库

10、配置grafana界面上需要展示的dashborad

a、通过访问https://grafana.com/grafana/dashboards这个链接去挑选dashborad,比如下图

b、点击grafana上的import按钮,并填入访问https://grafana.com/grafana/dashboards得来的编号,比如

c、选择我们刚才配置好的prometheus数据库,点击import

d、dashborad展示

11、告警

首先关闭服务,然后通过访问http://localhsot:9091/alerts,可以看到如下

说明我们配置的告警规则生效,现在有个实例宕机了

11、告警

通过访问http://localhost:9093/#/alerts,可以看到如下信息

ps:图中马赛克为我的服务ip+端口

打开接收告警的邮箱,会收到默认的告警邮件信息,如下图

自定义埋点监控

有时候我们想要做一些自定义指标监控,比如登录在线人数啥的,这时候我们可以通过Prometheus提供的指标来进行自定义监控。prometheus的指标类型有如下几种

Counter

Counter类型代表一种样本数据单调递增的指标,即只增不减,除非监控系统发生了重置

Guage

Guage类型代表一种样本数据可以任意变化的指标,即可增可减

Histogram

Histogram 由bucket{le=""},bucket{le="+Inf"},sum,count 组成,主要用于表示一段时间范围内对数据进行采样(通常是请求持续时间或响应大小),并能够对其指定区间以及总数进行统计,通常它采集的数据展示为直方图。

Summary

Summary 和 Histogram 类似,由{quantile="<φ>"},sum,count 组成,主要用于表示一段时间内数据采样结果(通常是请求持续时间或响应大小),它直接存储了 quantile 数据,而不是根据统计区间计算出来的。

本文就以counter来实现一个统计api接口请求次数的监控

1、编写自定义counter

@Component
public class HttpConterHelper {

  private final Counter counter;

  public HttpConterHelper(MeterRegistry registry) {
    this.counter = registry.counter("custom_api_http_requests_total");
  }

  public void count() {
    this.counter.increment();
  }

}

2、编写接口统计拦截器

@Slf4j
public class PrometheusInterceptor implements HandlerInterceptor {

  @Autowired
  private HttpConterHelper httpConterHelper;

  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
      Object handler, Exception ex) throws Exception {

    httpConterHelper.count();
  }
}
@Configuration
public class IntercepterConfig implements WebMvcConfigurer {

  @Bean
  public PrometheusInterceptor prometheusInterceptor() {

    return new PrometheusInterceptor();
  }

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(prometheusInterceptor()).addPathPatterns("/**");

  }
}

3、访问http://localhost:8081/actuator/prometheus,查看自定义counter是否配置成功

ps:那个7.0代表访问接口的次数

4、通过grafana展示自定义指标

a、点击仪表盘上的Add panel

b、选择add Query

c、metrics填写相应的PromQL

ps:如果对PromQL不熟悉可以查看如下链接(第一个是官网的例子,第二个是其他网友整理的例子)

https://prometheus.io/docs/prometheus/latest/querying/examples/ 或者https://www.jianshu.com/p/3bdc4cfa08da

d:dashborad展示

总结

springboot与prometheus整合就先讲那么多,本文的springboot版本是使用2版本,springboot2默认已经集成micrometer了,所以使用上基本上就是开箱即用,如果是springboot1版本,其集成可以参考如下链接

https://micrometer.io/docs/ref/spring/1.5.

其次如果自定义监控指标的话,除了上述的使用拦截器的方式,还可以采用自定义注解加AOP来等方式来实现。然后本文的监控告警规则配置以及告警基本上都是入门级别的,对这块内容感兴趣的朋友,可以参考如下链接

https://prometheus.io/docs/alerting/notification_examples/

参考文档

https://prometheus.io/ https://grafana.com https://micrometer.io/

docker-compose快速搭建 Prometheus+Grafana监控系统

https://blog.51cto.com/msiyuetian/2369130

Grafana的介绍与使用

https://www.jianshu.com/p/0d82c7ccc85a

使用Micrometer记录Java应用性能指标

https://www.ibm.com/developerworks/cn/java/j-using-micrometer-to-record-java-metric/index.html

demo链接

https://github.com/lyb-geek/springboot-learning/tree/master/springboot-prometheus

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • prometheus
      • Grafana
        • micrometer
        • 正文
          • springboot整合prometheus
            • 自定义埋点监控
            • 总结
            • 参考文档
            • demo链接
            相关产品与服务
            Grafana 服务
            Grafana 服务(TencentCloud Managed Service for Grafana,TCMG)是腾讯云基于社区广受欢迎的开源可视化项目 Grafana ,并与 Grafana Lab 合作开发的托管服务。TCMG 为您提供安全、免运维 Grafana 的能力,内建腾讯云多种数据源插件,如 Prometheus 监控服务、容器服务、日志服务 、Graphite 和 InfluxDB 等,最终实现数据的统一可视化。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档