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

六、总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes对象深入学习之四:对象属性编码实战

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 本文是《Kubernetes对象深入学习》系列的第四篇&#xff0c;前面咱们读源码和文档&#xff0c;从理论上学习了kubernetes的对象相关的知识&#xff…

spring复习:(50)@Configuration注解配置的singleton的bean是什么时候被创建出来并缓存到容器的?

一、主类&#xff1a; 二、配置类&#xff1a; 三、singleton bean的创建流程 运行到context.refresh(); 进入refresh方法&#xff1a; 向下运行到红线位置时&#xff1a; 会实例化所有的singleton bean.进入finisheBeanFactoryInitialization方法&#xff1a; 向下拖动代…

(双指针) 剑指 Offer 57 - II. 和为s的连续正数序列 ——【Leetcode每日一题】

❓ 剑指 Offer 57 - II. 和为s的连续正数序列 难度&#xff1a;简单 输入一个正整数 target &#xff0c;输出所有和为 target 的连续正整数序列&#xff08;至少含有两个数&#xff09;。 序列内的数字由小到大排列&#xff0c;不同序列按照首个数字从小到大排列。 示例 1…

【CMU15-445 FALL 2022】Project #1 - Buffer Pool

About 实验官网 Project #1 - Buffer Pool在线评测网站 gradescope Lab Task #1 - Extendible Hash Table 详见——【CMU15-445 FALL 2022】Project #1 - Extendable Hashing 如果链接失效&#xff0c;请查看当前平台我之前发布的文章。 Task #2 - LRU-K Replacement Polic…

Hadoop——DataGrip连接MySQL|Hive

1、下载 DataGrip下载&#xff1a;DataGrip: The Cross-Platform IDE for Databases & SQL by JetBrains 2、破解 破解链接&#xff1a;https://www.cnblogs.com/xiaohuhu/p/17218430.html 3、启动环境 启动Hadoop&#xff1a;到Hadoop的sbin目录下右键管理员身份运行…

计算机服务器被devos勒索病毒攻击怎么解决,数据库解密恢复方式

科学技术的发展为企业的生产运行提供了极大的便利性&#xff0c;但随之而来的网络安全也应该引起人们的重视。近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的计算机服务器内的数据库被devos后缀勒索病毒攻击&#xff0c;导致企业许多工作无法正常运行。Devos后缀勒…

每天五分钟计算机视觉:单卷积层的前向传播过程

什么是单卷积层? 一张图片(输入)经过多个卷积核卷积就会得到一个输出,而这多个卷积核的组合就是一个单卷积层。 这些卷积核可能大小是不一样的,但是他们接收同样大小是输入,他们的输出必须是一般大小,所以不同的卷积核需要具备不同的步长和填充值。 单层卷积网络前向传…

大数据分析案例-基于LightGBM算法构建乳腺癌分类预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

微服务如何治理

微服务远程调用可能有如下问题&#xff1a; 注册中心宕机&#xff1b; 服务提供者B有节点宕机&#xff1b; 服务消费者A和注册中心之间的网络不通&#xff1b; 服务提供者B和注册中心之间的网络不通&#xff1b; 服务消费者A和服务提供者B之间的网络不通&#xff1b; 服务提供者…

安装redis,适配阿里云服务器,Liunx安装redis

下载redis以及编译安装 下载redis文件 wget http://download.redis.io/releases/redis-6.0.8.tar.gz #下载redis压缩文件 tar xzf redis-6.0.8.tar.gz #解压缩 cd redis-6.0.8 make 查看是否安装了gcc编译输入gcc --version如果没有…

数据仓库表设计理论

数据仓库表设计理论 数仓顾名思义是数据仓库&#xff0c;其数据来源大多来自于业务数据(例如:关系型数据库)&#xff0c;当设计数仓中表类型时(拉链表、增量表、全量表、流水表、切片表)时&#xff0c;应先观察业务数据的特点再设计数仓表结构 首先业务数据是会不断增长的-即…

STM32外设系列—TB6612FNG

本文涉及到定时器和串口的知识&#xff0c;详细内容可见博主STM32速成笔记专栏。 文章目录 一、TB6612简介二、TB6612使用方法2.1 TB6612引脚连接2.2 控制逻辑2.3 电机调速 三、实战项目3.1 项目简介3.2 初始化GPIO3.3 PWM初始化3.3 电机控制程序3.4 串口接收处理函数 一、TB66…

基于SPDK-vhost的云原生Kubevirt虚拟化存储IO的优化方案

摘要 本文主要介绍针对云原生kubernetes虚拟化IO的应用场景&#xff0c;在Kubevirt中引入SPDK-vhost的支持&#xff0c;来加速虚机中IO存储性能。同时基于Intel开源的Workload Service Framework[1]平台集成部署一套端到端虚拟化IO的应用场景做基本的性能对比测试。 云原生Kube…

Hadoop——Windows系统下Hadoop单机环境搭建

为了便于开发&#xff0c;我在本地Windows系统进行Hadoop搭建。 我使用的版本&#xff1a;hadoop-2.7.0。其他版本也可&#xff0c;搭建流程基本一样&#xff0c;所以参考这个教程一般不会有错。 1、下载安装包和插件 安装包hadoop-2.7.0.tar.gz 必要插件winutils-master 2、…

RocketMQ教程-安装和配置

Linux系统安装配置 64位操作系统&#xff0c;推荐 Linux/Unix/macOS 64位 JDK 1.8 Maven3.0 yum 安装jdk8 yum 安装maven 1.下载安装Apache RocketMQ RocketMQ 的安装包分为两种&#xff0c;二进制包和源码包。 点击这里 下载 Apache RocketMQ 5.1.3的源码包。你也可以从这…

详细介绍Matlab中线性规划算法的使用

Matlab中提供了用于线性规划的优化工具箱&#xff0c;其中包含了多种算法&#xff0c;如单纯形法、内点法等。线性规划是一种优化问题&#xff0c;旨在找到一组变量的最佳值&#xff0c;以最大化或最小化线性目标函数&#xff0c;同时满足一组线性约束条件。 下面将详细介绍Ma…

【Spring Boot】事务的隔离级别与事务的传播特性详解:如何在 Spring 中使用事务?不同隔离级别的区别?

文章目录 1 事务1.1 事务简介与 mysql 中的事务使用1.2 Spring 编程式事务&#xff08;手动操作&#xff09;1.3 Spring 声明式事务&#xff08;自动操作&#xff09;1.4 Transactional 的工作原理 2 事务的隔离级别2.1 事务的四大特性及事务的隔离级别回顾2.2 Spring 事务的隔…

python web开发之WSGI/uwsgi/uWSGI详解

1. 三者的定义 WSGI是一种通信协议。uwsgi是一种传输协议。uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。 2.三者的使用场景 WSGI&#xff0c;全称 Web Server Gateway Interface&#xff0c;是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接…

MySQL之索引(入门级讲解)

目录 一.索引的概念 1.1索引的简介 1.2.索引的优缺点 二.MySQL索引语法 2.1查看索引 2.2创建索引 2.2.1 创建表时创建索引 2.2.2存在的表上创建索引 2.3删除索引 三.索引的数据结构 3.1Btree索引 3.2Hash索引 3.4Hash索引和Btree索引的对比 &#x1f381;个…

文本预处理——文本张量表示方法

目录 文本张量表示one-hot编码word2vecword embedding 文本张量表示 one-hot编码 word2vec word embedding
最新文章