Zabbix Server Api批量添加Zabbix Agent

news2025/5/31 18:47:04

脚本或使用自动化工具来批量添加Zabbix Agent,从而减少手动操作和提高效率

使用API添加主机可以减少人为错误的发生。通过自动化和脚本,可以确保正确的配置被应用到每个主机上,避免了手动操作可能导致的配置错误。

使用前提条件

1、zabbix server端模版已经调试完毕

2、zabbix agent 端配置文件和自定义监控调试完毕

Go获取token

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

type AuthResponse struct {
	JsonRPC string `json:"jsonrpc"`
	Result  string `json:"result"`
}

func main() {
	zabbixURL := "http://192.168.12.100/zabbix/api_jsonrpc.php"
	username := "your-username"
	password := "your-password"

	// 构建请求的JSON数据
	data := map[string]interface{}{
		"jsonrpc": "2.0",
		"method":  "user.login",
		"params": map[string]string{
			"user":     username,
			"password": password,
		},
		"id": 1,
	}

	// 将数据转换为JSON格式
	payload, err := json.Marshal(data)
	if err != nil {
		fmt.Println("JSON encoding error:", err)
		return
	}

	// 发送POST请求给Zabbix API
	resp, err := http.Post(zabbixURL, "application/json", bytes.NewBuffer(payload))
	if err != nil {
		fmt.Println("API request error:", err)
		return
	}
	defer resp.Body.Close()

	// 读取响应的内容
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Response read error:", err)
		return
	}

	// 解析响应的JSON数据
	var authResp AuthResponse
	err = json.Unmarshal(body, &authResp)
	if err != nil {
		fmt.Println("JSON decoding error:", err)
		return
	}

	// 输出令牌(token)
	fmt.Println("Token:", authResp.Result)
}

1、获取模版ID和组ID

[root@ops-public zabbix]# cat template-group.sh 
ZABBIX_URL="http://192.168.12.100/zabbix"
username := "your-username"
password := "your-password"
# 登录获取认证令牌
AUTH_TOKEN=$(curl -s -X POST -H 'Content-Type: application/json' -d '{
  "jsonrpc": "2.0",
  "method": "user.login",
  "params": {
    "user": "'"$USER"'",
    "password": "'"$PASSWORD"'"
  },
  "id": 1
}' "$ZABBIX_URL/api_jsonrpc.php" | jq -r '.result')

# 获取模板列表
TEMPLATE_RESULT=$(curl -s -X POST -H 'Content-Type: application/json' -d '{
  "jsonrpc": "2.0",
  "method": "template.get",
  "params": {
    "output": ["templateid", "name"]
  },
  "auth": "'"$AUTH_TOKEN"'",
  "id": 1
}' "$ZABBIX_URL/api_jsonrpc.php")

echo "Template List:"
echo "$TEMPLATE_RESULT" | jq -r '.result[] | "Template ID: \(.templateid), Name: \(.name)"'

# 获取主机组列表
HOSTGROUP_RESULT=$(curl -s -X POST -H 'Content-Type: application/json' -d '{
  "jsonrpc": "2.0",
  "method": "hostgroup.get",
  "params": {
    "output": ["groupid", "name"]
  },
  "auth": "'"$AUTH_TOKEN"'",
  "id": 1
}' "$ZABBIX_URL/api_jsonrpc.php")

echo "Hostgroup List:"
echo "$HOSTGROUP_RESULT" | jq -r '.result[] | "Hostgroup ID: \(.groupid), Name: \(.name)"'

2、批量添加主机

添加到Virtual machines

挂载模版 ID为 10001和10274

[root@ops-public zabbix]# cat add_hosts.sh 
#!/bin/bash
ZABBIX_URL="http://192.168.12.100/zabbix/api_jsonrpc.php"
username := "your-username"
password := "your-password"

TOKEN=$(curl -s -X POST -H 'Content-Type: application/json' -d '{
  "jsonrpc": "2.0",
  "method": "user.login",
  "params": {
    "user": "'"$USER"'",
    "password": "'"$PASSWORD"'"
  },
  "id": 1
}' "$ZABBIX_URL" | jq -r '.result')

NET="192.168.12."

for HOST in $(seq 200 210); do
  HOST_IP="$NET$HOST"

  RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d '{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
      "host": "'"$HOST_IP"'",
      "name": "'"$HOST_IP"'",
      "interfaces": [
        {
          "type": 1,
          "main": 1,
          "useip": 1,
          "ip": "'"$HOST_IP"'",
          "dns": "",
          "port": 10050
        }
      ],
      "groups": [
        {
          "groupid": "6"
        }
      ],
      "templates": [
        {
          "templateid": "10274"
        },
        {
          "templateid": "10001"
        }
      ]
    },
    "id": 1,
    "auth": "'"$TOKEN"'"
  }' "$ZABBIX_URL")

  HOST_ID=$(echo "$RESPONSE" | jq -r '.result.hostids[0]')
  HOST_NAME=$(echo "$RESPONSE" | jq -r '.result.hosts[0].host')

  echo "Added host $HOST_NAME with ID $HOST_ID"
done

批量添加主机并挂载模版

除了使用api方式,也可以使用自动注册主机来完成主机注册。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/580757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C919用了哪些人工智能(AI)技术?

#国产大飞机C919商业首飞#近日,C919在国人的期盼下终于迎来了首次商飞,机票已公开售卖。众所周知,C919是一款全新的、先进的大飞机,那你知道它采用了哪些新的人工智能(AI)技术吗?下面让我来为大…

[golang 微服务] 2. RPC架构介绍以及通过RPC实现微服务

一.简介 在上一节简单了解了微服务定义和优缺点之后,在使用微服务框架之前,需要首先了解一下RPC架构,通过RPC可以更形象了解微服务的工作流程 RPC的概念 RPC(Remote Procedure Call Protocol),是 远程过程调用的缩写,通俗的说就是…

【提示学习】HPT: Hierarchy-aware Prompt Tuning for Hierarchical Text Classification

论文信息 名称内容论文标题HPT: Hierarchy-aware Prompt Tuning for Hierarchical Text Classification论文地址https://arxiv.org/abs/2204.13413研究领域NLP, 文本分类, 提示学习, 层级标签文本分类提出模型HPT(Hierarchy-aware Prompt Tuning)来源EMNLP 2022源码https://gi…

SpringBoot AOP切面编程 使用案例

参考资料 Springboot AOP实现指定敏感字段数据加密 (数据加密篇 二)【SpringBoot-3】切面AOP实现权限校验:实例演示与注解全解【小家Spring】Spring AOP中Pointcut切入点表达式最全面使用介绍AOP编程过程中的Signature接口 本篇文章核心思想…

(详解)vue中实现主题切换的三种方式

目录 一、背景 二、实现思路 方法1:定义全局的CSS变量 方法2:切换已定义好的css文件 方法3:切换顶级CSS类名 (需使用css处理器,如sass、less等) 一、背景 在我们开发中我们会遇到像是需要切换程序风格、主题切换啦这种应用场景。 参考大佬…

经典智能合约案例之发红包

经典智能合约案例:发红包 角色分析:发红包的人和抢红包的人 功能分析: 发红包:发红包的功能,可以借助构造函数实现,核心是将ether打入合约; 抢红包:抢红包的功能,抢成…

Flume系列:案例-Flume 聚合拓扑(常见的日志收集结构)

目录 Apache Hadoop生态-目录汇总-持续更新 1:案例需求-实现聚合拓扑结构 3:实现步骤: 2.1:实现flume1.conf - sink端口4141 2.2:实现flume2.conf- sink端口4141 2.3:实现flume3.conf - 监听端口4141 …

32 KVM管理系统资源-管理虚拟内存热插

文章目录 32 KVM管理系统资源-管理虚拟内存热插32.1 概述32.2 约束限制32.3 操作步骤32.3.1 配置虚拟机XML32.3.2 热插并上线内存 32 KVM管理系统资源-管理虚拟内存热插 32.1 概述 在虚拟化场景下,虚拟机的内存、CPU、外部设备都是软件模拟呈现的,因此…

深度学习进阶篇-国内预训练模型[5]:ERINE、ERNIE 3.0、ERNIE-的设计思路、模型结构、应用场景等详解

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

旧键盘打字 两数之和

💕"不要因为别人的成功而感到沮丧,你的时机会来,只要你继续努力、坚持不懈。"💕 🐼作者:不能再留遗憾了🐼 🎆专栏:Java学习🎆 🚗本文章主要内容:使用哈希表的思…

2023年江苏省中职网络安全Web渗透测试解析(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.访问地址http://靶机IP/web1,分析页面内容,获取flag值,Flag格式为flag{xxx}; 2.访问地址http://靶机IP/web2,访问登录页面。用户user01的密码为1-1000以内的数,获取用户user01的密码,将密码作为Flag进行提交,Flag格式为…

Java数据结构之第十四章、泛型进阶

补充复杂示例&#xff1a; public class MyArray<E extends Comparable<E>> { ... } 表明E必须是实现了Comparable接口的 泛型基础内容 目录 一、通配符 二、通配符上界 三、通配符下界 一、通配符 ? 用于在泛型的使用&#xff0c;即为通配符 示例&#xf…

如何使用 Python Nornir 实现基于 CLI 的网络自动化?

在现代网络环境中&#xff0c;网络自动化已成为管理和配置网络设备的重要工具。Python Nornir 是一个强大的自动化框架&#xff0c;它提供了一个简单而灵活的方式来执行网络自动化任务。本文将详细介绍如何使用 Python Nornir 实现基于 CLI 的网络自动化。 1. Python Nornir 概…

jacoco增量覆盖率平台开发

先聊聊做这个平台的意义&#xff0c;从项目管理角度来说&#xff0c;测试说项目测试完成&#xff0c;该如何证明呢&#xff1f;一般情况下我们进行验收时没什么问题就算完成了&#xff0c;但是实际上测试很多情况并没有考虑到。所以该平台可以反哺测试的测试用例&#xff0c;让…

GO的服务

1.go的安装 1.1 确认版本go version go version go1.20.4 darwin/amd64 可以看到是macos10.14版本。如果是m1 需要安装对应的版本 1.2 用vscode 进行编写go的简单例子 先进入vscode的界面&#xff0c;新建一个目录为godemo&#xff0c;里面就是go的例子的工作目录&#xff0…

计算机的大小端存储模式(计算机小白必看!)

目录 1.什么是大端小端 2.为什么会有大小端模式之分呢&#xff1f; 3.如何判断当前机器为大端字节序还是小端字节序 本文将介绍计算机存储数据时的大小端问题 1.什么是大端小端 大端&#xff08;存储&#xff09;模式&#xff0c;是指数据的低位保存在内存的高地址中&…

可视化库seaborn常用操作介绍

目录 1.seaborn 概括2.Seaborn的调色板3.单变量绘图分析4.回归分析绘图5.分类图绘制6.FacetGrid使用7.Heatmap 1.seaborn 概括 seaborn库是一个用于数据可视化的Python库&#xff0c;它建立在matplotlib之上&#xff0c;可以让你轻松地创建各种美观的图表和图形。 在seaborn中…

致敬科技工作者:我们的世界因你们而美好

在我们的日常生活中&#xff0c;科技无处不在&#xff0c;而这一切离不开科技工作者的辛勤付出。作为一名科技从业者&#xff0c;我深深地理解并感悟到&#xff0c;科技工作者们的作用是不可替代的。 二十一世纪&#xff0c;科技的发展日新月异。我们见证了第一台计算机的发明…

RT1170启动详解:Boot配置、Bootable image头的组成

文章目录 1 基础知识2 BOOT配置2.1 BOOT_CFG配置2.2 BOOT_MODE 3 Bootable image3.1 文件格式3.2 Bootable image头的组成3.3 Bootable image的生成3.4 例&#xff1a;BootROM之non-XIP加载过程3.5 例&#xff1a;bin文件分析 1 基础知识 &#xff08;1&#xff09;BootROM Bo…

地面分割--Patchwork

文章目录 1问题定义2同心区域模型3按照区域划分的平面拟合4地面点似然估计&#xff08;GLE&#xff09;总结 patchwork是一种比较优秀的地面分割方法。其过程主要分为三个部分&#xff1a;同心圆环区域(CZM:concentric Zone Model)&#xff0c;按照区域划分的平面拟合(R-GPF:re…