grafana+prometheus合理处理查询结果为空的情况

    最近在利用grafana+prometheus监控linux文件系统是否挂载时,碰到了一个比较刺手的问题,就是利用PromQL查询时遇到了返回结果为空的情况,导致panel无法展示信息的情况。

    我的需求:

    例如lustre文件系统成功挂载时,显示绿色,lustre文件系统没有挂载时,显示红色,表明当前的挂载出现了问题,并且当前的图形的图例要显示该台服务器的主机名。如下所示:

    在实现这个功能时,使用了几种方法:

    1、通过node_filesystem_size_bytes查询文件系统的可用容量

     例如:   

node_filesystem_size_bytes{nodename="node0142",fstype="lustre"}

     使用该语句查询的结果存在两种情况,一是文件系统存在的话返回正常的结果,二是文件系统不存在的话会返回empty query result;

 正常的返回结果:

文件系统不存在的返回结果:

    返回结果为Empty query result的时候,上述的显示图就不会在panel中,因为没有数据,整个panel面板就是空的,而我想要的结果是即使是空的,也可以显示主机名,并且状态置为红色,以便一眼就能看出哪些服务器的文件系统掉了。

    2、使用vector(0)处理空的返回结果

   第一种方法无法处理返回结果为空的情况,因此便想到能否利用某种方法代替默认的行为,例如没有数据的情况就返回0。幸运的是vector(0)语法可以处理这种情况,如下所示:

node_filesystem_size_bytes{nodename="node0142",fstype="lustre"} or vector(0)

利用该方法,当文件系统不存在时,默认的查询结果就是0,而不是empty query result,如图所示:

  但不幸的是,该方法返回的结果key-value中,只有value,没有key,这也导致了另外一个问题,我无法获取key中的nodename label去作为显示图标的legend。

    呈现的结果是虽然有图展示,但是图例只有value,无法获取服务器的主机名。

    3、获取多个文件系统的容量

    基于第二种方法出现的问题,此时想可以通过查询多个文件系统的容量,例如挂载文件系统和根文件系统,因为正常的服务器肯定有根文件系统,使得查询的结果中包含nodename的label,如图所示:

    这种方式解决的非正常计算节点的问题,此时只需要设置返回结果的阈值,例如挂载文件系统容量为10T,根文件系统为500G,若查询结果为500G,则设置查询结果小于等于500G时,显示红色,也可以达到目的。

    但是对于正常挂载文件系统的节点,这样查询的结果则会返回两组键值对向量:

    因此这样的结果会导致在panel面板中,会有两个图呈现:

    这样的结果也不是想要的,最终结果是想要呈现lustre文件系统的挂载状态。

    4、使用max等函数处理多个文件系统查询的结果

    既然多个文件系统查询有多个结果,可以用prometheus函数处理查询结果,对结果进行过滤,例如使用max函数获取最大容量的文件系统:

     但是这样的结果最终也是查询的key-value向量中缺少key额值,无法对获取key中的label 作为图标的legend。

    5、终极解决方法:使用max by方法

max by (nodename)(node_filesystem_size_bytes{nodename="node0001",fstype=~"lustre|rootfs"})

    最终返回的查询结果中,既有key,也有value,完美解决了之前的方法中所带来的问题。

     最终的文件系统监控状态如图所示:

     红色代表相应的文件系统没有挂载的,绿色代表挂载正常。

PS:图中的显示插件是traffic light

       下载链接:Traffic Lights plugin for Grafana | Grafana Labs

### 配置 PrometheusGrafana 实现 Flink 的监控 #### 安装与配置 Prometheus 为了实现对 Flink 的有效监控,Prometheus 是核心组件之一。由于 Flink on YARN 作业的动态特性,直接由 Prometheus 抓取数据存在挑战。因此引入了 PushGateway 中间件来解决这一问题。 - **安装 Prometheus** 下载并解压官方提供的二进制文件即可完成安装过程[^1]。 - **配置 Prometheus** 编辑 `prometheus.yml` 文件,在 scrape_configs 节点下添加针对 PushGateway 数据源的抓取规则: ```yaml scrape_configs: - job_name: 'pushgateway' static_configs: - targets: ['localhost:9091'] ``` 此设置使得 Prometheus 可以定期从指定地址获取推送过来的数据。 #### 使用 PushGateway 收集临时性度量指标 对于像 Flink 这样的批处理或流处理框架来说,其任务可能具有短暂生命周期的特点。此时可以通过修改 Flink 应用程序代码,使其能够向 PushGateway 发送自定义 Metrics;或者利用 Flink 提供的内置 Metric Reporter 功能指向 PushGateway 地址。 当应用程序结束运行之后,这些短期存在的 Metrics 不会立即消失而是继续存在于 PushGateway 上等待被采集[^3]。 #### 安装与配置 Grafana Grafana 主要用于可视化展示收集到的各种性能指标信息。 - **下载与启动 Grafana** 访问镜像站点加速下载速度,并按照常规方式启动服务进程[^2]: ```bash nohup ./bin/grafana-server web & ``` 默认情况下监听于本地 3000 端口上提供 Web UI 接入支持,默认用户名密码均为 admin。 - **连接至 Prometheus 数据源** 登录后进入 Data Sources 页面新增一个名为 "Prometheus" 类型的选择项,填入之前部署好的 Prometheus Server URL 即可建立关联关系。 - **创建仪表板** 导入预先设计好适用于 Flink 监控场景下的模板化面板布局方案(例如 ID 为 11049),这样就能快速获得一组合理的视图组合来进行日常运维管理操作了。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值