docker - prometheus+grafana监控与集成到spring boot 服务

一、Prometheus 介绍

1.数据收集器,它以配置的时间间隔定期通过HTTP提取指标数据。
2.一个时间序列数据库,用于存储所有指标数据。
3.一个简单的用户界面,您可以在其中可视化,查询和监视所有指标。

二、Grafana 介绍

Grafana 是一款采用 go 语言编写的开源应用,允许您从Elasticsearch,Prometheus,Graphite,InfluxDB等各种数据源中获取数据,并通过精美的图形将其可视化。

在这里插入图片描述

除了Prometheus的AlertManager 可以发送报警,Grafana 同时也支持告警。Grafana 可以无缝定义告警在数据中的位置,可视化的定义阈值,并可以通过钉钉、email等平台获取告警通知。最重要的是可直观的定义告警规则,不断的评估并发送通知。

由于Grafana alert告警比较弱,大部分告警都是通过Prometheus Alertmanager进行告警.
请注意Prometheus仪表板也具有简单的图形。 但是Grafana的图形化要好得多。

三、Alertmananger

Prometheus 监控平台中除了负责采集数据和存储,还能定制事件规则,但是这些事件规则要实现告警通知的话需要配合Alertmanager 组件来完成。

AlertManager 支持告警分组(将多个告警合并一起发送)、告警抑制以及告警静默(同一个时间段内不发出重复的告警)功能。
在这里插入图片描述

四、监控Java 应用
监控模式
目前,监控系统采集指标有两种方式,一种是『推』,另一种就是『拉』:

推的代表有 ElasticSearch,InfluxDB,OpenTSDB 等,需要你从程序中将指标使用 TCP,UDP 等方式推送至相关监控应用,只是使用 TCP 的话,一旦监控应用挂掉或存在瓶颈,容易对应用本身产生影响,而使用 UDP 的话,虽然不用担心监控应用,但是容易丢数据。

拉的代表,主要代表就是 Prometheus,让我们不用担心监控应用本身的状态。而且可以利用 DNS-SRV 或者 Consul 等服务发现功能就可以自动添加监控。

如何监控
Prometheus 监控应用的方式非常简单,只需要进程暴露了一个用于获取当前监控样本数据的 HTTP 访问地址。这样的一个程序称为Exporter,Exporter 的实例称为一个 Target 。Prometheus 通过轮训的方式定时从这些 Target 中获取监控数据样本,对于应用来讲,只需要暴露一个包含监控数据的 HTTP 访问地址即可,当然提供的数据需要满足一定的格式,这个格式就是 Metrics 格式.

metric name>{<label name>=<label value>, ...}

主要分为三个部分,各个部分需符合相关的正则表达式

1.metric name:指标的名称,主要反映被监控样本的含义 a-zA-Z_:*_
2.label name: 标签 反映了当前样本的特征维度 [a-zA-Z0-9_]*
3.label value: 各个标签的值,不限制格式

需要注意的是,label value 最好使用枚举值,而不要使用无限制的值,比如用户 ID,Email 等,不然会消耗大量内存,也不符合指标采集的意义。

五、MicroMeter 介绍
前面简述了Prometheus 监控的原理。那么我们的Spring Boot 应用怎么提供这样一个 HTTP 访问地址,提供的数据还得符合上述的 Metrics 格式 ?

还记得吗,在Spring Boot Actuator 模块 详解:健康检查,度量,指标收集和监控中,我有提到过Actuator 模块也可以和一些外部的应用监控系统整合,其中就包括Prometheus 。那么Spring Boot Actuator 怎么让 Spring Boot 应用和Prometheus 这种监控系统结合起来呢?

这个桥梁就是Micrometer。Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可。Micrometer 会负责完成与不同监控系统的适配工作。
在这里插入图片描述

一、docker 安装prometheus

1.1、创建挂载目录

mkdir -p /opt/prometheus/{etc,data,rules}

在这里插入图片描述

1.2、下载指定版本的prometheus镜像

可以直接去 docker hub 上面去下载 prometheus 镜像,我选择的是 v2.45.0版本

在这里插入图片描述

docker pull prom/prometheus:v2.45.0

在这里插入图片描述

1.3、创建模板配置文件

位置就是我们之前创建的目录 etc 目录下,scrape_configs具体内容可以先不了解,后续我们还是需要修改的,那时会详细说明。

vim /opt/prometheus/etc/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']

1.4、部署启动

1、分别挂载对应的数据目录

docker run -d -p 32440:9090 --name prometheus \
-v /opt/prometheus/etc/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /opt/prometheus/rules:/etc/prometheus/rules \
-v /opt/prometheus/data:/data/prometheus \
prom/prometheus:v2.45.0 \
--config.file="/etc/prometheus/prometheus.yml" \
--storage.tsdb.path="/data/prometheus" \
--web.listen-address="0.0.0.0:9090"

其中
–config.file 参数是指定 【容器内部的配置文件位置】 ,这样我们再将 【容器内部的配置文件位置】 给映射到外部 即可
–storage.tsdb.path 参数是指定 【容器内部的数据文件位置】 ,这样我们再将 【容器内部的数据文件位置】 给映射到外部 即可

在这里插入图片描述

2、启动之后会发现启动失败,我们查看一下日志,可以知道是没有权限创建 /data/prometheus/queries.active文件,我们直接给我们的宿主机的这个数据存储目录权限即可

这个问题分析可以查看该片文章 解决 Docker 安装 Prometheus 启动报 permission denied 的问题

在这里插入图片描述

# 修改文件权限
chmod 777 /opt/prometheus/data
# 重启prometheus 即可
docker restart  prometheus

在这里插入图片描述

1.5、web 访问

访问开发出来的端口即可

http://192.168.160.150:32440

在这里插入图片描述

二、docker 安装 Grafana

2.1、找到对应需要的版本,拉取镜像

我这里就拉取 9.4.13 版本了。
在这里插入图片描述

docker pull grafana/grafana:9.4.13

在这里插入图片描述

2.2、创建存储目录,运行镜像

# 创建存储目录
mkdir /opt/grafana
# 运行 grafana 镜像
 docker run -d   -p 32540:3000 --name=grafana   -v /opt/grafana:/var/lib/grafana   grafana/grafana:9.4.13

在这里插入图片描述
1、会发现启动时失败,查看日志,了解和前面创建 prometheus 一样,都是数据挂载目录的权限问题,我们直接修改文件权限即可

在这里插入图片描述

# 修改文件权限
chmod 777 /opt/grafana
# 重启prometheus 即可
docker restart  grafana

2.3、访问web

1、访问32540端口,即可
2、账号密码,默认 admin admin ,登录成功后,会需要你修改密码

在这里插入图片描述

2.4、创建数据源

1、这里的数据源选择我们创建的 prometheus
在这里插入图片描述
2、选择 prometheus
在这里插入图片描述
3、这里的prometheus的地址,写宿主机的地址和docker 暴露出来的端口

下面还有具体的其它配置,比如你的prometheus配置了http的账号密码,你都可以选择去配置。

在这里插入图片描述

4、滑动滚轮到最下面,有一个 保存测试的按钮,我们点击,会弹出数据源正在工作,即证明我们配置成功.

在这里插入图片描述

5、这个时候,我们的数据源列表,就存在了刚刚配置的 prometheus的数据源了.

在这里插入图片描述

2.5、配置视图

1、点击我们的prometheus数据源,去配置画板,我么选择 2.0的数据展示画板

在这里插入图片描述

2、查看我们的画板,点击进去,就能看到一部分的数据了。
在这里插入图片描述
在这里插入图片描述

2.6、grafana好用免费的官方模板地址

Grafana Dashboards

在这里插入图片描述

三、展示服务器监控数据 ( 使用Node Exporter采集主机运行数据 )

1、目前我们已经搭建好了 prometheusgrafana,那么现在我们先去展示服务器监控数据

2、因为我们我们知道 prometheus需要被监控的服务提供一个暴露的http的检测数据接口,prometheus才能去定时拉取暴露的数据,所以我们现在想要监控,服务器,那我们也需要为服务器指标信息来提供 http的接口,这个已经有了对应的插件,我们可以直接来 运行,挂载到 宿主机的指定目录,这里它就会暴露出对应的指标http接口

3.1、选择镜像版本,拉取

我这里就选择 v1.6.0 版本了

docker pull prom/node-exporter:v1.6.0


在这里插入图片描述

3.2、运行镜像

1、这里要说明一点就是,对于 linux 服务器的性能参数,其实都会以文件的形式存在在本地,所以我们只需要挂载对应的目录即可

大家可以去了解一下 netdata 的镜像部署,对应挂载的目录都是linux的性能数据目录,会比较的多

# 其中的参数 ro  是说明 在挂载命令中指定读写(read-write,rw)或只读(read-only,ro)权限,所以目前挂载的数据目录只能读取,保证安全性
docker run -d   -p 32640:9100 --name=node-exporter   -v "/proc:/host/proc:ro"   -v "/sys:/host/sys:ro"   -v "/:/rootfs:ro"   prom/node-exporter:v1.6.0

在这里插入图片描述

3.3、访问web

访问 32640 端口即可

在这里插入图片描述

3.4、配置监控信息

1、修改 prometheus 的配置文件,并重启

在这里插入图片描述

2、修改内容如下

在这里插入图片描述

3、最后展示如下,我们可以看到,已经有两个我们刚刚配置的实力信息了。

在这里插入图片描述

3.4、配置监控信息在 grafana 面板中展示

1、对于 node-exporter ,grafana 的画板库里面已经有了很多基础的,我们直接使用导入一个模板就行,就和前面观察prometheus 一样,
在这里插入图片描述
2、直接选择 8919 这个模板的 ID 模板即可
在这里插入图片描述
在这里插入图片描述

3、配置基础信息,修改完成,点击 import 按钮
在这里插入图片描述
4、数据信息如下

在这里插入图片描述

四、展示 springBoot 项目监控数据

4.1、内置监控数据

4.1.1、引入依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- Micrometer Prometheus registry  -->
		<dependency>
		    <groupId>io.micrometer</groupId>
		    <artifactId>micrometer-registry-prometheus</artifactId>
		</dependency>

4.1.2、yml配置

1、主要是 management 部分的,该部分的配置是 spring-boot-starter-actuator 依赖提供的

如下配置,就暴露出了 127.0.0.1:50000/actuator/prometheus 接口,可以让prometheus 来获取

server:
  port: 9063

management:
  server:
    #address: 127.0.0.1 # 启动额外ip,默认使用项目ip调用
    port: 50000   # 启用独立运维端口,默认使用项目端口调用
  endpoints:
    web:
      base-path: /actuator   # 指定上下文路径,启用相应端点,后续相关请求需要加上该前缀,你看下面的请求url就知道了
      exposure:
        # /actuator/prometheus  调用方式如下:
        # curl -X GET 127.0.0.1:50000/actuator/prometheus
        include: ["prometheus"]  # 这里是一个set集合

2、 其中配置 include: ["prometheus"],spring-boot-starter-actuator 依赖其实包含了很多,prometheus 只是其中一个指标,比如 include: ["shutdown"] ,那么会暴露出 127.0.0.1:50000/actuator/prometheus/shutdown 接口,这个是用做 springboot 关机的接口,当然大家可以写成 include: ["*"] 那就会暴露出所有的接口,如下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

具体可以参考 文章 Spring Boot之 Actuator监控(各个接口介绍)

3、启动项目,我们访问该接口,就可以看到 spring-boot-starter-actuator 依赖提供的暴露信息

在这里插入图片描述

4.1.3、修改prometheus,增加我们的项目接口

1、找到 prometheus 的配置文件,将我们上面暴露出来的接口添加进去

在这里插入图片描述
2、其中地址我写成我win的ip了,这样方便一些,不用把项目再部署到linux中,大家记得改成自己对应的ip即可,还有增加了参数 metrics_path

在这里插入图片描述

3、重启 prometheus项目

在这里插入图片描述

4、查看web ,已经正式上去了
在这里插入图片描述

4.1.4、增加 grafana 图表展示

1、这里就是去找模板了,和前面差不多

但是你也可以直接写自己想要展示的数据规则不使用现成的模板,后面自定义的时候会说

在这里插入图片描述

2、这里可以选择 输入4701 或 12271 [推荐] ,这两个模板,都还ok

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.2、自定义埋点上报监控数据

1、todo ,抽空补上

五、Docker Prometheus AlertManager webhook 报警

1、todo ,抽空补上

5.1、部署

1、todo ,抽空补上

5.2、配置钉钉机器人

1、todo ,抽空补上

六、总结

最后所有的画板都在
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot + Vue项目中配置应用监控,可以使用Spring Boot Actuator来提供监控功能,同时结合PrometheusGrafana等工具来实现监控数据的可视化。具体步骤如下: 1. 在Spring Boot项目中引入Actuator依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ``` 2. 配置Actuator的端点暴露: 在application.properties或application.yml文件中增加如下配置,以开放所有Actuator端点: ```yaml management: endpoints: web: exposure: include: "*" ``` 3. 启动Spring Boot应用,并访问Actuator的端点: 启动Spring Boot应用后,可以通过访问http://localhost:8080/actuator来查看所有Actuator的端点列表。例如,可以访问http://localhost:8080/actuator/health来查看应用的健康状况。 4. 配置Prometheus的数据采集: 在Spring Boot应用中集成Prometheus,可以使用Spring Boot Actuator提供的spring-boot-starter-actuator和micrometer-registry-prometheus依赖。具体步骤如下: 在pom.xml文件中增加如下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.1.1</version> </dependency> ``` 在application.properties或application.yml文件中增加如下配置: ```yaml management: metrics: export: prometheus: enabled: true ``` 5. 配置Grafana的数据展示: 在Spring Boot应用中集成Grafana,可以使用docker-compose等工具来进行配置。具体步骤如下: 在docker-compose.yml文件中增加如下配置: ```yaml version: '3' services: prometheus: image: prom/prometheus:v2.26.0 ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' grafana: image: grafana/grafana:8.1.5 ports: - 3000:3000 volumes: - ./grafana.ini:/etc/grafana/grafana.ini - ./provisioning:/etc/grafana/provisioning - grafana-data:/var/lib/grafana volumes: grafana-data: ``` 其中,prometheus.yml文件中需要配置对应的监控数据采集地址。grafana.ini文件中需要配置对应的数据源和仪表盘等信息。provisioning目录下可以放置对应的数据源和仪表盘等信息。 6. 启动PrometheusGrafana容器: 在命令行中执行如下命令,启动PrometheusGrafana容器: ```bash docker-compose up -d ``` 7. 在Grafana中导入仪表盘: 在Grafana中可以通过导入仪表盘的方式来展示监控数据。可以在Grafana仪表盘库中搜索Prometheus相关的仪表盘,并进行导入和配置。具体步骤可以参考Grafana的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值