Grafana使用日志4--直接对接Zabbix数据库的一些注意点

news/2025/2/26 5:19:48

背景

之前zabbix有一个需求是监控每一笔交易的耗时,即结束时间-开始时间,现在由于业务需求,需要在Grafana中统计所有交易时间的占比,分组并展示
但是接入的zabbix插件并不支持该功能,zabbix插件只能够查询出每个interval间隔内的数据并展示,并不能将所有时间内的数据汇总并分析,所以冥思苦想之下,只能接入zabbix的mysql,用sql脚本的形式获取数据

设计思路

思路就是,把对应的host group中的所有的host对应的每一个item,从item表中取出并在history表中查询一段时间内的所有数据,并按照大小进行分组

接入Zabbix数据源

data source选择mysql,然后只需要填入API信息以及用户名密码,点击最下面的save&test就可以看连接是否成功了
在这里插入图片描述

最终实现

SELECT 
    i.name AS item_name,                      -- Item 名称
    CASE 
        WHEN hu.value BETWEEN 0 AND 1000 THEN '[0s-1s]' 
        WHEN hu.value BETWEEN 1000 AND 2000 THEN '[1s-2s]' 
        WHEN hu.value BETWEEN 2000 AND 3000 THEN '[2s-3s]' 
        WHEN hu.value BETWEEN 3000 AND 4000 THEN '[3s-4s]' 
        WHEN hu.value BETWEEN 4000 AND 5000 THEN '[4s-5s]'
        ELSE 'Other' 
    END AS value_range,
    COUNT(*) AS count
FROM 
    history hu
JOIN 
    items i ON hu.itemid = i.itemid
JOIN 
    hosts h ON i.hostid = h.hostid
JOIN 
    hosts_groups hg ON h.hostid = hg.hostid
JOIN 
    hstgrp g ON hg.groupid = g.groupid
WHERE 
    g.name IN ('host group name')
    AND i.name REGEXP '^transaction time \\[$TXN_TYPE\\]' 
    AND hu.clock BETWEEN '$__unixEpochFrom()' AND '$__unixEpochTo()'
GROUP BY 
    value_range
ORDER BY 
    value_range; 

问题记录

^transaction time [$TXN_TYPE] 无法获取到数据

解决方案

在 MySQL 中,使用 REGEXP 时,特殊字符(如方括号 [ ])具有特定的含义。例如,[ ] 通常用于定义字符集(例如,[a-z] 匹配所有小写字母)。因此,您的正则表达式 ^Transaction Time of type [Sale] 中的方括号被解释为字符集匹配,而不是字面匹配。
为了让 MySQL 将方括号视为普通字符,而不是正则表达式的特殊符号,需要对它们进行 转义。

正确写法如下:

i.name REGEXP '^transaction time \\[$TXN_TYPE\\]' 

$__timeFilter(hu.clock)没有作用

本来没有定义查询的时间范围,后来想要根据Grafana上的时间自动修改时间,于是想着用上$__timeFilter(hu.clock)这个方法,但是始终检索不出来任何结果,于是看了下它的查询

调查

发现他会把这个方法转换成如下的语句

    AND hu.clock BETWEEN FROM_UNIXTIME(1704179643) AND FROM_UNIXTIME(1735802043)

from_unixtime是MySQL里的时间函数date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串后面的 '%Y%m%d' 主要是将返回值格式化。
百度百科附上: https://baike.baidu.com/item/from_unixtime/1801387?fr=ge_ala

但是在数据库中,该clock字段就是按照时间戳来保存的,所以说根本就不需要转换成字符串格式

修改sql语句

    AND hu.clock BETWEEN '$__timeFrom()' AND '$__timeTo()'

依旧无效,于是查看官网上的说明,发现KaTeX parse error: Expected group after '_' at position 1: _̲_timeFrom()其实还是…__unixEpochFrom()和$__unixEpochTo()

最终解决方案

AND hu.clock BETWEEN '$__unixEpochFrom()' AND '$__unixEpochTo()'

http://www.niftyadmin.cn/n/5868019.html

相关文章

GaussDB 闪回恢复技术详解与应用实践

一、概述 闪回恢复(Flashback Recovery)​​ 是 GaussDB 数据库提供的一种高可用性功能,允许用户将数据库快速恢复到过去某一时间点或事务状态,以应对数据误删、逻辑错误或部分数据损坏等问题。相较于传统的全量备份增量恢复方案…

【Mastering Vim 2_07】第六章:正则表达式和 Vim 宏在代码重构中的实战应用

【最新版《Mastering Vim》封面,涵盖 Vim 9.0 版特性】 文章目录 第六章 正则表达式和 Vim 宏在代码重构中的应用1 substitute 替换命令2 关于 substitute 的精确匹配3 参数列表 arglist 在跨文件操作中的应用4 Vim 正则表达式基础5 关于 magic 模式5.1 magic 模式5…

AI创作教程:用deepseek和猫箱做互动故事游戏

年轻的时候我看过典型的玛丽苏文学、小妞文学,老了虽然识破这是给女孩编织的琉璃般的梦,看起来梦幻美丽其实一击就碎,会伤人的碎渣渣。【叠甲完毕】 本来我想用橙光的,但是橙光的话,最好把剧本和立绘都多打磨一下。快…

自动化部署工具Jenkins和Jpom的区别及优缺点,你选择用哪个?

Jenkins和Jpom都是常用的自动化部署工具,但它们在功能、使用场景和架构上有显著差异。以下是它们的优缺点对比: Jenkins 优点: 成熟稳定 :Jenkins是开源CI/CD工具,拥有庞大的社区支持和丰富的插件生态。 高度可扩展 &a…

如何把图片或者图片地址存到 MySQL 数据库中以及如何将这些图片数据通过 JSP 显示在网页中

如何优雅地管理图片:从MySQL数据库存储到JSP展示的全流程解析 在互联网时代,一张引人入胜的图片往往能为网站带来巨大的流量。而作为开发者的我们,如何高效地管理和展示这些图片资源则成为了一项重要的技术挑战。今天,我们就一起…

理解 MHA、GQA、MQA 和 MLA:多头注意力的变种及其应用

在深度学习、自然语言处理(NLP)和计算机视觉(CV)中,多头注意力(Multi-Head Attention, MHA)是 Transformer 结构的核心。近年来,MHA 产生了多个变体,如 GQA(G…

Maven导入hutool依赖报错-java: 无法访问cn.hutool.core.io.IORuntimeException 解决办法

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、报错二、解决办法 一、报错 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-captcha</artifactId> </de…

MATLAB应用介绍

MATLAB 数据分析 MATLAB 在数据分析方面的强大功能和优势&#xff0c;涵盖数据处理、分析、可视化、结果分享等多个环节&#xff0c;为工程师和科学家提供了全面的数据分析解决方案。 MATLAB 数据分析功能概述&#xff1a;工程师和科学家利用 MATLAB 整理、清理和分析来自气候学…