当前位置: 首页 > news >正文

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

背景

之前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()'

相关文章:

  • DeepSeek-R1技术全解析:如何以十分之一成本实现OpenAI级性能?
  • FFmpeg.NET:.NET 平台上的音视频处理利器
  • PDF转HTML 超级好用 免费在线转换PDF 完美转换格式
  • [特殊字符]《封印adb的黑暗通道:让系统文件成为魔法禁书区的终极指南》[特殊字符]
  • DeepSeek 部署实战:Ollama + 多客户端 + RAG
  • 【数三角——枚举,哈希】
  • OceanBase + DeepSeek:5分钟免费搭建企业知识库
  • K8s部署主从结构MySQL服务
  • C++的三种对象模型
  • 项目访问使用 docker bridge 网络模式(端口映射)配置详解
  • 全域旅游景区导览系统:赋能智慧旅游生态,破解行业核心难题
  • 外发抄板SCH与PCB检查系列
  • React七Formik
  • 2025.2.25学习内容
  • 【python随手记】——读取文本文件内容转换为json格式
  • 【机器学习】梯度下降法及使用一元二次方程模拟使用梯度下降法的代码实现
  • 45.matlab产生正弦叠加信号
  • 系统运维方案,系统运维的主要工作内容和运维检查单等资料,设备监控,设备运维检查(Word)
  • Redis 中有序集合(Sorted Set)的使用方法
  • java进阶学习IO流
  • 网站建设 自学 电子版 pdf下载/北京seoqq群
  • 手机网站链接微信/seo优化培训
  • 郑州装修公司排名推荐/seo关键词优化推广哪家好
  • wordpress防站/郑州网站建设用户
  • 企业网站建设市场报价/网络宣传推广方案范文
  • win2008系统asp网站建设/什么广告推广最有效果