Prometheus + Grafana 监控SpringBoot项目

2023-10-27

Dubbo Prometheus + Grafana 监控SpringBoot项目


方式1:侵入式,通过修改spring boot代码实现

准备镜像

# 下载grafana镜像
docker pull grafana/grafana:9.1.8
# 下载promethues镜像
docker pull prom/prometheus:v2.39.1

Prometheus 搭建

# 创建外部挂载目录
mkdir -p /docker/prometheus/server
# 进入目录
cd /docker/prometheus/server
# 创建文件
touch rules.yml
touch prometheus.yml
# 修改文件
vim prometheus.yml
# 如下
scrape_configs:
  # prometheus配置
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  # 本地启动的Spring Boot项目配置
  - job_name: 'springboot-prometheus'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['192.168.0.1:8082'] 

# 启动prometheus
docker run --name prometheus -p 9090:9090 --restart=always \
-v /docker/prometheus/server/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /docker/prometheus/server/rules.yml:/etc/prometheus/rules.yml \
-itd prom/prometheus:v2.39.1 \
--config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle
------------------------------------------------------------------------------------
注:启动时加上
--web.enable-lifecycle: 启用远程热加载配置文件
--config.file:启动时加载配置文件

Grafana 搭建

# 先启动下(一会还要启动一次,这里启动是为了拷贝文件)
docker run --name=grafana -d  -p 3000:3000 -itd grafana/grafana:9.1.8
# 创建外部挂载目录
mkdir -p /docker/prometheus/grafana
mkdir -p /docker/prometheus/grafana/data
# 修改配置文件grafana.ini,配置smtp邮件报警信息(报警会用到)
docker cp grafana:/etc/grafana/grafana.ini /docker/prometheus/grafana/
docker rm -f grafana
#防止grafana生成文件权限受阻,全开放
chmod 777 docker/prometheus/* 

# 正式启动
docker run -p 3000:3000 --name grafana  --restart=always \
-v /docker/prometheus/grafana/grafana.ini:/etc/grafana/grafana.ini \
-v /docker/prometheus/grafana/data:/var/lib/grafana \
-e "GF_SECURITY_ADMIN_PASSWORD=admin" \
-itd grafana/grafana:9.1.8

------------------------------------------------------------------------------------
注:-e "GF_SECURITY_ADMIN_PASSWORD=XXXXX" 
是设置grafana登陆页面的密码,如不添加这条,默认账号密码为admin/admin

Spring Boot程序

  • 加入依赖
<!-- 需要注意版本是否匹配 -->
<!-- 查看版本:2.1.5.RELEASE -->
<!-- https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/html/appendix-dependency-versions.html -->
<!-- 查看版本:2.3.4.RELEASE -->
<!-- https://docs.spring.io/spring-boot/docs/2.3.4.RELEASE/reference/html/appendix-dependency-versions.html -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <!-- 因为我的spring boot 是2.1.5.RELEASE, 所以用1.1.4版本,查看版本看上面链接 -->
    <version>1.1.4</version>
</dependency>
  • 修改配置
management:
  endpoints:
    web:
      exposure:
        include: "*"
  metrics:
    tags:
      application: ${spring.application.name}
spring:
  application:
    name: application_name
# HELP tomcat_global_received_bytes_total  
# TYPE tomcat_global_received_bytes_total counter
tomcat_global_received_bytes_total{application="application_name",name="http-nio-8082",} 0.0
# HELP tomcat_global_sent_bytes_total  
# TYPE tomcat_global_sent_bytes_total counter
tomcat_global_sent_bytes_total{application="application_name",name="http-nio-8082",} 1452186.0
# HELP http_server_requests_seconds  
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{application="application_name",exception="None",method="GET",outcome="SUCCESS",status="200",uri="/api/kms/client/v2/initKeys",} 6492.0
http_server_requests_seconds_sum{application="application_name",exception="None",method="GET",outcome="SUCCESS",status="200",uri="/api/kms/client/v2/initKeys",} 95.939401895
http_server_requests_seconds_count{application="application_name",exception="None",method="GET",outcome="SUCCESS",status="200",uri="/actuator/prometheus",} 91.0
http_server_requests_seconds_sum{application="application_name",exception="None",method="GET",outcome="SUCCESS",status="200",uri="/actuator/prometheus",} 3.033350001
# HELP http_server_requests_seconds_max  
.......
.......
.......
(有数据就证明Spring Boot 已经准备好了)

配置grafana

方式2:无侵入式,直接通过agent实现promethues监控

Grafana和Promethues配置都相同

Spring Boot

程序侧不需要做任何改动,按照下面步骤接入监控!
也不需要引用 spring-boot-starter-actuator 和 micrometer-registry-prometheus

  • 下载jmx_exporter
    点击进入GitHub官方Releases

  • 创建目录,并将下载的文件放入创建的目录

    # 创建目录
    mkdir -p /data/server/jmx
    # 修改目录权限
    chmod 777 /data/server/jmx
    # 创建必要的启动配置
    touch simple-config.yml
    # 将下载的文件拷贝的这个目录
    .......
    # 或者直接在此目录wget github的文件下载地址
    
  • simple-config.yml(这个配置很关键,设置展示的指标项,具体做啥还要研究下)

    ---   
    lowercaseOutputLabelNames: true
    lowercaseOutputName: true
    rules:
    - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+):'
      name: tomcat_$3_total
      labels:
        port: "$2"
        protocol: "$1"
      help: Tomcat global $3
      type: COUNTER
    - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount):'
      name: tomcat_servlet_$3_total
      labels:
        module: "$1"
        servlet: "$2"
      help: Tomcat servlet $3 total
      type: COUNTER
    - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount):'
      name: tomcat_threadpool_$3
      labels:
        port: "$2"
        protocol: "$1"
      help: Tomcat threadpool $3
      type: GAUGE
    - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions):'
      name: tomcat_session_$3_total
      labels:
        context: "$2"
        host: "$1"
      help: Tomcat session $3 total
      type: COUNTER
    
  • 当启动java应用时,设置javaagent

    # 很关键,这种方式就是启动的时候通过无侵入的方式监听jvm应用
    nohup java -javaagent:/data/server/jmx/jmx_prometheus_javaagent-0.17.1.jar=3010:/data/server/jmx/simple-config.yml -jar  /data/server/jmx/spring_boot_application.jar > spring_boot_application.log &
    
  • 配置prometheus
    prometheus.yml

    scrape_configs:
      - job_name: "springboot_jvm"
        # 多久采集一次数据
        scrape_interval: 5s
        # 采集时的超时时间
        scrape_timeout: 5s
        # 采集的路径
        metrics_path: '/metrics'
        # 采集Springboot服务的地址
        static_configs:
          - targets: ['10.100.64.154:3010']
    
  • 重新加载

    curl -X POST http://localhost:9090/-/reload
    
  • grafana监控模版(这种方式目前知道的是可以通过模版编号3066进行查看)效果如下
    在这里插入图片描述

其他关键问题及解决方法

问题1 : 多个Spring Boot如何加入监控?

  • 分析
    主要是修改prometheus的配置文件,然后要让promethues加载此配置,使其有效。
  • 解决方法
    1.通过shell或者程序动态修改prometheus.yml,shell比较适合在jenkins当中,或者CICD平台通过Python直接修改目标机器的prometheus.yml 配置。
    2.加载的话,可以通过一行curl命令执行,如下:
    # 配置修改后,执行这个,就无需重启promethues了
    curl -X POST http://IP:9090/-/reload 
    # 当重载成功后,prometheus日志会打印类似下面的信息
    ... msg="Loading configuration file" filename=prometheus.yml ...
    

错误

# 如果执行下面的语句
curl -X POST http://192.168.163.172:9090/-/reload
# 返回下面的信息(执行错误)
Lifecycle API is not enabled
####### 解决办法 #######
# 1.找到prometheus.services位置
systemctl status prometheus
# 执行上面的语句会显示位置,然后将下面的语句加到指定位置(如图)
--web.enable-lifecycle
# 再重启prometheus
systemctl daemon-reload
systemctl restart prometheus
systemctl enable prometheus

在这里插入图片描述

验证修改是否正确

# 执行下面命令
prometheus/bin/promtool check config /data/prometheus/cfg/prometheus.yml
# 返回修改结果,会做检查,然后再执行curl -X POST http://IP:9090/-/reload  加载修改
Checking /data/prometheus/cfg/prometheus.yml
  SUCCESS: 1 rule files found
 SUCCESS: /data/prometheus/cfg/prometheus.yml is valid prometheus config file syntax

Checking /data/prometheus/rules/node_rules.yml
  SUCCESS: 4 rules found
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Prometheus + Grafana 监控SpringBoot项目 的相关文章

  • 使用 prometheus 和 grafana 跟踪事件

    有一篇文章 跟踪每个版本 https codeascraft com 2010 12 08 track every release 它讲述了如何在每个代码部署的图表上显示一条垂直线 他们正在使用石墨 我想用 Prometheus 2 2 和
  • 普罗米修斯时间序列在没有更新的情况下持续多长时间

    如果我向 Prometheus 发送一个仪表 则有效负载具有时间戳和如下值 指标名称 标签 值 2 0 16239938546837 如果我在普罗米修斯上查询它 我可以看到一条连续的线 如果不发送相同指标的有效负载 线路就会停止 几分钟后发
  • 如何为 Prometheus 检测 Java 应用程序代码指标

    我正在尝试将 Java 应用程序的自定义值指标导出到 Prometheus 我读到可以使用 Push Gateway 来完成 下面是我使用下一个方法的示例 static void executeBatchJob throws Excepti
  • Prometheus Java 摘要指标是线程安全的吗?

    普罗米修斯是Java吗Summary对象线程安全 如果我在类中将其声明为静态 则该类的所有实例都将使用它 Prometheus 是否为该度量对象实现了线程安全 Prometheus 客户端库负责处理方向检测的线程安全等细节 例如Summar
  • Kubernetes Prometheus CrashLoopBackOff / OOMKilled 谜题

    我定期看到容器状态 已终止 OOMKilled 退出代码 137 但调度到内存充足的节点 k get statefulset n metrics NAME READY AGE prometheus 0 1 232d k get po n m
  • Grafana - 是否可以在基于 Loki 的仪表板查询中使用变量?

    我正在 Grafana 上开发基于 Loki 的仪表板 我有一个用于在 Loki 跟踪日志中搜索文本的面板 当前查询如下 job abc service searchTrace json line format if trace messa
  • TimeStream + Grafana:无法识别数据中的序列

    在 AWS Timestream 上跳跃 我在 grafana 集成方面遇到了一些问题 我构建了一个查询 返回按天和 事物 分组的事件计数 并希望在图表中显示该结果 甚至哪一个都不重要 In a table the data is disp
  • PromQL:查询警报是否被静音

    我已成功消除了当前已关闭节点的警报 并且在我们有时间物理替换它之前会持续一段时间 虽然我认为沉默会阻止警报在 Slack 通道中重新出现 但我也想在我们在 Prometheus 之上运行的 Grafana 仪表板上删除它 这是对 grafa
  • 将矩阵与 SUM 相乘

    我想将一个指标与另一个指标之和的结果相乘 我想尝试做的事情 MeticOne SUM MetricTwo Thanks 假设你有MetricOne带标签id and name 你有MetricTwo还有标签id and name 然后你就得
  • Grafana:警报查询不支持模板变量

    您好 我想在 grafana 中创建一个简单的警报 以检查过去 5 分钟是否没有数据 但我收到一个错误 警报查询不支持模板变量 嗯 根据这个issue https github com grafana grafana issues 6230
  • 使用 Azure AD OAuth 进行 Grafana 角色分配

    我正在尝试使用 Azure AD OAuth 在 Grafana 中为某些用户组分配管理员角色 我可以使用此文档使用 Azure AD 凭据成功登录 使用 Azure Active Directory 设置 OAuth2 https gra
  • pq:无法调整共享内存段的大小。设备上没有剩余空间

    我在仪表板上有许多面板 数量约为 6 个 用于显示数据点图表 对 PostgreSQL 数据库的 Dockerized 实例进行查询 直到最近 面板都工作正常 有些面板停止工作并报告如下错误 pq 无法将共享内存段 PostgreSQL 2
  • 获取 Pod 处于挂起状态的平均时间

    我正在尝试使用 prometheus 计算 pod 在 grafana 中处于挂起状态的平均时间 我可以使用此查询生成一个图表 以获取一段时间内处于挂起状态的 Pod 数量 sum kube pod status phase phase P
  • 让 Prometheus 发送 SQL 查询

    我正在尝试使用普罗米修斯 https prometheus io 监视我的 MySQL 数据库 但似乎找不到添加 SQL 查询的区域 例如 我想运行一个返回值的 SQL 查询 然后将该值添加到图表中 发送警报 有没有办法让 Promethe
  • 如何重置grafana的admin密码(由helm安装)

    我的密码曾经有效 但我不记得是否更改过 但是 我无法重置它 我尝试过但没有成功 kubectl get secret namespace default grafana o jsonpath data admin password base
  • Prometheus - 在 static_configs 中添加目标特定标签

    我的工作定义如下 job name test name static configs targets 192 168 1 1 9100 192 168 1 1 9101 192 168 1 1 9102 labels group devel
  • Prometheus指标删除后不会消失

    我需要删除源自一台主机的一些 Prometheus 指标 为简单起见 我们假设需要删除主机中的所有指标 执行 POST 到delete series两个虚拟机上的端点 正如预期的那样 得到了 204 指标并没有消失 即使在通过强制缓存刷新之
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • 普罗米修斯:我如何用两个不同的指标求和

    我有两个不同的指标 具有字段类型的 metric a metric b 具有字段类型 相同 我试图总结同一类型的 a 和 b 如果类型仅存在于 metric a 上而不存在于 metric b 上 它应该返回 metric b 的结果 我在
  • 将 Kubernetes 抓取目标添加到不在 Kubernetes 中的 Prometheus 实例

    I run 普罗米修斯 https prometheus io 本地为 http localhost 9090 targets docker run name prometheus d p 127 0 0 1 9090 9090 prom

随机推荐

  • Oracle9i之xmltype应用

    Oracle9i之xmltype应用 1 2007年07月12日 星期四 14 52 这几天在研究9I下的XMLTYPE数据类型 这在解析和查找生成XML方面都很方便 在网上搜到了一篇入门级的文章 转贴下来 有几个地方小改了一下 文章摘要
  • java基本环境及常识

    1 编程语言 1 机器语言 0和1 在硬件上直接运行 计算机智能识别0和1 2 汇编语言 也称为符号语言 3 高级语言 面向过程的高级语言 程序设计的基本单位为函数 包括c c 面向对象的的高级语言 程序设计的基本单位为类 包括java c
  • Vue常见问题——Vue路由跳转、切换、返回页面不刷新问题

    前言 最近用iview admin做后台管理系统 遇到了个问题 列表页面点击进入详情页面编辑 编辑完成自动跳转到列表页 需要页面重新刷新请求列表 后管就是这么简单粗暴 然并卵 再次回到列表页页面不会重新刷新 问题很好解决 因为iview a
  • 梦三国解析服务器spl文件头失败,流沙恐遭降级?《梦三国2》MPL夏季赛第二轮激战全面开启...

    逐梦巅峰 为荣耀而战 2020 梦三国2 职业联赛 简称 MPL 夏季常规赛第一轮较量于上周正式结束 风月战队后来居上 通过6小局连胜将战队积分累积至14分 积分排名连跳3级成功登顶第四周积分榜首之位 常规赛半程结束 让我们快速回顾第四周的
  • 挂机宝怎么搭建php网站,如何使用挂机宝搭建网站?挂机宝建站教程

    教程简介 安逸资源网小编现在教你们怎么使用挂机宝搭建网站 这一教程适用于所有windows系统笔记本或挂机宝qq代挂网站怎么搭建 废话我就不多说了 看到你们这么热爱学习技术的份上就直接上教程吧 第一步 首先我们先打算一台挂机宝 没有的可以去
  • 【Web】go管理配置神器 viper库

    建议看官方文档 viper 库的作用 viper适用与go应用程序中处理多种格式的配置文件 如 YAML JSON TOML 等 它支持 设置默认值 从 JSON TOML YAML HCL envfile 和 Java 属性配置文件中读取
  • C++实现矩阵压缩存储与(快速)转置

    注意 以下所有代码均在VS2010环境下运行测试 了解了C语言以后 我们都知道 要存储一个矩阵 用一个二维数组即可实现 今天 由我来带领大家玩点新鲜的 对矩阵进行压缩存储并对其进行转置 一 对称矩阵及对称矩阵的压缩存储 1 什么是对称矩阵
  • 超详细、超完整的C++教程(算是吧)

    C 是一种高级编程语言 它被广泛应用于软件开发 游戏制作 嵌入式系统等领域 本文将为读者提供一份超详细 超完整的C 教程 帮助初学者掌握C 的基础知识 同时给出十个实例 并一一解释分析 最后 我们将为读者提供一道编程题 并给出解答 目录 第
  • Openwrt安装python问题

    1 tini依赖函数找不到 需要禁用docker compose 2 pip 19版本过低 需要将pip更新到21 3 pip install upgrade pip staging dir hostpkg bin python3 8 m
  • Ubuntu 安装 Visual Studio Code 搭建 C++ 开发环境教程

    Ubuntu 安装 Visual Studio Code 搭建 C 开发环境教程 一 Ubuntu 安装 Visual Studio Code 1 下载 1 在 Ubuntu Software 中下载安装 2 Visual Studio 官
  • 【推荐】10本黑客入门必看的书籍

    前言 书籍介绍黑客入门的基本知识和必备技能 帮助您理解黑客攻击的原理和方法 并提供有效的防御策略 1 白帽子讲Web安全 作者 吴翰清 介绍了常见的Web安全漏洞和攻击技术 并提供了相应的防御策略 2 Metasploit渗透测试指南 作者
  • shell脚本之检索某url中所有文件的内容

    前言 cve 官网或者工信部会发布一些 cve 漏洞 可以看到该漏洞在某次 commit 提交代码后修复的 可以通过检索 kernel org 中所有内核版本的 ChangeLog 文件中是否包含该 commit 来判断漏洞影响的内核版本
  • copyTo 使用方法

    原地址 https blog csdn net qq 36930777 article details 78256739 openCV中image copyTo 有两种形式 1 image copyTo imageROI 作用是把image
  • 2.4.5Qt之plainTextEdit 文本编辑器dial刻度盘spinBox整数计数器QDoubleSpinBox浮点计数器QSlider滑块基础知识

    Qt之plainTextEdit 文本编辑器dial刻度盘spinBox整数计数器QDoubleSpinBox浮点计数器QSlider滑块基础知识 文章目录 Qt之plainTextEdit 文本编辑器dial刻度盘spinBox整数计数器
  • 刷脸支付的广泛应用观望态势势会越来越少

    支付宝 微信支付 中国银联三大巨头都相继推出自己的刷脸支付产品 并对刷脸支付实行大力的推广扶持政策 刷脸支付较当下流行的扫码支付更加便捷 资金更安全 而且还有马云 马化腾多次站台宣传 想不火都难 支付宝宣布其刷脸支付已经具备商业化能力并逐渐
  • 解决ModuleNotFoundError: No module named ‘numpy.core._multiarray_umath‘的方法

    问题 导入tensorflow时报错ModuleNotFoundError No module named numpy core multiarray umath 异常信息如下所示 分析 NumPy是使用Python进行科学计算的基础软件包
  • GPU服务器租用阿里云和腾讯云对比以及学生GPU按量付费攻略

    学生如何选择GPU服务器 哪家GPU服务器 腾讯云GPU服务器和阿里云GPU对比 GPU服务器可以选择按量付费计费模式 用的时候创建一台按量GPU实例 不用的时候释放掉 这样比较划算 腾讯云百科来详细说下哪家GPU服务器划算以及按量付费GP
  • 兼顾测试功能的API文档管理工具:Swagger与RAP2

    常规的开发流程通常为 后端提供API文档 前后端各自实现 联调测试 这里经常遇到的两个问题 文档如何维护 一方实现后 需要等另一方进行联调 对于文档的维护 常规的API文档管理工具都具备文档的创建 修改 共享 版本记录等 差别不大 而对于联
  • Linux MMC驱动架构浅析

    Linux MMC驱动架构浅析 MMC驱动模型 Linux内核设计了MMC子系统 用于管理MMC SD等设备 MMC SD存储设备是一种典型的块设备 MMC子系统的框架结构如下图所示 块设备 MMC BLOCK 块设备的相关驱动 即实现块设
  • Prometheus + Grafana 监控SpringBoot项目

    文章目录 Dubbo Prometheus Grafana 监控SpringBoot项目 方式1 侵入式 通过修改spring boot代码实现 准备镜像 Prometheus 搭建 Grafana 搭建 Spring Boot程序 配置g