zabbix调用mysql接口_zabbix_api的调用(curl测试)和SQL一些解答

本文详细介绍了如何使用curl调用Zabbix API进行MySQL接口操作,包括获取session ID、主机host ID、监控指标items ID及key,并获取CPU负载等数据。通过历史数据获取,展示了Zabbix高效查询历史记录的原因,强调了数据类型和组合索引在性能优化中的作用。
摘要由CSDN通过智能技术生成

获取session id

curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":

"2.0","method":"user.login","params":{"user":"Admin","password":"admin"},"auth":

null,"id":0}' http://172.31.xxx.200/zabbix/api_jsonrpc.php;

得到的session结果如下:

{"jsonrpc":"2.0","result":"ce697eeba1143b88223798e752dd66e4","id":0}

运用session idce697eeba1143b88223798e752dd66e4。通过认证获取数据。

获取指定主机的host id

curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc": "2.0",

"method":"host.get","params":{"output":["hostid"],"filter": {"host":"172.30.xxx.30"}},

"auth": "ce697eeba1143b88223798e752dd66e4","id": 0}' http://172.31.xxx.200/zabbix/api_jsonrpc.php;

得到的host id结果如下:

{"jsonrpc":"2.0","result":[{"hostid":"10110"}],"id":0}

基于hostid获取itemsid和key

curl -i -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0",

"method":"item.get","params":{"output":["itemids","key_"],"hostids":"10110"},

"auth": "ce697eeba1143b88223798e752dd66e4","id": 0}' http://172.31.xxx.200/zabbix/api_jsonrpc.php

结果可以看到item对应哪个监控指标:

{"jsonrpc":"2.0","result":[{"itemid":"23902","key_":"agent.hostname"},{"itemid":"23903","key_":"agent.ping"},{"itemid":"23904","key_":"agent.version"},{"itemid":"23905","key_":"kernel.maxfiles"},{"itemid":"23906","key_":"kernel.maxproc"},{"itemid":"24042","key_":"net.if.in[eth0]"},{"itemid":"24043","key_":"net.if.out[eth0]"},{"itemid":"23910","key_":"proc.num[,,run]"},{"itemid":"23911","key_":"proc.num[]"},{"itemid":"23912","key_":"system.boottime"},{"itemid":"23913","key_":"system.cpu.intr"},{"itemid":"23914","key_":"system.cpu.load[percpu,avg15]"},{"itemid":"23915","key_":"system.cpu.load[percpu,avg1]"},{"itemid":"23916","key_":"system.cpu.load[percpu,avg5]"},{"itemid":"23917","key_":"system.cpu.switches"},{"itemid":"23918","key_":"system.cpu.util[,idle]"},{"itemid":"23919","key_":"system.cpu.util[,interrupt]"},{"itemid":"23920","key_":"system.cpu.util[,iowait]"},{"itemid":"23921","key_":"system.cpu.util[,nice]"},{"itemid":"23922","key_":"system.cpu.util[,softirq]"},{"itemid":"23923","key_":"system.cpu.util[,steal]"},{"itemid":"23924","key_":"system.cpu.util[,system]"},{"itemid":"23925","key_":"system.cpu.util[,user]"},{"itemid":"23926","key_":"system.hostname"},{"itemid":"23927","key_":"system.localtime"},{"itemid":"23928","key_":"system.swap.size[,free]"},{"itemid":"23929","key_":"system.swap.size[,pfree]"},{"itemid":"23930","key_":"system.swap.size[,total]"},{"itemid":"23931","key_":"system.uname"},{"itemid":"23932","key_":"system.uptime"},{"itemid":"23933","key_":"system.users.num"},{"itemid":"23934","key_":"vfs.file.cksum[\/etc\/passwd]"},{"itemid":"24044","key_":"vfs.fs.inode[\/,pfree]"},{"itemid":"24045","key_":"vfs.fs.inode[\/boot,pfree]"},{"itemid":"24046","key_":"vfs.fs.inode[\/opt,pfree]"},{"itemid":"24047","key_":"vfs.fs.size[\/,free]"},{"itemid":"24050","key_":"vfs.fs.size[\/,pfree]"},{"itemid":"24053","key_":"vfs.fs.size[\/,total]"},{"itemid":"24056","key_":"vfs.fs.size[\/,used]"},{"itemid":"24048","key_":"vfs.fs.size[\/boot,free]"},{"itemid":"24051","key_":"vfs.fs.size[\/boot,pfree]"},{"itemid":"24054","key_":"vfs.fs.size[\/boot,total]"},{"itemid":"24057","key_":"vfs.fs.size[\/boot,used]"},{"itemid":"24049","key_":"vfs.fs.size[\/opt,free]"},{"itemid":"24052","key_":"vfs.fs.size[\/opt,pfree]"},{"itemid":"24055","key_":"vfs.fs.size[\/opt,total]"},{"itemid":"24058","key_":"vfs.fs.size[\/opt,used]"},{"itemid":"23941","key_":"vm.memory.size[available]"},{"itemid":"23942","key_":"vm.memory.size[total]"}],"id":0}

基于hostid获取itemsid和key,value_tpye

curl -i -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0",

"method":"item.get","params":{"output":["itemids","key_","value_type"],"hostids":"10110"},

"auth": "ce697eeba1143b88223798e752dd66e4","id": 0}' http://172.31.xxx.200/zabbix/api_jsonrpc.php

这里我们取简单的load负载作为测试,

{"itemid":"23915","key_":"system.cpu.load[percpu,avg1]"}这个就是load负载,item号为23915。

获取cpu负载的值

curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc":"2.0","method":"history.get",

"params":{"history":0,"itemids":"47616","output":"extend","limit":10},

"auth":"ce697eeba1143b88223798e752dd66e4","id": 0}' http://172.31.xxx.200/zabbix/api_jsonrpc.php

这里调用了history.get,limit代表只取10行数据。

最终效果如下:

{"jsonrpc":"2.0","result":[{"itemid":"47616","clock":"1589249616","value":"0.0095","ns":"936829877"},{"itemid":"47616","clock":"1589249676","value":"0.0108","ns":"932621456"},{"itemid":"47616","clock":"1589249736","value":"0.0104","ns":"963143320"},{"itemid":"47616","clock":"1589249796","value":"0.0105","ns":"397346143"},{"itemid":"47616","clock":"1589249856","value":"0.0101","ns":"700117592"},{"itemid":"47616","clock":"1589249916","value":"0.0093","ns":"823939597"},{"itemid":"47616","clock":"1589249976","value":"0.0093","ns":"335143020"},{"itemid":"47616","clock":"1589250036","value":"0.0095","ns":"977860048"},{"itemid":"47616","clock":"1589250096","value":"0.0119","ns":"922312243"},{"itemid":"47616","clock":"1589250156","value":"0.0105","ns":"481857044"}],"id":0}

上述相当于调用:

mysql> select * from history where itemid='47616' and clock='1589250156';

+--------+------------+--------+-----------+

| itemid | clock | value | ns |

+--------+------------+--------+-----------+

| 47616 | 1589250156 | 0.0105 | 481857044 |

+--------+------------+--------+-----------+

1 row in set (0.00 sec)

为什么history表,可以秒级响应

个人观点,首先,我们可以观察history的表结构。

mysql> show create table history;

| history | CREATE TABLE `history` (

`itemid` bigint(20) unsigned NOT NULL,

`clock` int(11) NOT NULL DEFAULT '0',

`value` double(16,4) NOT NULL DEFAULT '0.0000',

`ns` int(11) NOT NULL DEFAULT '0',

KEY `history_1` (`itemid`,`clock`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

可以看到起各个属性值都是数字类型,所以占用内存的字节数是很小的,相对于(char类型)来说。

同时,它建立了一个组合索引.根据zabbix的逻辑规则。

itemid和clock的组合代表了唯一值。即使这张表是千万数据。直接根据itemid和clock的查询也是超快速响应。

如下:

1.history的数据量

目前的数据量为4800w,7分钟。

mysql> select count(*) from history;

+----------+

| count(*) |

+----------+

| 48154320 |

+----------+

1 row in set (7 min 34.54 sec)

2.查询itemid和clock的值,快速获得

mysql> select * from history where itemid='47616' and clock='1589250156';

+--------+------------+--------+-----------+

| itemid | clock | value | ns |

+--------+------------+--------+-----------+

| 47616 | 1589250156 | 0.0105 | 481857044 |

+--------+------------+--------+-----------+

1 row in set (0.00 sec)

3.查看执行计划:

mysql> explain select * from history where itemid='47616' and clock='1589250156'\G;

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: history

type: ref

possible_keys: history_1

key: history_1

key_len: 12

ref: const,const

rows: 1

Extra: Using index condition

1 row in set (0.00 sec)

可以看到获取的数据为1行,引用的都是const,const所以其效率很高。

小结:组合索引,用到索引的条件是。(itemid,clock)组合可以用到,和itemid会用到。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值