ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

zabbix12 ---- API批量部署agent

2021-10-30 20:31:32  阅读:251  来源: 互联网

标签:jsonrpc json host 192.168 ---- zabbix API agent


zabbix12 ---- API批量部署agent

zabbix

zabbix API

https://www.zabbix.com/documentation/4.0/zh/manual/api/reference
https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/template/get
https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/host/massadd
https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/host/create

Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:
- 创建新的应用程序以使用Zabbix;
- 将Zabbix与第三方软件集成;
- 自动执行常规任务。
Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON-RPC 2.0协议,这意味着两件事:
- 该API包含一组独立的方法;
- 客户端和API之间的请求和响应使用JSON格式进行编码。

curl 命令:
-s: 静默模式
-X:指定操作方法
-H:自定义header内容
-d:指定提交的http 内容

提供用户密码密码验证并发送post请求到zabbix server端,获取result返回值token

curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },
    "id": 1
}' http://192.168.10.81/zabbix/api_jsonrpc.php | python -m json.tool

会返回一个result,记录此值,此值会定时更新
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": "663bdb2475f82e71e885f5a2af5711d0"
}

使用返回的token从zabbix server获取所有主机列表信息

curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
        "output": ["host"]
    },
    "auth": "663bdb2475f82e71e885f5a2af5711d0",
    "id": 1
}' http://192.168.10.81/zabbix/api_jsonrpc.php | python -m json.tool

以下为返回的部分主机信息
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "host": "Zabbix server",
            "hostid": "10084"
        },
        {
            "host": "192.168.10.83",
            "hostid": "10272"
        },
        {
            "host": "192.168.10.84",
            "hostid": "10273"
        }
    ]
}

通过filter获取模板的指定信息

curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "template.get",
    "params": {
        "output": "extend",
        "filter": {
            "host": [
                "Template OS Linux"
            ]
        }
    },
    "auth": "663bdb2475f82e71e885f5a2af5711d0",
    "id": 1
}'  http://192.168.10.81/zabbix/api_jsonrpc.php | python -m json.tool

返回模板相关信息
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "auto_compress": "1",
            "available": "0",
            "description": "",
            "disable_until": "0",
            "error": "",
            "errors_from": "0",
            "flags": "0",
            "host": "Template OS Linux",
            "ipmi_authtype": "-1",
            "ipmi_available": "0",
            "ipmi_disable_until": "0",
            "ipmi_error": "",
            "ipmi_errors_from": "0",
            "ipmi_password": "",
            "ipmi_privilege": "2",
            "ipmi_username": "",
            "jmx_available": "0",
            "jmx_disable_until": "0",
            "jmx_error": "",
            "jmx_errors_from": "0",
            "lastaccess": "0",
            "maintenance_from": "0",
            "maintenance_status": "0",
            "maintenance_type": "0",
            "maintenanceid": "0",
            "name": "Template OS Linux",
            "proxy_address": "",
            "proxy_hostid": "0",
            "snmp_available": "0",
            "snmp_disable_until": "0",
            "snmp_error": "",
            "snmp_errors_from": "0",
            "status": "3",
            "templateid": "10001",
            "tls_accept": "1",
            "tls_connect": "1",
            "tls_issuer": "",
            "tls_psk": "",
            "tls_psk_identity": "",
            "tls_subject": ""
        }
    ]
}

通过python脚本调用API或token

pip install requests

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import requests
import json

url = 'http://192.168.10.81/zabbix/api_jsonrpc.php'
post_data = {
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },
    "id": 1
}
post_header = {'Content-Type': 'application/json'}

ret = requests.post(url, data=json.dumps(post_data), headers=post_header)

zabbix_ret = json.loads(ret.text)
if not zabbix_ret.has_key('result'):
    print 'login error'
else:
    print zabbix_ret.get('result')

执行结果

./zabbix_token.py 
aa5ab5e2a64fd52f85fbe0b1d7a26bd8

通过API添加主机

https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/host/create
获取组ID groupid
查看URL,groupid为2
http://192.168.10.81/zabbix/hostgroups.php?form=update&groupid=2

获取模板ID
查看URL,templateid为10275
http://192.168.10.81/zabbix/templates.php?form=update&templateid=10275&groupid=0

curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "host.create",	#定义方法
    "params": {
        "host": "192.168.10.83",	#zabbix agent主机名称
        "interfaces": [
            {
                "type": 1,	#类型为1表示agent,2是SNMP,3是IMPI,4是JMX
                "main": 1,	#more接口
                "useip": 1,	#0是DNS,1是IP地址
                "ip": "192.168.10.83",	#添加的zabbix agent的IP地址
                "dns": "",
                "port": "10050"	#agent端口
            }
        ],
        "groups": [
            {
                "groupid": "2"	#添加到的组的ID
            }
        ],
        "templates": [
            {
                "templateid": "10275"	#关联的模板的ID
            }
        ]
    },
    "auth": "663bdb2475f82e71e885f5a2af5711d0",	#token超时后需要重新获取
    "id": 1
}'  http://192.168.10.81/zabbix/api_jsonrpc.php | python -m json.tool

返回结果
id为1表示成功
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "hostids": [
            "10289"
        ]
    }
}

验证





自动注册

HostMetadataItem
https://www.zabbix.com/documentation/4.0/zh/manual/discovery/auto_registration

zabbix_agent.conf
#Hostname=192.168.10.84
HostnameItem=system.hostname



自动发现

zabbix_agent.conf
HostnameItem=system.hostname




标签:jsonrpc,json,host,192.168,----,zabbix,API,agent
来源: https://www.cnblogs.com/final233/p/15487234.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有