prometheus client_java实现进程的CPU、内存、IO、流量的可观测

news2024/12/23 9:24:00

文章目录

    • 1、获取进程信息的方法
      • 1.1、通过读取/proc目录获取进程相关信息
      • 1.2、通过Linux命令获取进程信息
        • 1.2.1、top(CPU/内存)命令
        • 1.2.2、iotop(磁盘IO)命令
        • 1.2.3、nethogs(流量)命令
    • 2、使用prometheus client_java实现
    • 3、最终运行效果
      • 3.1、client_java在浏览器访问效果
      • 3.2、接入prometheus和Grafana访问效果

1、获取进程信息的方法

1.1、通过读取/proc目录获取进程相关信息

在Linux系统中,/proc 目录下的文件和文件夹代表了系统中的进程和硬件信息,包括CPU、内存、硬盘、网络等。它是一个虚拟文件系统(/proc),通过访问这个虚拟文件系统中的特殊文件,可以获取到系统的各种信息。常用的proc命令的用法和功能:

proc/cpuinfo # 这个文件显示了系统中的CPU信息,包括CPU型号、频率、缓存大小等。
proc/meminfo # 此文件显示了系统的内存使用情况,包括总内存、可用内存、缓存、交换空间等。
proc/version # 这个文件显示了当前正在运行的内核版本信息。
proc/filesystems # 此文件列出了当前系统支持的文件系统类型。
proc/net/dev # 这个文件显示了网络接口的统计信息,包括接口名称、接收和发送的数据包数量等。
proc/loadavg # 此文件显示了系统的平均负载情况,包括1分钟、5分钟和15分钟的平均负载值。
proc/sys/kernel # 此文件夹包含了一些内核参数的配置文件,可以通过修改这些文件来改变系统的行为。
/proc/[pid] # 目录是Linux系统中的一个虚拟文件系统目录,它包含了有关进程的信息,每个进程都有一个对应的/proc/pid目录。通过读取/proc/pid目录中的文件,可以及时了解进程的状态和运行情况,方便进行进程管理和调试。

# 常见的/proc/[pid]信息
/proc/pid/attr # 安全相关的选项
/proc/pid/autogroup # 该目录包含了进程的自动分组信息。
/proc/pid/auxv # 该文件包含了进程的辅助向量信息。
/proc/pid/cgroup # 该文件包含了进程所在的控制组信息。
/proc/pid/clear_refs # 该文件用于清除进程使用的匿名内存页的引用计数。
/proc/pid/cmdline #该文件包含了进程启动时使用的命令行参数。
/proc/pid/comm # 该文件包含了进程的命令名。
/proc/pid/coredump_filter # 该文件包含了进程的转储核心过滤器。
/proc/pid/cpuset # 该文件包含了进程所在的CPU集合信息。
/proc/pid/cwd # 该文件是一个符号链接,指向当前进程的工作目录。
/proc/pid/environ # 该文件包含了进程的环境变量列表。
/proc/pid/exe # 该文件是一个符号链接,指向当前进程正在执行的可执行文件。
/proc/pid/fd # 该目录包含了当前进程打开的文件描述符列表。
/proc/pid/fdinfo # 该目录包含了当前进程打开的文件描述符信息。
/proc/pid/io # IO信息
/proc/pid/limits # 该文件包含了进程的资源限制信息。
/proc/pid/maps # 该文件包含了进程的内存映射信息。
/proc/pid/mem # 该文件包含了进程在内存中的内容。
/proc/pid/mountinfo # 该文件包含了进程所挂载的文件系统信息。
/proc/pid/mounts # 该文件包含了进程所挂载的文件系统信息,与mountinfo文件类似。
/proc/pid/mountstas # 该文件包含了进程所挂载的文件系统的统计信息。
/proc/pid/ns/ # 该目录包含了进程的命名空间信息。
/proc/pid/ns/ipc # 该文件是一个符号链接,指向进程的IPC命名空间。
/proc/pid/ns/net # 该文件是一个符号链接,指向进程的网络命名空间。
/proc/pid/ns/uts # 该文件是一个符号链接,指向进程的UTS命名空间。
/proc/pid/numa_maps # 该文件包含了进程的NUMA内存映射信息。
/proc/pid/oom_adj # 该文件包含了进程的OOM(Out of Memory)值,即内存不足时该进程被杀死的优先级。
/proc/pid/oom_score # 该文件包含了进程的OOM得分,即OOM杀死该进程的优先级。
/proc/pid/oom_adj_score # 该文件包含了进程的OOM值和OOM得分。
/proc/pid/root # 该文件是一个符号链接,指向进程的根目录。
/proc/pid/smaps # 该文件包含了进程的内存使用情况,与/proc/pid/maps文件类似,但提供了更详细的信息。
/proc/pid/stat # 该文件包含了进程的状态信息,如进程ID、父进程ID、状态、CPU使用情况等。
/proc/pid/statm # 该文件包含了进程的内存使用信息,如内存大小、共享内存大小、代码大小等。
/proc/pid/status # 该文件包含了进程的状态信息,如进程的状态、CPU使用情况、内存使用情况等。
/proc/pid/task # 该目录包含了当前进程的线程列表,每个线程都有一个对应的子目录。

1.2、通过Linux命令获取进程信息

1.2.1、top(CPU/内存)命令
# 使用方式
top 的使用方式 top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

-d delay	#delay代表秒数,表示top命令显示的页面更新一次的间隔(default=5s)
-b	#以批次的方式执行top
-p	#-p pid 仅显示指定进程 ID 的信息
-u	#-u username 仅显示指定用户名的进程信息
-S	#累计显示进程的 CPU 使用时间
-c	#显示完整的命令行而不截断
-i	#不显示闲置(idle)或无用的进程
-H	#在进程信息中显示线程的详细信息
-n	#与-b配合使用,表示需要进行几次top命令的输出结果
-p	#指定特定的pid进程号进行观察

# top 命令显示的页面还可以输入以下按键执行相应的功能(注意区分大小写)
?	#显示在top页面中可以输入的命令
P	#以 CPU 的使用资源排序显示
M	#以内存的使用资源排序显示
N	#以 PID 排序显示
T	#由进程使用的时间累计排序显示
k	#给某一个 pid 一个信号,可以用来杀死进程(9)
r	#给某个 pid 重新定制一个 nice 值(即优先级)
q	#退出 top (用 ctrl + c 也可以退出 top)

# 结果参数说明:
PID     # 进程 ID
USER    # 进程所有者
PR      # 优先级
NI      # nice 值
VIRT    # 虚拟内存大小
RES     # 常驻集大小,即物理内存大小
SHR     # 共享内存大小
S       # 进程状态
%CPU    # CPU 使用率
%MEM    # 内存使用率
TIME+   # CPU 时间累计
COMMAND # 命令名称或命令行
1.2.2、iotop(磁盘IO)命令
#1、前置条件
#    1:内核版本为2.6.20或更高版本
#    2:Python 2.7或更高的版本
#2、yum安装 
yum -y install iotop
#3、源码安装
wget http://guichaz.free.fr/iotop/files/iotop-0.6.tar.gz
tar -zxvf iotop-0.6.tar.gz
cd iotop-0.6
python setup.py build
python setup.py install

#运行命令选项
iotop -oP  # 仅仅显示有IO的进程
--version #显示版本号
-h, --help #显示帮助信息
-o, --only # 只显示有 I/O 活动的进程,避免显示那些没有任何 I/O 操作的进程
-b, --batch # 批量模式,用于记录日志或分析,输出一次后自动退出,常用于将数据重定向到文件。
-n NUM, --iter=NUM #在非交互式模式下,设置显示的次数,
-d SEC, --delay=SEC # 指定每次刷新的时间间隔(以秒为单位),默认为 1 秒。
-p PID, --pid=PID #只显示指定PID的信息
-u USER, --user=USER #显示指定的用户的进程的信息
-P, --processes #只显示进程,一般为显示所有的线程
-a, --accumulated #显示从iotop启动后每个线程完成了的IO总数
-k, --kilobytes # 以 KB/s 为单位显示 I/O 速率,默认显示 B/s。
-t, --time #在每一行前添加一个当前的时间

# 结果说明
TID                #线程号或进程号
PRIO               #线程运行时的I/O优先级
USER               #进程所属用户
DISK READ          #刷新时间间隔内读取数据量
DISK WRITE         #刷新时间间隔内写入数据量
SWAPIN             #每个进程的交换使用率
IO                 #每个进程的 I/O 利用率,包含磁盘和交换
COMMAND            #进程名字
1.2.3、nethogs(流量)命令
# 安装
yum方式安装Nethogs
安装依赖
yum install epel-release
yum install nethogs

# 运行命令选项
nethogs ens33 -t -v 0 -d 5 -c 2
nethogs -t -v 0 -d 5 -c 2

-V # 打印版本信息
-h # 帮助信息
-b # 以“bughunt”模式运行(隐式tracemode),并显示每个进程的网络使用情况和其他相关信息
-d # 指定刷新间隔的秒数,默认为1秒。
-v # 流量显示模式 (0 = KB/s, 1 = total KB, 2 = total B, 3 = total MB). 默认 0
-c # 更新次数。默认值为0(无限制)
-t # 跟踪模式,以文本模式显示结果,记录下每一次刷新的流量信息
-p # 在混杂模式下监听流量(不推荐)
-s # 按发送流量进行排序

2、使用prometheus client_java实现

本文使用《Prometheus监控java应用》的prometheus的“client_java”库实现自定义Exporter,使用zt-exec库执行top、iotop、nethogs命令获取进程的CPU使用率、内存使用率、IO读写速度、发送接收流量信息,这里省略实现代码。

3、最终运行效果

3.1、client_java在浏览器访问效果

在这里插入图片描述

3.2、接入prometheus和Grafana访问效果

在这里插入图片描述

在这里插入图片描述

附件:task_exporter(审核中)
已使用graalvm构建的二进制文件,不依赖jdk,在cetnos7、8下运行测试正常,运行命令

./task_exporter

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

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

相关文章

tableau除了图表好看,在业务中真有用吗?

tableau之前的市值接近150亿美金,被saleforce以157亿美金收购,这个市值和现在的蔚来汽车差不多。 如果tableau仅仅是个show的可视化工具,必然不会有这么高的市值,资本市场的眼睛是雪亮的。 很多人觉得tableau做图表好看&#xff…

分布式常见面试题总结

文章目录 1 什么是 UUID 算法?2 什么是雪花算法?🔥3 说说什么是幂等性?🔥4 怎么保证接口幂等性?🔥5 paxos算法6 Raft 算法7 CAP理论和 BASE 理论7.1 CAP 理论🔥7.2 为什么无法同时保…

Echarts合集更更更之树图

实现效果 写在最后🍒 源码,关注🍥苏苏的bug,🍡苏苏的github,🍪苏苏的码云

DGL库之HGTConv的使用

DGL库之HGTConv的使用 论文地址和异构图构建教程HGTConv语法格式HGTConv的使用 论文地址和异构图构建教程 论文地址:https://arxiv.org/pdf/2003.01332 异构图构建教程:异构图构建 异构图转同构图:异构图转同构图 HGTConv语法格式 dgl.nn.…

极客兔兔Gee-Cache Day7

protobuf配置: 从 Protobuf Releases 下载最先版本的发布包安装。解压后将解压路径下的 bin 目录 加入到环境变量即可。 如果能正常显示版本,则表示安装成功。 $ protoc --version libprotoc 3.11.2在Golang中使用protobuf,还需要protoc-g…

【单链表的模拟实现Java】

【单链表的模拟实现Java】 1. 了解单链表的功能2. 模拟实现单链表的功能2.1 单链表的创建2.2 链表的头插2.3 链表的尾插2.3 链表的长度2.4 链表的打印2.5 在指定位置插入2.6 查找2.7 删除第一个出现的节点2.8 删除出现的所有节点2.9 清空链表 3. 正确使用模拟单链表 1. 了解单链…

重头开始嵌入式第四十八天(Linux内核驱动 linux启动流程)

目录 什么是操作系统? 一、管理硬件资源 二、提供用户接口 三、管理软件资源 什么是操作系统内核? 一、主要功能 1. 进程管理: 2. 内存管理: 3. 设备管理: 4. 文件系统管理: 二、特点 什么是驱动…

WebGoat JAVA反序列化漏洞源码分析

目录 InsecureDeserializationTask.java 代码分析 反序列化漏洞知识补充 VulnerableTaskHolder类分析 poc 编写 WebGoat 靶场地址:GitHub - WebGoat/WebGoat: WebGoat is a deliberately insecure application 这里就不介绍怎么搭建了,可以参考其他…

yq 工具

文章目录 yq命令快速 Recipes查找数组中的项目查找并更新数组中的项目深度修剪一棵树对数组中的项目进行多次或复杂的更新按字段对数组进行排序 OperatorsOmitOmit keys from mapOmit indices from array DeleteDelete entry in mapDelete nested entry in mapDelete entry in …

【重学 MySQL】六十三、唯一约束的使用

【重学 MySQL】六十三、唯一约束的使用 创建表时定义唯一约束示例 在已存在的表上添加唯一约束示例 删除唯一约束示例 复合唯一约束案例背景创建表并添加复合唯一约束插入数据测试总结 特点注意事项 在 MySQL 中,唯一约束(UNIQUE Constraint)…

butterfly主题留言板 报错记录 未解决

新建留言板,在博客根目录执行下面的命令 hexo new page messageboard 在博客/source/messageboard的文件夹下找到index.md文件并修改 --- title: 留言板 date: 2018-01-05 00:00:00 type: messageboard ---找到butterfly主题下的_config.yml文件 把留言板的注释…

基于springboot+小程序的智慧物流管理系统(物流1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于springboot小程序的智慧物流管理系统实现了管理员、司机及用户。 1、管理员实现了司机管理、用户管理、车辆管理、商品管理、物流信息管理、基础数据管理、论坛管理、公告信息管理等。…

帮助自闭症孩子融入社会,寄宿学校是明智选择

在广州这座充满活力与温情的城市,有一群特殊的孩子,他们被称为“星星的孩子”——自闭症儿童。自闭症,这个让人既陌生又熟悉的名词,背后承载的是无数家庭的辛酸与希望。对于自闭症儿童来说,融入社会、与人交流、理解世…

【Linux第一弹】- 基本指令

🌈 个人主页:白子寰 🔥 分类专栏:重生之我在学Linux,C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持…

blender 记一下lattice

这个工具能够辅助你捏形状 这里演示如何操作BOX shift A分别创建俩对象一个BOX 一个就是lattice对象 然后在BOX的修改器内 创建一个叫做lattice的修改器 然后指定object为刚刚创建的lattice对象 这样就算绑定好了 接下来 进入lattice的编辑模式下 你选取一个点进行运动&#…

量化交易与基础投资工具介绍

🌟作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~🍊个人主页:小高要坚强的博客🍓当前专栏:Python之机器学习《Python之量化交易》Python之机器学习🍎本文内容…

谈谈留学生毕业论文如何分析问卷采访数据

留学生毕业论文在设计好采访问题并且顺利进行了采访之后,我们便需要将得到的采访答案进行必要的分析,从而得出一些结论。我们可以通过这些结论回答研究问题,或者提出进一步的思考等等。那么我们应当如何分析采访数据呢?以下有若干…

python3开头如何设置utf-8

编码格式1&#xff1a; 在源文件第一行或者第二行定义&#xff1a; # coding<encoding name> 例如&#xff1a; # codingutf-8 编码格式2&#xff1a;&#xff08;这种最流行&#xff09; 格式如下&#xff1a; #!/usr/bin/python # -*- coding: <encoding name>…

信息安全工程师(43)入侵检测概述

一、定义与目的 入侵检测&#xff08;Intrusion Detection&#xff09;是指通过对行为、安全日志、审计数据或其他网络上可以获得的信息进行操作&#xff0c;检测到对系统的闯入或闯入的企图。其主要目的是确保网络安全和信息安全&#xff0c;保护个人和机构的敏感数据免受未经…

论文阅读:Split-Aperture 2-in-1 Computational Cameras (二)

Split-Aperture 2-in-1 Computational Cameras (一) Coded Optics for High Dynamic Range Imaging 接下来&#xff0c;文章介绍了二合一相机在几种场景下的应用&#xff0c;首先是高动态范围成像&#xff0c;现有的快照高动态范围&#xff08;HDR&#xff09;成像工作已经证…