如何使用 API 上传 Zabbix 模板

     2023-02-16     16

关键词:

【中文标题】如何使用 API 上传 Zabbix 模板【英文标题】:How to upload Zabbix template using API 【发布时间】:2013-12-22 14:56:10 【问题描述】:

有谁知道,?

我们正在尝试使用 java 和 Zabbix 2.0 API。 我们的目标是获取不同主机的 Zabbix 图表(png 图片),并将它们显示在我们的监控页面上。我们需要有可能通过使用模板为不同的主机定制监控​​参数。我们遇到了一个监控模板到zabbix服务器上传的问题。

有两种不同的 API 调用:

    configuration.import (https://www.zabbix.com/documentation/2.0/manual/appendix/api/configuration/import) 使用它我们可以将模板上传到 zabbix 服务器,但我们无法在 UI 上看到它或以任何其他方式使用它。 Zabbix 服务器报告“true”,这意味着模板成功上传。但我们在任何地方都找不到。

    template.create (https://www.zabbix.com/documentation/2.0/manual/appendix/api/template/create) 使用 template.create 我们可以在 zabbix 服务器上创建模板实体,但是我们看不到模板数据本身的任何参数 - 我们可以'不要使用这个上传我们的文件。

有谁知道如何将这两个 API 调用紧密结合在一起,以及如何在 zabbix 服务器上配置 zabbix 模板?

【问题讨论】:

【参考方案1】:

所以嗯.. 因为我一直在 TEST 到 PROD 中使用模板导出+导入脚本,反之亦然(在我以前的工作中),这是一个有助于导入任务的完整 python 脚本:

#!/usr/bin/env python3
"""
Import XML configuration files using Zabbix API:
https://www.zabbix.com/documentation/3.4/manual/api/reference/configuration/import
"""
import argparse
from urllib import request
import json
import sys
from pprint import pformat
import os
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

def zbxrequest(url, method, auth, params):

    if params is None:
        params = 
    data =  "jsonrpc": "2.0", "id": 1, "method": method, "auth": auth, "params": params 
    # Convert to string and then to byte
    data = json.dumps(data).encode('utf-8')
    req = request.Request(args.url, headers='Content-Type': 'application/json', data=data)
    resp = request.urlopen(req)
    # Get string
    resp = resp.read().decode('utf-8')
    # Convert to object
    resp = json.loads(resp, encoding='utf-8')
    return resp


try:
    # Parse command line arguments
    parser = argparse.ArgumentParser(description='Import XML configuration files using Zabbix API')
    parser.add_argument('template_file')
    parser.add_argument('-u', '--user', required=True, help='user name')
    parser.add_argument('-p', '--password', '--pass', required=True, help='password', metavar='PASSWORD')
    parser.add_argument('-s', '--url', default='http://127.0.0.1:80/api_jsonrpc.php',
                        help='Zabbix API URL, default is http://127.0.0.1:80/api_jsonrpc.php')
    args = parser.parse_args()

    # TODO: add API version check
    # r=zbxrequest(args.url, method="apiinfo.version", auth=None, params=)
    # print(r)

    # Get authentication token
    # https://www.zabbix.com/documentation/3.4/manual/api/reference/user/login
    auth_result = zbxrequest(args.url, method="user.login", auth=None,
                             params="user": args.user, "password": args.password)

    # If authentication was not OK
    if 'result' not in auth_result:
        raise Exception('ERROR: auth failed\n' + pformat(auth_result))

    auth_token = auth_result['result']

    # Read template file content
    with open(args.template_file, 'r', encoding='utf-8') as f:
        source = f.read()

    # Set import parameters, including template file content
    params = 'format': 'xml',
              'rules': 'groups': 'createMissing': True,
                        'hosts': 'createMissing': True, 'updateExisting': True,
                        'items': 'createMissing': True, 'updateExisting': True,
                        'applications': 'createMissing': True,
                        'templates': 'createMissing': True, 'updateExisting': True,
                        'templateLinkage': 'createMissing': True,
                        'templateScreens': 'createMissing': True, 'updateExisting': True,
                        'discoveryRules': 'createMissing': True, 'updateExisting': True,
                        'triggers': 'createMissing': True, 'updateExisting': True,
                        'graphs': 'createMissing': True, 'updateExisting': True,
                        'valueMaps': 'createMissing': True,
                        'images': 'createMissing': True, 'updateExisting': True,
                        'maps': 'createMissing': True, 'updateExisting': True,
                        'screens': 'createMissing': True, 'updateExisting': True
                        ,
              'source': source
              

    # https://www.zabbix.com/documentation/3.4/manual/api/reference/configuration/import
    import_result = zbxrequest(args.url, method="configuration.import", auth=auth_token, params=params)
    # Something like: 'id': 1, 'jsonrpc': '2.0', 'result': True

    if 'result' in import_result and import_result['result']:
        print('SUCCESS: configuration import')
    else:
        raise Exception('ERROR: configuration import failed\n' + pformat(import_result))

    exit_code = 0

except Exception as e:

   print(str(e), file=sys.stderr)
   exit_code=1

finally:
    # Logout to prevent generation of unnecessary open sessions
    # https://www.zabbix.com/documentation/3.4/manual/api/reference/user/logout
    if 'auth_token' in vars():
        zbxrequest(args.url, method="user.logout", auth=auth_token, params=)

这就是您在 bash 中调用此类脚本的方式:

python3 ./import.py --url $URL/api_jsonrpc.php --user $USER --password $PASSWD $TEMPLATE_FILE

不用说,您需要满足 python 中的所有依赖项才能正常运行。此外,我最后一次在 zabbix 4.0 LTS 上使用它并且不记得谁是原作者 - 如果有人发现我会在这里提到他/她以获得创建这个的功劳。

【讨论】:

六,zabbix模板创建与使用

目录六,zabbix模板创建与使用一,使用zabbix自带模板1,模板(template)的作用2,举例使用zabbix自带模板二,自行创建使用模板1,为什么要自行创建模板2,创建模板六,zabbix模板创建与使用一,使用zabbix自带模板1,模板(template... 查看详情

zabbix5.0版本全网监控方案(代码片段)

Zabbix5.0全网监控方案如何自动添加主机监控1.克隆监控模板2.自动注册和自动发现3.使用zabbix的api接口,利用curl语言,或者开发自己的编程脚本如python等监控实施方案硬件监控:zabbix默认的模板自带了硬件监控应用服... 查看详情

zabbix的常用模板

zabbix的rpm包下载地址http://repo.zabbix.com/zabbix/1、Tcp连接监控相关设置模板 TemplatesTCPConnectionStatus.xml已上传到附件,导入到webzabbix即可客户端脚本 cat Tcp_Status.sh#!/bin/bash#scripts for tcp statu 查看详情

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控1、自带监控模板进行os的监控进入/usr/local/zabbix/etc/zabbix_agentd.conf配置文件修改LogRemoteCommands=1    ###开启脚本功能Server=192.168.5.129 ... 查看详情

zabbix3导入percona模板文件的报错处理方法(代码片段)

1、监控mysql的时候想使用percona模板,直接导入,却发现以下信息:2、如下图所示,出现时间格式的报错ImportfailedInvalidXMLtag"/zabbix_export/date":"YYYY-MM-DDThh:mm:ssZ"isexpected.3、根据错误提示,尝试进行以下操作4、然后再次上传模板,出... 查看详情

zabbix3.2使用自带模板监控mysql

一、zabbix自带MySql模板监控项 Zabbix3.0之后已经有MySql监控模板了,所以我们只要引用ZabbixServer自带的模板即可。zabbix默认有14个监控项我们只需获取监控项需要的值就ok,而这些值大部分可以通过mysqladmin命令获取二、编写脚本... 查看详情

36-zabbix使用监控模板监控主机流程

使用现有模板和监控项监控主机流程在被监控的主机上安装ZabbixAgent,建议和ZabbixServer同一个版本配置Zabbixagent的配置文件关键两项,并重启服务生效-->Server=<Zabbix_Server_IP>-->Hostname=<本机IP>在ZabbixServer上使用zabbix_get工具... 查看详情

zabbix官方推荐的标签使用准则

...巧和细节,也有助于您更有效的建立自己的标签体系。1.如何更高效的应用标签小伙伴们对于Zabbix内的标签一定都很熟悉了。标签确实非常灵活,配置好了能大大提高运维工作的效率,但一个个模板、甚至一个个指标的去维护标... 查看详情

zabbix监控——zabbix创建模板(templates)及监控项(item)

...需要创建自己的模板及监控项,今天就先给大家展示一下如何创建监控项。添加模版的操作面板如下模版添加成功后的界面如下接下来我们就可以添加监控项了点击对应模版的item链接进入该模版的item集合页面点击item页面的右上... 查看详情

zabbix利用阿里云短信服务添加短信报警

...容要添加参数,即zabbix传来的报警内容。创建AccessKey 使用阿里云api需要访问秘钥,在访问控制页面-->用户管理-->新建用户第一次生成AccessKey时会给你密码,AccessKeyID和密码脚本里会用到。编写报警脚本#vim/usr/lib/zabbi 查看详情

如何使用 fetch API 上传图像数组

】如何使用fetchAPI上传图像数组【英文标题】:HowdoIuploadanarrayofmagesusingfectAPI【发布时间】:2021-03-2520:48:57【问题描述】:我正在尝试使用我的自定义API(NodeJavaScript)上传一组图像,在这里我只想将文件名保存到我的数据库中,... 查看详情

使用 zabbix API 从 python 创建网格视图

】使用zabbixAPI从python创建网格视图【英文标题】:usingzabbixAPItocreateagridviewfrompython【发布时间】:2013-11-1617:11:52【问题描述】:简介我有一个使用Zabbix2.0监控的集群,一切正常,我在Zabbix上拥有我需要的所有数据,但是zabbix显示... 查看详情

zabbix批量添加主机(代码片段)

...,主机显示名,IP,主机所属主,主机模板组,snmp团体名上传excel表格到服务器表格名字为:add-host-2.xlsx脚本内容如下#!/usr/bin/python#coding:utf-8importjsonimporturllib2fromurllib2importURLErrorimportsys,argparseimportxlrddefaultencoding=‘utf-8‘ifsys.getdef... 查看详情

zabbix监控elasticsearch

ElasticSearch 可以直接使用zabbix官方的模板模板地址:https://github.com/mkhpalm/elastizabbix 通过zabbixserver直接监控1、下载模板文件导入模板2、把模板关联到zabbixserver3、添加自定义KEY vim/etc/zabbix/scripts/elastizabbix.py#!/usr/bin 查看详情

zabbix常用监控模板

以下为常用的服务监控,可直接通过zabbix的导入功能导入,做基本修改就可以使用nginx监控模板<?xmlversion="1.0"encoding="UTF-8"?><zabbix_export><version>3.2</version><date>2017-08-25T05:53:48Z</date><group 查看详情

通过zabbix自带api进行主机的批量添加操作

通过zabbix自带api进行批量添加主机我们需要监控一台服务器的时候,当客户端装好zabbix-agent端并正确配置以后,需要在zabbix-server的webgui界面进行添加zabbix-agent操作,填写host_name,访问名,ip地址,端口还有模板等信息这样操作比... 查看详情

(54)zabbix链接及解除模板链接

...T链接模板之后,便继承了模板里定义的item,trigger等等,使用这个方法,配置zabbix监控会减少很多重复的体力劳动,并且更加灵活。备注:模板只能被链接到host,不是链接到组里面zabbix主机链接模板Configuration-- Ho 查看详情

如何使用 laravel 后端 API 在 nuxt.js 中上传图片

】如何使用laravel后端API在nuxt.js中上传图片【英文标题】:howtouploadimageinnuxt.jsusinglaravelbackendAPI【发布时间】:2021-01-2407:29:30【问题描述】:nuxt.js我搜索了很多关于使用laravelapi上传图片的教程,但我不知道如何编码图片上传的东... 查看详情