Docker compose 部署Grafana+Prometheus实现java应用JVM监控

这里是小奏,觉得文章不错可以关注公众号小奏技术

背景

最近可能要对一些java应用进行JVM监控,比如一些中间件

实际如果是普通应用比较简单的就是上相对来说重量一点的skywalkingarmas

这种监控比较全,啥都有。

当然如果我们要轻量一点只监控JVM就可以用如下方式

组件说明

本次用到的核心组件有如下几个

  • Grafana:主要是数据可视化,提供一些好看的dashboard,更方便查看数据,然后支持配置一些报警
  • Prometheus:时序数据库,主要用来存储一些监控数据
  • jmx_exporter:java应用将JVM数据暴露出来

可以看到三个组件各有用处,相互配合。

应用通过jmx_exporter暴露出JVM相关的监控指标

然后Prometheus对这些数据进行收集存储。

最后Grafana对这些数据进行页面展示,然后可以添加一些报警

java应用jvm监控数据导出

这里我们使用prometheus官方提供的jmx_exporter

github

版本我们使用最新的1.0.1好了

然后去下载相关的agent

doc/agent下载地址

下载完后之后将放入一个文件夹,并在同级目录新增一个config.yaml

config.yaml中的内容可以用官方默认的

rules:
- pattern: ".*"

也可以使用grafanajvm-dashboard中提供的

https://grafana.com/grafana/dashboards/8563-jvm-dashboard/

lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
blacklistObjectNames: []
rules:
  - pattern: 'java.lang<type=OperatingSystem><>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:'
    name: os_$1_bytes
    type: GAUGE
    attrNameSnakeCase: true
  - pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
    name: os_$1
    type: GAUGE
    attrNameSnakeCase: true

这里我们使用的是jvm-dashboard 提供的

然后启动你的java应用,挂载上这个agent就行

java -javaagent:./jmx_prometheus_javaagent-1.0.1.jar=12345:config.yaml -jar yourJar.jar

我这里是idea直接启动,所以在VM参数里面添加下面参数即可

-javaagent:/Users/xiaozou/Downloads/java_agent/jmx_prometheus_javaagent-1.0.1.jar=12345:/Users/xiaozou/Downloads/java_agent/config.yaml

启动成功后我们访问

http://localhost:12345/metrics

就可以看到相关的JVM数据了

Docker compose 部署 Prometheus + Grafana

这里我们使用Docker compose一件部署Prometheus + Grafana

文件结构

配置文件准备

主要包含三个文件

  • compose.yaml
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    ports:
      - 9090:9090
    restart: unless-stopped
    volumes:
      - ./prometheus:/etc/prometheus
      - prom_data:/prometheus
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - 3000:3000
    restart: unless-stopped
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=grafana
    volumes:
      - ./grafana:/etc/grafana/provisioning/datasources
volumes:
  prom_data:

  • datasource.yml
apiVersion: 1

datasources:
- name: Prometheus
  type: prometheus
  url: http://prometheus:9090 
  isDefault: true
  access: proxy
  editable: true
  • prometheus.yml
global:
  scrape_interval: 15s
  scrape_timeout: 10s
  evaluation_interval: 15s
alerting:
  alertmanagers:
  - static_configs:
    - targets: []
    scheme: http
    timeout: 10s
    api_version: v1
scrape_configs:
- job_name: prometheus
  honor_timestamps: true
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  static_configs:
  - targets:
    - localhost:9090

- job_name: jmx
  honor_timestamps: true
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  static_configs:
  - targets:
    - host.docker.internal:12345

这里主要添加了jmx相关的job

需要注意的是这里使用的ip地址使用的是host.docker.internal:12345

并不是localhost:12345 因为我的JVM应用在宿主机直接启动的。而prometheus在docker中,使用localhost应该是访问不到

部署

部署很简单

进入到compose.yaml所在的目录,执行如下命令

docker compose up -d

等待启动并运行完镜像后我们可以使用

docker ps

查看是否启动成功

访问

http://localhost:3000/ 是访问grafana

http://localhost:9090/是访问prometheus

如果我们要确认prometheus是否采集到我们的JVM上报的数据。我们可以访问

http://localhost:9090/targets

这里可以看到状态是UP

grafana新增prometheus数据源

grafana这里我们可以首先新增一个数据源

主要是填写一下prometheus地址和数据源名字

因为是在docker中,所以填写http://prometheus:9090即可

填写完后点击测试和保存

然后会显示成功

grafana新增JVM监控面板

这里我们新增dashboard

然后选择import

然后选择通过URL导入模板

这里我用8563这个模板。自己也可以看看其他的是不是有更好的

导入后即可查看JVM相关的监控了

由于我们使用最新的agent有一些指标的key产生了一些变化,所以一些面板获取不到数据

这个自己慢慢调整就好了

总结

本次我们使用agent+grafana+prometheus进行了JVM相关的监控。

可以看出来相对来说还是比较轻量的。如果有grafana+prometheus。应用仅需接入agent即可,并且这个agent相对来说也是比较轻量。

如果是一些中间件之类的监控可以使用这种方式来做监控,比如RocketMQ

比较麻烦的是grafanadashboard有些维护没维护,需要手动去调整一些指标的key。

想要完善好看的dashboard面板还是需要慢慢调整,然后报警自己也可以去慢慢添加

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

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

相关文章

Centos 报错 One of the configured repositories failed

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 使用yum update更新命令就出现下面问题&#xff0c;系统是刚安装的&#xff0c;然后修改了一下IP变成手动。&#xff08;排查问题前&#xff0c;先回顾自己做了哪些操作&#xff0c;方便进一步排错&a…

accelerate笔记:实验跟踪

Accelerate支持七种集成的跟踪器&#xff1a; TensorBoardWandBCometMLAimMLFlowClearMLDVCLive要使用这些跟踪器&#xff0c;可以通过在 Accelerator 类的 log_with 参数中传入所选类型来实现 from accelerate import Accelerator from accelerate.utils import LoggerTypeac…

iPhone邮件软件使用经验分享

前言&#xff1a;由于没有看邮件的习惯&#xff0c;导致错过了很重要的邮件(ー〃)&#xff0c;虽然最后努力弥补了损失&#xff0c;但仍然心有余悸&#xff0c;在手机的邮件软件上可以添加多个邮件账号&#xff0c;再也不会错过重要消息了(ง •̀_•́)ง‼ 一、QQ等其他电子…

IDEA debug 调试使用小tips

1、Show Execution Point (ALT F10)&#xff1a;回到当前执行到的那一行&#xff0c;有时候在代码间和不同包和文件中点来点去&#xff0c;可能会找不到执行到什么地方了&#xff0c;点这个就跳转回来了 2、Step Over (F8)&#xff1a;下一步&#xff0c;这个按钮是一行一行往…

最新消息:Stable Diffusion 3将于下周开源,快快申请!(内附地址)

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃斜杠君&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &#…

数字马力社招测试面试经历,期望17K

面试感受&#xff1a;面试官人挺好的&#xff0c;虽然不是其他面经提到的会有循序渐进的引导或者如沐春风的感觉&#xff0c;不是聊天式&#xff0c;是问答式&#xff0c;只是是我的回答往往过于简单&#xff0c;所以中间的停顿时间就稍有尴尬。 面试评价&#xff1a;个人表现…

自定义 DSL 流程图(含XML 描述邮件,XML 描述流程图)

什么是 DSL&#xff1f; 领域特定语言&#xff08;英语&#xff1a;domain-specific language、DSL&#xff09;指的是专注于某个应用程序领域的计算机语言。又译作领域专用语言。不同于普通的跨领域通用计算机语言(GPL)&#xff0c;领域特定语言只用在某些特定的领域。 比如用…

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度

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

Java学习【认识异常】

Java学习【认识异常】 认识异常异常的种类异常的作用 异常的处理方式JVM默认的处理方式捕获异常finally 多个异常的处理异常中的方法抛出异常 自定义异常 认识异常 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常 异常的种类 Error代表的是系统级别的错误&a…

【Java数据结构】详解Stack与Queue(四)

&#x1f512;文章目录&#xff1a; 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2.用队列实现栈 3.用栈实现队列 4.栈和队列存放null 5.总结 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友…

Leetcode:整数转罗马数字

题目链接&#xff1a;12. 整数转罗马数字 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;模拟&#xff09; 条件分析&#xff1a;罗马数字由 7 个不同的单字母符号组成&#xff0c;每个符号对应一个具体的数值。此外&#xff0c;减法规则还给出了额外的 6 个复…

FIFO读写端口位宽不同时的数据输出

非对称长宽比指的是FIFO的读写端口的数据宽度不同&#xff0c;呈现比例关系&#xff1b;非对称长宽比允许FIFO的输入和输出深度不同&#xff0c;支持如下的写读宽高比:1:8、1:4、1:2、1:1、2:1、4:1、8:1。 只有以下几种FIFO支持非对称长宽比&#xff1a; 对于非对称长宽比&a…

容器化部署fastdfs文件存储

目录 一、软件信息 二、构建fastdfs镜像 三、docker 启动fdfs服务 四、k8s部署fdfs服务 1、fdfs部署文件 五、外部服务访问 一、软件信息 fastdfs版本&#xff1a;fastdfs:V5.11 libfastcommon版本: V1.0.36 fastdfs-nginx-module版本&#xff1a;V1.20 nginx版本&…

自动驾驶---Control之LQR控制

1 前言 在前面的系列博客文章中为读者阐述了很多规划相关的知识&#xff08;可参考下面专栏&#xff09;&#xff0c;本篇博客带领读者朋友们了解控制相关的知识&#xff0c;后续仍会撰写规控相关文档。 在控制理论的发展过程中&#xff0c;人们逐渐认识到对于线性动态系统的控…

Websocket服务端结合内网穿透发布公网实现远程访问发送信息

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

Audition 2024 for Mac/Win:音频录制与编辑的卓越之选

随着数字媒体的不断发展&#xff0c;音频内容创作已经成为各行各业中不可或缺的一部分。无论是音乐制作、广播节目、播客录制还是影视配音&#xff0c;都需要高品质的音频录制和编辑工具来实现专业水准的作品。在这个充满竞争的时代&#xff0c;要想在音频创作领域脱颖而出&…

如何合理使用群发短信呢?(短信接口JSON实例)

随着时代的发展&#xff0c;越来越多的营销推广也开始有线下转移到了线上&#xff0c;短信也变成了企业与用户之间交流沟通的桥梁&#xff0c;那么这么多的企业选择使用短信平台&#xff0c;到底群发短信好不好用呢&#xff1f;今天乐讯通短信平台就为大家来介绍一下群发短信营…

【C++进阶】深入STL之vector:构建高效C++程序的基石

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;模拟实现string &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之vector &#x1f4d2;1.ve…

NLP基础——序列模型(动手学深度学习)

序列模型 定义 序列模型是自然语言处理&#xff08;NLP&#xff09;和机器学习领域中一类重要的模型&#xff0c;它们特别适合处理具有时间顺序或序列结构的数据&#xff0c;例如文本、语音信号或时间序列数据。 举个例子&#xff1a;一部电影的评分在不同时间段的评分可能是…

【个数】滑动窗口-1004. 最大连续1的个数 III 1493. 删掉一个元素以后全为 1 的最长子数组

题目链接及描述 1004. 最大连续1的个数 III - 力扣&#xff08;LeetCode&#xff09; 题目分析 今日写到这个题目&#xff0c;是滑动窗口的标签&#xff0c;但首先看到后感觉和之前做过的滑动窗口题目有点区别&#xff0c;之前滑动窗口通过给定一个区间长度&#xff0c;随后区…