You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取内存使用率百分比?基于Collectd与InfluxDB 1.5.1的采集场景

计算InfluxDB中Collectd采集的Web服务器内存使用率百分比

嗨,我来帮你搞定这个内存使用率计算的问题!根据你提供的Collectd采集的内存序列,我们可以通过InfluxQL查询直接算出内存使用率的百分比,下面是具体的步骤和查询语句:

先明确计算逻辑

内存使用率的核心计算方式是:

内存使用率% = (总内存 - 空闲内存 - 缓存内存 - 缓冲内存) / 总内存 × 100

这里要注意,Collectd的memory插件通常会采集type_instance=total(总内存)这个指标,你的序列里没列全,假设已经正常采集到这个指标了(如果还没的话,要确保Collectd配置里开启了该指标的采集)。

对应的InfluxQL查询语句

因为你的采集间隔是60秒,我们可以按相同的时间粒度聚合计算,查询语句如下:

SELECT 
  100 - ((mean("value") WHERE "type_instance" = 'free') + (mean("value") WHERE "type_instance" = 'cached') + (mean("value") WHERE "type_instance" = 'buffered')) / (mean("value") WHERE "type_instance" = 'total') * 100 AS "memory_usage_percent"
FROM "memory_value"
WHERE "host" = 'webserver' AND "type" = 'memory'
-- 可按需添加时间范围,比如过去24小时:AND time >= now() - 24h
GROUP BY time(60s)

对查询的解释

  • 使用mean("value")是为了确保每个60秒时间窗口内只有一个聚合值,避免采集过程中出现重复数据点干扰结果
  • 分子部分是空闲、缓存、缓冲内存的总和,用总内存减去这个值,得到的是实际被应用占用的内存(因为缓存和缓冲内存是可以被系统回收复用的,这也是多数监控工具计算“实际使用率”的标准方式)
  • 如果你的Collectd采集了type_instance=used指标,也可以简化成(mean("value") WHERE "type_instance" = 'used') / (mean("value") WHERE "type_instance" = 'total') * 100 AS "memory_usage_percent",但要注意:Collectd的used可能包含了缓存和缓冲内存,这个结果和上面的计算会有差异,你可以根据自己的需求选择。

小提示

如果某些时间点某个指标缺失,可以在查询里加上fill(0)来处理空值,比如在GROUP BY time(60s)后面加上fill(0),不过正常采集的情况下一般不需要这个操作。

内容的提问来源于stack exchange,提问作者nbari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:56:34