百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

不背锅运维:Zabbix数据查询技巧分享:快速找出zabbix的sql

mhr18 2024-09-26 14:28 23 浏览 0 评论

写在开篇

?

当zabbix监控的体量上去后,数据量就会非常大,在web页面上总是查询很慢、甚至查询失败时。又或者,当其他用户向你提出一些查询需求,特别是在web页面很难做到的个性化查询时,那么就要编写查询sql了。本篇不是sql教程,而是分享如何快速获得查询zabbix数据的sql语句,并在其基础上改造成适合你的sql。

?

查询需求

?

当用户向你提出这样一个需求,需要查询某台主机的所有监控项、监控key、触发器名称以及告警级别。这时候,你可能第一时间就是要登录到数据库去看所涉及到的表的表结构、搞清楚他们之间的关系,然后再写个多表关联查询的sql语句,如果你对zabbix的表非常熟悉,可能搜的一下就搞定了。那要是不熟悉呢?实话说,监控项和触发器的关系,我就找了大半天(尴尬...)。按正常想法,肯定涉及到triggers表,但看了triggers的表结构,又特么跟items表没关系。那我就想,肯定还有一张中间表,找了大半天没找到,最后发现这张中间表的名字叫做functions,我了个去。特么叫这个名字。。。我。。。一万匹草泥马奔腾而过。。。打死我都没想到,是这个中间表,尴尬。

?

SQL> desc functions;
Name       Type           Nullable Default Comments 
---------- -------------- -------- ------- -------- 
FUNCTIONID NUMBER(20)                               
ITEMID     NUMBER(20)                               
TRIGGERID  NUMBER(20)                               
NAME       NVARCHAR2(12)  Y        ''               
PARAMETER  NVARCHAR2(255) Y        '0'              

技巧实战

?

结合我踩过的坑,以及依托用户侧的查询需求,那么正式分享一下我是怎么快速解决这个需求的。好了,废话不说,开撸!!!(O(∩_∩)O 小撸怡情,大撸伤身啊!)

?

1、首先开启调试模式

2、然后随便找一台主机并进入触发器

3、接着创建一个测试的触发器

4、触发器名称随便给就好,然后添加表达式

5、随便选个监控项

6、最后添加这个触发器

7、接着把调试模式框框中的sql都复制到文本文件里,方便等会查找

8、搜索刚才创建的触发器名称test-a,找到相关的sql

9、将原滋原味的sql拿到PLSQL Developer 执行一下看看(我的是oracle环境)

10、根据实际需求改造查询sql

?

接下来就是慢慢改造这条sql了,本篇只是分享如何快速获得zabbix的sql,不讲改造的过程,下面我直接分享出改造后的sql,以及查询结果。

?

改造后的sql

select data.host "主机", data.name "监控项", data.key_ "监控项KEY", data.description "触发器名称", data.alert_level "告警级别" 
FROM (
SELECT
h.host,
i.name,
i.key_,
t.description,
CASE t.priority
  WHEN 0 THEN
  '未分类'
  WHEN 1 THEN
  '信息'
    WHEN 2 THEN
  '警告'
    WHEN 3 THEN
  '一般严重'
    WHEN 4 THEN
  '严重'
    WHEN 5 THEN
  '灾难'
  ELSE
  '未知的告警级别'
END AS alert_level
FROM triggers t,functions f,items i,hosts h WHERE f.triggerid=t.triggerid AND f.itemid=i.itemid AND h.hostid=i.hostid AND h.host='Zabbix server'
) data;

查询结果

写在最后

?

好了,本篇分享到此结束,如果您有更好、更快速的方法可以私信我,一起交流、学习、进步。

?

相关推荐

Java培训机构,你选对了吗?(java培训机构官网)

如今IT行业发展迅速,不仅是大学生,甚至有些在职的员工都想学习java开发,需求量的扩大,薪资必定增长,这也是更多人选择java开发的主要原因。不过对于没有基础的学员来说,java技术不是一两天就能...

产品经理MacBook软件清单-20个实用软件

三年前开始使用MacBookPro,从此再也不想用Windows电脑了,作为生产工具,MacBook可以说是非常胜任。作为产品经理,值得拥有一台MacBook。MacBook是工作平台,要发挥更大作...

RAD Studio(Delphi) 本月隆重推出新的版本12.3

#在头条记录我的2025#自2024年9月,推出Delphi12.2版本后,本月隆重推出新的版本12.3,RADStudio12.3,包含了Delphi12.3和C++builder12.3最...

图解Java垃圾回收机制,写得非常好

什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...

Centos7 初始化硬盘分区、挂载(针对2T以上)添加磁盘到卷

1、通过命令fdisk-l查看硬盘信息:#fdisk-l,发现硬盘为/dev/sdb大小4T。2、如果此硬盘以前有过分区,则先对磁盘格式化。命令:mkfs.文件系统格式-f/dev/sdb...

半虚拟化如何提高服务器性能(虚拟化 半虚拟化)

半虚拟化是一种重新编译客户机操作系统(OS)将其安装在虚拟机(VM)上的一种虚拟化类型,并在主机操作系统(OS)运行的管理程序上运行。与传统的完全虚拟化相比,半虚拟化可以减少开销,并提高系统性能。虚...

HashMap底层实现原理以及线程安全实现

HashMap底层实现原理数据结构:HashMap的底层实现原理主要依赖于数组+链表+红黑树的结构。1、数组:HashMap最底层是一个数组,称为table,它存放着键值对。2、链...

long和double类型操作的非原子性探究

前言“深入java虚拟机”中提到,int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。其实这里的某些jvm是指...

数据库DELETE 语句,还保存原有的磁盘空间

MySQL和Oracle的DELETE语句与数据存储MySQL的DELETE操作当你在MySQL中执行DELETE语句时:逻辑删除:数据从表中标记为删除,不再可见于查询结果物理...

线程池—ThreadPoolExecutor详解(线程池实战)

一、ThreadPoolExecutor简介在juc-executors框架概述的章节中,我们已经简要介绍过ThreadPoolExecutor了,通过Executors工厂,用户可以创建自己需要的执...

navicat如何使用orcale(详细步骤)

前言:看过我昨天文章的同鞋都知道最近接手另一个国企项目,数据库用的是orcale。实话实说,也有快三年没用过orcale数据库了。这期间问题不断,因为orcale日渐消沉,网上资料也是真真假假,难辨虚...

你的程序是不是慢吞吞?GraalVM来帮你飞起来性能提升秘籍大公开

各位IT圈内外的朋友们,大家好!我是你们的老朋友,头条上的IT技术博主。不知道你们有没有这样的经历:打开一个软件,半天没反应;点开一个网站,图片刷不出来;或者玩个游戏,卡顿得想砸电脑?是不是特别上火?...

大数据正当时,理解这几个术语很重要

目前,大数据的流行程度远超于我们的想象,无论是在云计算、物联网还是在人工智能领域都离不开大数据的支撑。那么大数据领域里有哪些基本概念或技术术语呢?今天我们就来聊聊那些避不开的大数据技术术语,梳理并...

秒懂列式数据库和行式数据库(列式数据库的特点)

行式数据库(Row-Based)数据按行存储,常见的行式数据库有Mysql,DB2,Oracle,Sql-server等;列数据库(Column-Based)数据存储方式按列存储,常见的列数据库有Hb...

AMD发布ROCm 6.4更新:带来了多项底层改进,但仍不支持RDNA 4

AMD宣布,对ROCm软件栈进行了更新,推出了新的迭代版本ROCm6.4。这一新版本里,AMD带来了多项底层改进,包括更新改进了ROCm的用户空间库和AMDKFD内核驱动程序之间的兼容性,使其更容易...

取消回复欢迎 发表评论: