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

news2024/11/28 8:42:12

一、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 ,抽空补上

六、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/777827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android图形系统之ANativeWindow与Surface关系(十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Unity 之 错误的停止协程的方式

相信很多人都会这样开启一个协程 StartCoroutine(Cor_1()); 这样确实没啥毛病&#xff0c;那么怎么关掉这个协程呢&#xff0c;是不是在想也是一样的传cor_1()这个参数&#xff0c;然后start对应stop,试着输入stopCor....诶&#xff0c;代码提示有这个方法喔&#xff0c;然后…

【计算机网络】socket编程基础

文章目录 1. 源IP地址和目的IP地址2. 理解MAC地址和目的MAC地址3. 理解源端口号和目的端口号4. PORT与PID5. 认识TCP协议和UDP协议6. 网络字节序7. socket编程接口7.1 socket常见API7.2 sockaddr结构 1. 源IP地址和目的IP地址 因特网上的每台计算机都有一个唯一的IP地址&#…

windows命令之获取电脑已经连接过的wifi的密码

有时候想连接wifi不知道密码&#xff0c;恰巧电脑此时正连接着能用的wifi&#xff0c;想获取密码吗&#xff0c;使用下面这个指令&#xff1a;这个指令能获取历史连接的wifi的信息&#xff0c;密码也是之前连接的时候保存的密码&#xff0c;并不能获取某个wifi的正确密码 netsh…

Redis进阶(2)——Redis数据的持久化 CAP分布式理论(高可用性) Redis主从搭建 Redis的哨兵机制

目录 引出Redis数据的持久化RDB方式(redis database数据备份文件)RDB工作机制RDB优势和劣势RDB常用参数 AOF的方式&#xff08;命令追加&#xff09;AOF优缺点 Redis集群CAP理论 主从搭建(Master/Slave)主master的redis自定义docker静态网段创建文件上传redis.conf到conf文件夹…

物联网的介绍

目录 1.什么是物联网 2.物联网给人类带来的福利 3.学习物联网需要什么知识 4.物联网未来的发展趋势 5.物联网专业的就业前景 1.什么是物联网 物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;是指连接、交互和共享数据的各种物理设备、传感器、软件和…

你的语言是第几名?

2023年已经过半&#xff0c;最新一期的编程语言排行榜你看了吗&#xff1f;刚刚&#xff0c;全球知名编程语言社区TIOBE公布了7月榜单&#xff0c;一起来看吧&#xff01; TIOBE 7 月 TOP 15 编程语言&#xff1a; 详细榜单可参考官网&#xff1a; https://www.tiobe.com/tio…

进阶C语言——数据的存储

Hello&#xff0c;时间过的好快&#xff0c;从我一开始在csdn写的第一篇文章&#xff0c;距离现在已经过去一个多月了&#xff0c;我也在csdn收获了一些粉丝&#xff0c;你们的点赞就是我的动力&#xff0c;希望大家也越来越强&#xff0c;好了&#xff0c;进入我们的正题 &…

STL中的string类的模拟实现【C++】

文章目录 默认成员函数构造函数拷贝构造函数 赋值运算符重载函数析构函数beginendsizecapacityreserveeraseresizepush_backappendoperatorinsertswapsubstrc_stroperator[ ]findcleargetline>>运算符的重载<<运算符的重载 默认成员函数 构造函数 构造函数设置为…

^(按位异或)操作符详解

因为未知&#xff0c;所以全力以赴 目录 例1.实现两个数的交换 例2.找出单身狗 1.简单版 2.进阶版 大家好&#xff0c;我是纪宁。这篇博客介绍^操作符及使用案例。 位操作符是对操作数的二进制补码进行操作。^就是位操作符的一种&#xff0c;叫按位异或操作符。计算结果是…

【期末课程设计】学生成绩管理系统

因其独特&#xff0c;因其始终如一 文章目录 一、学生成绩管理系统介绍 二、学生成绩管理系统设计思路 三、源代码 1. test.c 2. Student Management System.c 3.Stu_System.c 4.Teacher.c 5.Student Management System.h 前言&#xff1a; 学生成绩管理系统含教师…

C语言每日一题:1.证明尼克彻斯定理。

思路1&#xff1a; 0.输入一个值作为n 1.假设输入的n4计算4^364. 2.因为他们都是连续的奇数可以把它写成另一种方法&#xff0c;每一个数之间相差2。 4^313(132)(134)(136); 3.64-(246)52–>52/4等于13 4.这样的话我们就找到了连续奇数的第一个数字。 //具体代码&#xff1a…

Selenium 修改 HTTP 请求头三种方式

目录 前言&#xff1a; 什么是 HTTP 请求头 需要更改 HTTP 请求请求头 Selenium 修改请求头 Java HTTP 请求框架 代码实战 使用反向代理 使用 Firefox 扩展 下载火狐浏览器扩展 加载火狐扩展 设置扩展首选项 设置所需的功能 完整自动化用例 前言&#xff1a; Sele…

USB转串行通信芯片FT2232

1 FT2232主要特性 1&#xff09;2232表示支持2个RS232。 2&#xff09;FT2232D最高支持full-speed&#xff0c;所以时钟是12MHz&#xff1b;而FT2232H最高支持high-speed&#xff0c;所以时钟是60MHz。 3&#xff09;FT2232的Port A和Port B会在Windows设备管理器的“通用串行总…

九、正则表达式详解:掌握强大的文本处理工具(一)

文章目录 &#x1f340;引言&#x1f340;正则表达式的基本语法&#x1f340;常用操作符&#x1f340;实例应用&#x1f340;具体操作演示 &#x1f340;引言 正则表达式(Regular Expression)是一种强大的文本处理工具&#xff0c;常用于搜索、匹配和替换操作。它使用一种特定的…

jenkins Transferred 0 file(s)问题

每次构建都都是成功&#xff0c;但是就没有就是没有传输过去文件 Transferred 0 file(s) 因为jenkins是容器启动&#xff0c;会考虑有没有可能是从容器ssh传输呢&#xff1f; &#xff08;如果不是容器启动得&#xff0c;就把源文件地址改成 相对路径就行&#xff09; 我就在容…

17.matlab数据分析多项式的积分(matlab程序)

1.简述 Matlab中对多项式进行积分 &#xff08;1&#xff09;多项式的微分操作由polyder函数实现 &#xff08;2&#xff09;MATLAB中没有专门的对多项式积分函数&#xff0c;但可以用[p./length(p):1:-1]的方法完成积分&#xff0c;k为常数 2.代码 clc; clear all; p1[2 6 8];…

​ jgliu的​博客推荐 rapidIO/DDR/SPI/I2C

在博客园中发现一位博主的文章质量比较高 作者&#xff1a; jgliu 这里贴几篇感兴趣的文章地址 1.rapidIO从基础到原理到实现都有很详细的介绍&#xff0c;虽然该高速接口在FPGA中用的较多&#xff0c;ASIC不常用&#xff0c;但通过rapidIO的学习 可以加深对高速接口的理解-…

二十四章:SEgmentation TRansformer (SETR)——以Transformer的序列到序列的视角重新思考语义分割问题

0.摘要 最近的语义分割方法采用了全卷积网络&#xff08;FCN&#xff09;和编码器解码器架构。编码器逐渐降低空间分辨率&#xff0c;并学习具有更大感受野的抽象/语义视觉概念。由于上下文建模对于分割是至关重要的&#xff0c;最新的研究工作将重点放在增加感受野上&#xff…

hadoop的分区学习

自定义分区实现&#xff1a; 抽象类 要自定义分区规则&#xff0c;就必须继承并且重写。 设置分区数量 driver类&#xff1a; job.setNumReduceTasks(3);job.setPartitionerClass(FlowPartitioner.class);分区方法类&#xff0c;直接用编号代替就好了 public class FlowParti…