zabbix 7.0 新增功能亮点(二)——history.push API方法

zabbix 7.0 中,增加了对history_push API方法的支持,用于通过Zabbix API将数据发送到Zabbix server。

Zabbix7.0LTS一经发布便吸引了众多运维小伙伴的关注,乐维社区技术交流群内(QQ群:177428068,617295020)也伴随着不少小伙伴的热议与探讨,话不多说,抓紧上车。

前面我们介绍了zabbix 7.0 新增功能亮点(一)——T参数,本篇将向大家介绍zabbix 7.0 新增的另一个功能亮点——history.push API方法。

一. history.push API方法内容说明

zabbix 7.0 中,增加了对history_push API方法的支持,用于通过Zabbix API将数据发送到Zabbix server

注: 需要配合监控项为Zabbix采集器(zabbix trap)类型指标才可接收推送数据

更新内容详情如下:

[ZBXNEXT-8541] Support of history.push API method - ZABBIX SUPPORT

官方使用说明如下:

history.push (zabbix.com)

二. 比对7.0以前版本指标数据接收方式

1. 借助zabbix原生工具 zabbix_sender

用法说明:

1.1添加指标

–创建主机对象或监控模板

dzhwtTwf666bb4b86f00e.png

–创建"Zabbix采集器(zabbix trap)"类型指标

1eI4Gi9Q666bb4cb8622a.png

1.2编写数据收集脚本,使用zabbix_sender命令工具命令推送

–具体脚本可根据实际生产环境需求调整,以下脚本仅用作测试示例

•ZABBIX_SERVER_IP填写ZABBIX SERVER 服务器IP,用于推送数据到目标server

•HOST_HOST填写步骤1中创建的主机名,zabbix_trap类型指标以主机名作为接收对象唯一标识

•key_name填写步骤1创建的指标键值,zabbix_trap类型指标以指标键值作为接收指标唯一标识

•type 用于实例脚本中,区分字符/数字的数据类型指标时时分别推送的取值内容

#!/usr/bin/bash
ZABBIX_SERVER_IP=192.168.136.129
HOST_HOST=${1}
key_name=${2}
type=${3}
for i in {1..20}
do
    if [ ${type} = "num" ];then
        zabbix_sender -z ${ZABBIX_SERVER_IP} -s ${HOST_HOST} -k ${key_name} -o $i -v
    elif [ ${type} = "text" ];then
        zabbix_sender -z ${ZABBIX_SERVER_IP} -s ${HOST_HOST} -k ${key_name} -o "本次采集值:$i" -v
    fi
    sleep 1
done

1.3执行脚本,平台查看取值效果

–执行脚本查看脚本执行过程
 # 往数值类型监控项发送数值取值
bash zbx_send.sh zabbix_trap_receive_host trap_item_1 num 
# 往文本类型监控项发送文本取值
bash zbx_send.sh zabbix_trap_receive_host trap_item_2 text

AeQGasvX666bb4f9f0edb.png

–查看监控平台,确认平台接收指标成功

LTOTmVHG666bb5130a7c5.png

mjANhtJ1666bb526480d9.png

2. 7.0 history_push 方式

用法说明:

2.1 添加指标

–参考重复2.1章节第一步骤即可,此处不重复

2.2 获取监控项itemid

–方法一:页面查看

 从最新数据中指标详情按钮,可查看左下角出现的超链中包含监控项的itemiddcZiVGi0666bb554c6bda.png

–方法二:使用API接口读取

 参考官方手册item.get (zabbix.com),通过指定主机ID及键值名称,可获取item详情,返回数据中包含itemid

l9nyYsIZ666bb5a038fdf.png

2.3 使用api接口进行数据推送

#!/bin/env python3
# -*- coding: utf-8 -*-
'''

使用方法:

(1).修改变量中API接口IP地址,用户名,密码

(2).指定需要需要上报数据的itemid及value值

(3).执行脚本即可

然后执行 python3 zbx_v7.0_history_push.py

'''
import requests
import json
import datetime
headers = {'Content-Type': 'application/json-rpc'}
def token_get():
    # global token
    # data = {"jsonrpc":"2.0","method":"user.login","params":{"user":username,"password":password},"id":1}
    data = {"jsonrpc":"2.0","method":"user.login","params":{"username":username,"password":password},"id":1}
    # data = json.dumps(data)
    response = requests.post(zabbix_api, headers=headers, json=data)
    a=response.json()
    # print(a)
    token=a.get('result')
    return token
def history_push():
    headers['Authorization']='Bearer %s'%token
    data = {"jsonrpc":"2.0","method":"history.push","params":[
        {
            "itemid": itemid,
            "value": value
        }
    ],"id": 1}
    # data = json.dumps(data).encode('utf-8')
    response = requests.post(zabbix_api, headers=headers, json=data)
    print(json.dumps(data))
    a=response.json()
    print(a)
    response_data=a.get('result').get('data')
    return response_data
def item_get(host_host,key_name):
    # global itemid
    headers['Authorization']='Bearer %s'%token
    data = {"jsonrpc":"2.0","method":"item.get","params":{"output":["itemid","key_"],"host":host_host,"search":{"key_":key_name}},"id":1} 
    data = json.dumps(data)
    response = requests.post(zabbix_api, headers=headers, data=data)
    a=response.json()
    # 打印所有itemid
    itemid=a.get('result')
    return itemid
def logout():
    headers['Authorization']='Bearer %s'%token
    data = {"jsonrpc":"2.0","method":"user.logout","params":[],"id":1}
    data = json.dumps(data)
    response = requests.post(zabbix_api, headers=headers, data=data)
    a=response.json()
    print("退出状态",a.get('result'))
if __name__ == '__main__':
    zabbix_api = 'http://192.168.136.129/zabbix/api_jsonrpc.php'
    username = 'Admin'
    password = 'zabbix'
    key_name = 'trap_item_2'
    host_host = 'zabbix_trap_receive_host'
    value = 'python推送数据测试,当前时间:%s'%datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    token = token_get()  # 认证并获取token
    # print("token:%s"%token)  # 查看请求返回token
    # itemid = item_get(host_host,key_name)[0].get('itemid')  # 获取itemid
    itemid = 46524  # 已知itemid,直接定义,跳过item_get()函数
    # print(itemid)  # 打印获取的Itemid
    response_data = history_push()  # 数据推送
    print("推送状态 %s"%response_data)  # 打印推送状态
    logout()  # 退出及关闭本次认证

2.4 定义参数,测试脚本推送

–执行脚本,查看执行过程

AriYpZEX666bb5e56f149.png

–zabbix平台查看接收数据

X93At0ub666bb5ffa2e24.png

3. 总结

7.0新版中,支持了对Zabbix采集器(zabbix trap)类型指标使用api接口方式上报数据,大大提高了采集逻辑的可扩展性,相较于支持的zabbix_sender命令行方式而言,监控程序可以避免反复调用zabbix_sender命令,减少系统的缓存及打开文件数等关键性能;其次也令采集程序脚本更一体化,脚本中直接可以完成数据收集及上报操作,不需要额外依赖于zabbix_sender命令,避免系统中因缺失zabbix_sender命令导致的无法上报数据成功。

以上就是history.push API方法的全部介绍。大家好,我是乐乐,专注IT运维技术研究与分享,如果小伙伴们对以上内容有不理解的地方,或有更多zabbix技术问题,欢迎到乐维社区留言~

0 条评论

请先 登录 后评论
乐维君
乐维君

361 篇文章

作家榜 »

  1. 乐维君 361 文章
  2. YOHOHO 14 文章
  3. 机灵小和尚 13 文章
  4. 我是一只小菜鸡 12 文章
  5. 细雨闲花 11 文章
  6. 。。。 9 文章
  7. 御前侍卫张五哥 9 文章
  8. 小黄人 8 文章