node-exporter常用指标含义

本文详细介绍了Prometheus监控系统中的关键性能指标,包括CPU、内存、磁盘、网络等资源的使用情况,并提供了具体的Prometheus查询语句示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.gitbook.com/book/songjiayang/prometheus/details (Prometheus 实战) 

https://github.com/1046102779/prometheus (Prometheus 非官方中文手册)

http://www.bubuko.com/infodetail-2004088.html (基于prometheus监控k8s集群)

http://www.cnblogs.com/sfnz/p/6566951.html (安装prometheus+grafana监控mysql redis kubernetes等,非docker安装)

https://github.com/kayrus/prometheus-kubernetes (prometheus-kubernetes) 

 

https://github.com/prometheus/node_exporter (prometheus/node_exporter)

http://dockone.io/article/2579 ( Prometheus在Kubernetes下的监控实践)

 

https://github.com/prometheus/prometheus/releases (prometheus 下载列表)

https://github.com/prometheus/node_exporter/releases/ (node_exporter下载列表)

 

 

 

前提概念:

1.时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列

2.     

=:选择正好相等的字符串标签

!=:选择不相等的字符串标签

=~:选择匹配正则表达式的标签(或子标签)

!~:选择不匹配正则表达式的标签(或子标签)

3.

s:seconds

m:minutes

h:hours

d:days

w:weeks

y:years

       注: [5m]指过去的5分钟内

4.操作符

bool

and

or

unless

on

without : without(label)在结果中移除括号内的标签和值

by : by(label)在结果中只保留括号内的标签和值

 

1.CPU空闲率

sum(irate(node_cpu{mode="idle", instance="134node"}[1m])) * 100 / count_scalar(node_cpu{mode="user", instance="134node"})

注释:

## instance:指的是label,具体根据实际配置,也可用正则匹配

## mode :      指cpu模式,node-exporter已经抓取出来,可以在node-exporter部署ip:9100这个网址上查看

                    例如:http://172.17.123.134:9100/metrics

## sum()函数: 指将括号内的指标值求和

## irate()函数: 指计算范围向量中时间序列的每秒钟的瞬时(per-second)速度(calculates the 

                          per-second instant rate of increase of the time series in the range vector)

## count_scalar()函数 : 指将时间序列向量中的元素个数作为标量返回(returns the number of     

                                      elements in a time series vector as a scalar)

 

2.CPU负载率

node_load1{instance="134node"} / count by(job, instance)(count by(job, instance, cpu)(node_cpu{instance="134node"}))

注释:

## node_load1 : 指1分钟内cpu平均负载,同样cpu_load5指5分钟内cpu平均负载,cpu_load15指15    

                           分钟内cpu平均负载

## count : 指聚合向量中的每个元素(即计数)

## 待添加后续注解

 

3.可用内存

node_memory_MemAvailable{instance="88node"}

注释:

## node_memory_MemAvailable :Memory information field MemAvailable, node-exporter已经抓取出来,只需查询展示即可;

    注意:该指标针对不同的系统是采集不同的,CentOS6.X 上就采集不到这个指标;CentOS7上可以;

 

4.空闲文件系统空间

sum(node_filesystem_free{fstype="xfs",instance="88node"})   

sum(node_filesystem_free{fstype="ext4",instance="134node"})

## node_filesystem_free: Filesystem free space in bytes

## fstype 有如下种类:

## aufs :  指联合文件系统,用来把原本分离的两个文件系统联合在一起

## cgroup : Cgroups(控制组)是Linux内核的一个功能,用来限制、统计和分离一个进程组的资源  

                   (CPU、内存、磁盘输入输出等)。

## tmpfs : tmpfs是一种虚拟内存文件系统,而不是块设备。

## overlay : 一个 overlay 文件系统包含两个文件系统,一个 upper 文件系统和一个 lower 文件系  

                      统,是一种新型的联合文件系统 

### proc、xfs、mqueue等等。

 

5.swap硬盘交换区:从硬盘到内存或从内存到硬盘,虚拟内存交换

 

Swap free :

node_memory_SwapFree{instance="134node"}

## node_memory_SwapTotal: Memory information field SwapTotal.

## swap :类似于可以把硬盘当内存用,那么这一部分内存一般就叫做swap

 

Swap Usage :

node_memory_SwapTotal{instance="134node"} - node_memory_SwapFree{instance="134node"}

## node_memory_SwapFree: Memory information field SwapFree

 

Swap I/O(in):

rate(node_vmstat_pswpin{instance="88node"}[1m]) * 4096 or irate(node_vmstat_pswpin{instance="88node"}[5m]) * 4096

 

Swap I/O(out):

rate(node_vmstat_pswpout{instance="88node"}[1m]) * 4096 or irate(node_vmstat_pswpout{instance="88node"}[5m]) * 4096

 

## vmstat :vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值, 

                    包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

## pswpin/s:每秒从硬盘交换区传送进入内存的次数。

## pswpout/s:每秒从内存传送到硬盘交换区的次数。

## pswpin/s、 pswpout/s描述的是与硬盘交换区相关的交换活动。交换关系到系统的效率。交换区在

     硬盘上对硬盘的读,写操作比内存读,写慢得多,因此,为了提高系统效率就应该设法减少交换。  

     通常的作法就是加大内存,使交换区中进行的交换活动为零,或接近为零。如果swpot/s的值大

     于 1,预示可能需要增加内存或减少缓冲区(减少缓冲区能够释放一部分自由内存空间)。

 

Swap free 率(百分百)

(node_memory_SwapFree{instance=~"$server"}  /node_memory_SwapTotal{instance=~"$server"}) * 100

 

6.CPU使用率

avg without (cpu) (irate(node_cpu{instance="88node", mode!="idle"}[5m]))

## avg : 平均值

 

7.网路使用情况

上传速率:

     irate(node_network_transmit_bytes{device!="lo",instance="88node"}[1m])

下载速率:

     irate(node_network_receive_bytes{device!="lo",instance="88node"}[1m])

## eth0: ethernet的简写,一般用于以太网接口。

## wifi0:wifi是无线局域网,因此wifi0一般指无线网络接口。

## ath0: Atheros的简写,一般指Atheros芯片所包含的无线网络接口。

## tunl0:tunl0是隧道接口,封装数据的时候使用

## lo: local的简写,一般指本地环回接口。

 

8.内存使用率

已用内存:(总内存-空闲内存-缓存=已使用内存)

      node_memory_MemTotal{instance="88node"} -  

      node_memory_MemFree{instance="88node"} - 

      node_memory_Cached{instance="88node"} - 

      node_memory_Buffers{instance="88node"} - 

      node_memory_Slab{instance="88node"}

 

Buffer缓存:

     node_memory_Buffers{instance="88node"}

Cached缓存:

     node_memory_Cached{instance="88node"}  

     + node_memory_Slab{instance="88node"}

Free空闲内存:

     node_memory_MemFree{instance="88node"}

 

可用内存占比:

     (node_memory_MemAvailable{instance="88node"} / 

     node_memory_MemTotal{instance="88node"}) * 100

 

## total:总计物理内存的大小。

## Free:空闲内存有多少。

## Shared:多个进程共享的内存总额。

## Buffers:表示buffers cache的内存数量,一般对块设备的读写才需要缓冲

## Cached:表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被    

                  cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就                                                                                                                                                    

                  说明文件系统效率比较好

## Slab:slab分配器不仅可以提供动态内存的管理功能,而且可以作为经常分配并释放的内存的缓存

## MemAvailable: Free + Buffers + Cached - 不可回收的部分。不可回收部分包括:共享内存段,     

                             tmpfs,ramfs等

 

9.磁盘读写(IOPs)

磁盘每秒读取(5分钟内)

sum by (instance) (irate(node_disk_reads_completed{instance="88node"}[5m]))

##node_disk_reads_completed: The total number of reads completed successfully

磁盘每秒写入(5分钟内)

sum by (instance)(irate(node_disk_writes_completed{instance="88node"}[5m]))

##node_disk_writes_completed :The total number of writes completed successfully.

使用I/O的毫秒数(5分钟内)

sum by (instance) (irate(node_disk_io_time_ms{instance="88node"}[5m]))

##node_disk_io_time_ms: Total Milliseconds spent doing I/Os

磁盘每秒读写总数(5分钟内)

sum by (instance) (irate(node_disk_reads_completed{instance="88node"}[5m])) + sum by (instance) (irate(node_disk_writes_completed{instance="88node"}[5m]))

 

10.I/O Usage

磁盘读取总数(1分钟内)

sum(irate(node_disk_bytes_read{instance="88node"}[1m]))

##node_disk_bytes_read : The total number of bytes read successfully(成功读取的字节数)

磁盘写入总数(1分钟内)

sum(irate(node_disk_bytes_written{instance="88node"}[1m]))

##node_disk_bytes_written :The total number of bytes written successfully(成功写入的字节数)

使用I/O的毫秒数(1分钟内)

sum(irate(node_disk_io_time_ms{instance="88node"}[1m]))

##node_disk_io_time_ms :Total Milliseconds spent doing I/Os.(使用IO的总毫秒数)

 

11.文件系统空闲空间

最低值:

min(node_filesystem_free{fstype=~"xfs|ext4",instance="88node"} / node_filesystem_size{fstype=~"xfs|ext4",instance="88node"})

最高值:

max(node_filesystem_free{fstype=~"xfs|ext4",instance="88node"} / node_filesystem_size{fstype=~"xfs|ext4",instance="88node"})

## ext4是第四代扩展文件系统(英语:Fourth EXtended filesystem,缩写为ext4)是linlli

     linux下的日志文件系统,ext4的文件系统容量达到1EB,而文件容量则达到16TB

## XFS是一个64位文件系统,最大支持8EB减1字节的单个文件系统,实际部署时取决于宿主操作系  

     统的最大块限制。对于一个32位linux系统,文件和文件系统的大小会被限制在16TB。

 

 

 

 

<think>好的,用户让我介绍一下这个PromQL查询:increase(coredns_panic_count_total{job!~"k8s-(.*)-prometheus|node-exporter"}[5m]) > 0。我需要先分解这个查询的各个部分,然后解释它的作用和应用场景。 首先,用户可能是在监控Kubernetes环境中的CoreDNS实例,因为CoreDNS是K8s中常用的DNS服务。这个查询的目的是检测CoreDNS是否发生了panic,也就是运行时发生了严重错误导致崩溃重启的情况。panic在Go语言中表示不可恢复的错误,所以监控这个指标非常重要。 指标名称是coredns_panic_count_total,这是一个计数器,累计发生panic的次数。用户使用了increase函数,计算5分钟内该指标的增长量。如果这个增长量大于0,说明在最近5分钟内有新的panic发生,需要触发告警。 接下来是标签过滤部分:{job!~"k8s-(.*)-prometheus|node-exporter"}。这里使用了正则表达式来排除job标签匹配特定模式的情况。job标签通常用于标识监控目标的类型,比如Prometheus或者Node Exporter指标。用户可能在不同的job中部署了多个CoreDNS实例,但只想关注不属于k8s-prometheusnode-exporter相关的那些实例。这可能是因为某些环境中的CoreDNS实例被错误地标记,或者有多个监控Job需要排除,避免误报。 用户可能的需求是确保CoreDNS的稳定性,因为DNS问题会影响整个集群的服务发现和网络通信。一旦CoreDNS发生panic,可能会导致DNS解析失败,进而影响Pod之间的通信,甚至服务不可用。因此,及时检测到panic事件对于维护集群健康至关重要。 需要考虑到用户可能是在一个复杂的K8s环境中,可能有多个监控系统或不同的部署方式,所以需要排除特定的job标签。另外,用户可能已经知道某些特定的job(如Prometheus自身的监控)不相关,或者这些job中的CoreDNS实例不需要被监控,因此需要过滤掉。 潜在的问题可能包括正则表达式是否正确排除了所有不需要的job,或者是否有其他需要排除的标签。另外,increase函数的时间窗口选择是否正确,5分钟是否足够捕获panic事件,或者是否需要调整时间范围。例如,如果panic发生的时间间隔较短,可能需要更短的时间窗口来及时告警,但也要避免因时间窗口过短而漏掉事件。 另外,用户可能希望了解如何进一步优化这个查询,例如结合其他指标(如CoreDNS的请求处理延迟或错误率)来全面监控DNS服务状态。或者是否需要设置不同的告警级别,根据panic发生的频率来决定紧急程度。 总结来说,这个查询用于监控CoreDNS实例在最近5分钟内是否发生了panic,排除特定job标签的实例,以便在发生panic时触发告警,帮助用户及时处理问题,确保集群DNS服务的稳定性。用户可能需要进一步验证标签过滤的准确性,并考虑与其他监控指标结合使用,以全面掌握CoreDNS的健康状况。</think>您提供的 PromQL 查询用于监控 CoreDNS 的运行时 `panic` 事件,并通过过滤条件聚焦特定的监控目标。以下是详细解析: --- ### 查询结构解析 ```promql increase(coredns_panic_count_total{job!~"k8s-(.*)-prometheus|node-exporter"}[5m]) > 0 ``` 1. **核心指标** `coredns_panic_count_total`: - CoreDNS 的计数器指标,表示服务启动以来发生 `panic`(Go 运行时严重错误)的总次数。 - `panic` 通常意味着程序遇到无法恢复的错误并崩溃重启,需立即关注。 2. **过滤条件** `{job!~"k8s-(.*)-prometheus|node-exporter"}`: - `job!~"..."`:排除 `job` 标签匹配正则表达式 `k8s-(.*)-prometheus` 或 `node-exporter` 的监控目标。 - 常见场景:过滤掉 Kubernetes 集群中与 Prometheus 自身监控或 Node Exporter 相关的 CoreDNS 实例(可能误报或不相关)。 3. **函数与时间窗口** - `increase(...[5m])`:计算过去 5 分钟内 `coredns_panic_count_total` 的增长量(即新增的 `panic` 次数)。 - `> 0`:当增长量大于 0 时触发告警(即检测到至少一次新的 `panic`)。 --- ### 查询用途 1. **异常检测** - 当查询结果为 `true`( > 0)时,表示 CoreDNS 在最近 5 分钟内发生了 `panic`,需立即检查服务日志和稳定性。 2. **告警规则** 此查询通常用Prometheus 告警规则(如 `alertmanager`),当条件满足时通知运维人员。例如: ```yaml - alert: CoreDNSPanicOccurred expr: increase(coredns_panic_count_total{job!~"k8s-(.*)-prometheus|node-exporter"}[5m]) > 0 for: 0m labels: severity: critical annotations: summary: "CoreDNS panic detected ({{ $labels.instance }})" description: "CoreDNS instance {{ $labels.instance }} experienced a panic in the last 5 minutes." ``` --- ### 典型场景 1. **Kubernetes 集群监控** CoreDNS 是 Kubernetes 默认的 DNS 服务,其崩溃会导致集群内服务发现失效。此查询可帮助及时发现 DNS 服务异常。 2. **故障排查** 结合日志(如 CoreDNS 的 `logs` 或 `dnsmasq` 日志)定位 `panic` 原因,常见原因包括: - 配置错误(如无效的 Corefile)。 - 内存或资源不足。 - 插件冲突(如 `forward`、`cache` 插件问题)。 --- ### 优化建议 1. **精准过滤** - 确保正则表达式 `k8s-(.*)-prometheus|node-exporter` 与实际环境中的 `job` 标签匹配,避免遗漏或误过滤。 2. **结合其他指标** - 监控 `coredns_health_failures_total`(健康检查失败次数)。 - 监控 `coredns_dns_request_count_total`(DNS 请求量突降可能暗示服务中断)。 3. **告警分级** - 若 `panic` 后 CoreDNS 自动恢复,可设为低优先级告警;若频繁发生,需升级为紧急告警。 --- ### 示例输出解读 假设查询返回: ```text coredns_panic_count_total{instance="10.0.0.1:9153", job="k8s-coredns"} 3 ``` 表示该 CoreDNS 实例在 5 分钟内新增了 3 次 `panic`,需立即介入处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值