Java web应用性能分析之【prometheus监控K8s指标说明】

devtools/2024/9/22 16:45:59/

常规k8s的监控指标

单独

1、集群维度

  • 集群状态
  • 集群节点数
  • 节点状态(正常、不可达、未知)
  • 节点的资源使用率(CPU、内存、IO等)

2、应用维度

  • 应用响应时间

  • 应用的错误率

  • 应用的请求量

3、系统和集群组件维度

  • API服务器状态
  • 控制器状态
  • etcd状态

常用的 Prometheus Operator 指标

        常用监控 Kubernetes 性能的 Prometheus Operator 指标 如下:

  1. Kubernetes 资源相关
  2. Kubernetes 存储相关
  3. kubernetes system 相关
  4. APIServer 相关
  5. kubelet 相关
  6. 集群组件
  7. 应用相关
  8. 节点相关
  9. Etcd 相关
  10. CoreDNS 相关

1、集群维度

        K8s集群指标可以按维度分为节点指标和容器pod指标。

  • 节点维度指标包括节点CPU使用率,节点内存使用率等

  • pod维度指标包括pod CPU 使用率等

1.1 Node监控


1、内存指标
 

node_memory_MemTotal_bytes: Node总内存大小node_memory_MemAvailable_bytes:Node剩余可用内存node_memory_MemAvailable_bytes :从应用程序的角度看到的可用内存;linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据。就是buffer和cache,对于内核来说 buffer和cache 都属于已经被使用的内存,只是应用程序需要内存时,如果没有足够的free内存可用,内核就会从buffer和cache中回收内存满足应用程序的请求。所以从应用程序角度来说avaliable = free + buffer +cache, 不过这只是一个理想的公式,实际中的数据会有较大偏差node已用的内存大小计算公式:node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes理想情况下节点内存使用率可以 这样计算:(1-(node_memory_Buffers_bytes+node_memory_Cached_bytes+node_memory_MemFree_bytes)/node_memory_MemTotal_bytes)*100
或者使用以下计算方式:(1-node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes)*100



2、CPU

node_load1:CPU1分钟负载node_load5:CPU5分钟负载node_load15:CPU15分钟负载node_cpu_seconds_total (counter类型指标,用来统计CPU每种模式下所花费的时间,是CPU时间片的一个累积值)CPU使用率计算公式:1-avg(irate(node_cpu_seconds_total{mode="idle"}[30m])) by (instance)
如果需要计算node节点CPU使用率:CPU使用率是cpu除空闲(idle)状态之外的其他所有CPU状态的时间总和除以总的CPU时间得到的结果。即:(1-sum(rate(node_cpu_seconds_total{mode="idle"}[1m]))by(instance)/sum(rate(node_cpu_seconds_total[1m]))by(instance))*100

如果需要采集节点vcpu指标信息:例如4u的一个节点,监控每个u的使用率,可参考公式:(1-sum(rate(node_cpu_seconds_total{mode="idle"}[1m]))by(instance,cpu)/sum(rate(node_cpu_seconds_total[1m]))by(instance,cpu))*100



3、分区使用

nodenode_filesystem_size_bytes:各个分区总空间node_filesystem_avail_bytes:各分区剩余空间


4、磁盘I/O

node_disk_io_time_seconds_total:磁盘I/O操作耗费时间每秒磁盘读取速度:
irate(node_disk_writes_completed_total[30m])每秒磁盘写入速度:
irate(node_disk_written_bytes_total[30m])每秒磁盘I/O操作耗费时间计算公式:
irate(node_disk_io_time_seconds_total[30m])每次I/O读取耗时计算公式:
irate(node_disk_read_time_seconds_total[30m]) / irate(node_disk_reads_completed_total[30m])每次I/O写入耗时计算公式:
irate(node_disk_write_time_seconds_total[30m]) / irate(node_disk_writes_completed_total[30m])磁盘IO表示磁盘的输入和输出(向磁盘写入数据,从磁盘读取数据)node_disk_reads_completed_total:读IOnode_disk_writes_completed_total :写IOsumby(instance)(rate(node_disk_reads_completed_total[5m]))sumby(instance)(rate(node_disk_writes_completed_total[5m]))

节点磁盘监控,主要说明下磁盘空间使用率相关指标,磁盘使用率通常是指挂载在某个目录的磁盘分区的使用率。一个磁盘分区会由对应的文件系统进行管理,通过该文件系统就能获取到该分区的使用情况。node_filesystem_avail_bytes 磁盘可用空间

node_filesystem_size_bytes 磁盘总空间

K8s集群中磁盘使用率可以这样计算:1-(node_filesystem_avail_bytes{fstype="ext4"})/(node_filesystem_size_bytes{fstype="ext4"})
不同的磁盘文件分区,磁盘使用情况不一样,一般关注容器引擎空间和pod容器空间的使用率:


5、网络流量

网络流量下载统计计算公式:
irate(node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[30m])*8网络流量上传统计计算公式:
irate(node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[30m])*8


1.2 pod监控


1、POD内存使用率

container_memory_rss : 是Pod实际使用内存数container_spec_memory_limit_bytes: 是分配给Pod的内存配额sum(container_memory_rss{container!="POD",container!="alermanager",image!="",pod!=""})by(pod) / sum(container_spec



2、POD的CPU使用率

        container_cpu_usage_seconds_total 是容器累计使用的CPU时间,用它除以CPU总时间,就可以得到容器的cpu使用率,首先计算容器的CPU占用时间,由于节点上的cpu有多个,所以需要将容器在每个CPU上占用的时间累加起来。pod在3m 内累积使用的CPU时间为(根据pod和namespace 进行分组查):

(sum(rate(container_cpu_usage_seconds_total{namespace="default",pod!=""}[3m]))by(pod))

        然后计算CPU的总时间,这里的CPU数量是容器分配到的CPU数量,container_spec_cpu_quota 这个指标就是容器的cpu配额。它的值是容器指定的 cpu核数100000 ,所以pod在1s内cpu总时间为: Pod 的 CPU 核数1s。

(sum(container_spec_cpu_quota{namespace="default",pod!=""})by(pod)/100000

        container_spec_cpu_quota是容器的CPU配额。所以只有配置了resource.cpu.limits CPU 的pod 才有该指标。将上面 这两个语句的结果 相除。就得到了容器的CPU利用率:

container_cpu_usage_seconds_total:container累计使用的CPU时间,除以CPU的总时间,就得到了容器的CPU使用率container_spec_cpu_quota:container的配额,为容器指定的CPU个数*100000sum(rate(container_cpu_usage_seconds_total{image!="",container!="POD",container!=""}[1m])) by (pod,namespace) / (sum(container_spec_cpu_quota{image!="",container!="POD",container!=""}/100000) by (pod,namespace)) * 100



3、POD的文件系统使用量
 

sum(container_fs_usage_bytes{image!="",container!="POD",container!=""}) by(pod, namespace) / 1024 / 1024 / 1024


http://www.ppmy.cn/devtools/57190.html

相关文章

行人检测技术:思通数科大模型在自动驾驶安全中的应用

在自动驾驶技术飞速发展的今天,行人检测已成为确保道路交通安全的关键技术之一。本文将探讨如何结合思通数科大模型和计算机视觉技术,实现在城市交通环境中对行人的高效检测,为自动驾驶车辆提供必要的行人安全保障。 引言 行人检测技术是利…

python-字典

为什么需要字典 字典的定义 字典数据的获取 字典的嵌套 嵌套字典的内容获取 字典的注意事项: 字典的常用操作 新增元素 更新元素 删除元素 清空字典 汇总 字典的特点

Android常用加解密算法总结

Android开发中对于数据的传输和保存一定会使用加密技术,加密算法是最普遍的安保手段,多数情况数据加密后在需要使用源数据时需要再进行解密,但凡是都有例外。下面从可逆加密、不可逆、不纯粹加密三种方式记录一下常见的加解密算法。 加密技术…

分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列

分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列 1.相关链接2.代码【仅分析带通信算子的Pattern】3.在实际工程中发现 [all_gather, matrix_mm_out]频率最高4.[Ascend MC2](https://gitee.com/ascend/MindSpeed/blob/master/docs/features…

Excel+vue+java实现批量处理功能

需求背景: 产品创建流程比较复杂,有时候需要一次性创建多至10个,所以做了Excel维护产品信息,直接导入创建的功能。能极大提高效率。 简要概括实现: 一、参考单个创建,设计创建模板,表头对应填写字段名&…

详解 HTTP 中间人攻击

什么是中间人攻击? 攻击者将自己插入通信过程中,以窃取,篡改数据。通信的两端不知道中间人的存在,他们以为在与对方直接通信,实际上他们的通信已经被监听或干扰。WIFI 路由器被破解之后就能进行中间人攻击。 中间人攻…

基于Java的微信记账小程序【附源码】

摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,记账微信小程序被用户普遍使用,为方便用户能够…

介绍几种 MySQL 官方高可用方案

前言: MySQL 官方提供了多种高可用部署方案,从最基础的主从复制到组复制再到 InnoDB Cluster 等等。本篇文章以 MySQL 8.0 版本为准,介绍下不同高可用方案架构原理及使用场景。 1.MySQL Replication MySQL Replication 是官方提供的主从同…