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

如何在Grafana(PostgreSQL数据源)统计未安装指定包的主机数量?

解决PostgreSQL数据源Grafana统计未安装指定包的服务器数量问题

核心思路

要统计未安装abc包的服务器,关键是排除所有至少有一条abc包已安装记录的服务器——哪怕某服务器有abc包的未安装版本记录,但只要存在已安装项,就不算未安装。

假设表结构

先明确常见的包管理表结构(如果你的表字段不同,对应调整即可):

  • 表名:server_packages
  • 关键字段:server_name(服务器名称)、package_name(包名)、install_status(安装状态,如installed/missing)

正确SQL语句

情况1:只有包记录表,无单独服务器表

SELECT COUNT(DISTINCT sp.server_name) AS missing_abc_count
FROM server_packages sp
WHERE sp.server_name NOT IN (
    -- 先找出所有已安装abc包的服务器
    SELECT DISTINCT server_name
    FROM server_packages
    WHERE package_name = 'abc'
      AND install_status = 'installed'
)

情况2:有单独的服务器列表(如servers表)

这种方式效率更高,直接从服务器表关联查询:

SELECT COUNT(s.server_name) AS missing_abc_count
FROM servers s
LEFT JOIN server_packages sp
  ON s.server_name = sp.server_name
  AND sp.package_name = 'abc'
  AND sp.install_status = 'installed'
-- 关联后无匹配记录,说明该服务器未安装abc包
WHERE sp.server_name IS NULL

常见错误原因

你之前的SQL大概率犯了以下某类错误:

  • 直接用WHERE package_name != 'abc'统计:会把已安装abc的服务器的其他包记录也纳入统计,导致结果虚高
  • 未对服务器名称去重:同一服务器的多条非abc包记录会被重复计数
  • 没过滤install_status:把abc包的未安装版本记录当成了“未安装该包”,忽略了服务器已存在已安装的abc项

Grafana配置

把上述SQL作为数据源查询,然后用Stat面板展示返回的missing_abc_count字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:05:02