zabbix4.2批量导入主机

导出两台已有主机,默认导出文件为xml

在这里插入图片描述

根据XML文件进行分割,有用的标签是hosts

vim zbx_host_head.xml #文件开头

<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
    <version>4.2</version>
    <date>2021-12-28T08:37:44Z</date>
    <groups>
        <group>
            <name>SGM-Ali</name>
        </group>
    </groups>
    <hosts>

vim zbx_host_tail.xml #文件结尾

    </hosts>
</zabbix_export>

配置标签hosts脚本

vim test_zbxhost.sh

#!/bin/bash
export PATH=$PATH
#本脚本目的是批量导入主机
#把需要添加的主机添加到host_ip.txt
#rm -rf zbx_host_medium.xml  zbx_host_input.xml
#awk '{print "sh test_zbxhost.sh "$1,$2}' host_ip.txt  | bash
#cat zbx_host_head.xml zbx_host_medium.xml zbx_host_tail.xml  >> zbx_host_input.xml
#导出zbx_host_input.xml文件上传到zabbix
cat >> zbx_host_medium.xml <<EOF
        <host>
            <host>$1</host>
            <name>(SGM-Ali)$1</name>
            <description/>
            <proxy>
                <name>alishgm-zbxproxy</name>
            </proxy>
            <status>0</status>
            <ipmi_authtype>-1</ipmi_authtype>
            <ipmi_privilege>2</ipmi_privilege>
            <ipmi_username/>
            <ipmi_password/>
            <tls_connect>1</tls_connect>
            <tls_accept>1</tls_accept>
            <tls_issuer/>
            <tls_subject/>
            <tls_psk_identity/>
            <tls_psk/>
            <templates>
                <template>
                    <name>Yungoal.Agent.Linux.SGM.P2</name>
                </template>
            </templates>
            <groups>
                <group>
                    <name>SGM</name>
                </group>
                <group>
                    <name>SGM-Ali</name>
                </group>
            </groups>
            <interfaces>
                <interface>
                    <default>1</default>
                    <type>1</type>
                    <useip>1</useip>
                    <ip>$2</ip>
                    <dns/>
                    <port>10050</port>
                    <bulk>1</bulk>
                    <interface_ref>if1</interface_ref>
                </interface>
            </interfaces>
            <applications/>
            <items/>
            <discovery_rules/>
            <httptests/>
            <macros/>
            <inventory>
            	<inventory_mode>-1</inventory_mode>
            </inventory>
            <tags/>
        </host>
EOF


配置hosts文件

vim host_ip.txt

hostname1  IP
hostname2  IP

生成导入文件

awk '{print "sh test_zbxhost.sh "$1,$2}' host_ip.txt  | bash    
cat zbx_host_head.xml zbx_host_medium.xml zbx_host_tail.xml  >> zbx_host_input.xml

批量导入主机

在这里插入图片描述
在这里插入图片描述

多次执行需要删除之前生成的文件

rm -rf zbx_host_input.xml zbx_host_medium.xml

从数据库获取zabbix 当前主机状态(监控的服务器或者监控项很多时一定不要操作下面的sql语句)

因为我们主机比较多,我这里是筛选的proxy=11795代理下的所有主机

mysql -uzabbix -p'zabbix' -e "select host,hostid,proxy_hostid,available,status from zabbix.hosts where proxy_hostid="11795";"   >> /tmp/sql.txt

下载或复制sql.txt到excel表格,因为数据是一列的,分列进行查看
在这里插入图片描述

在这里插入图片描述

status(0-enable/1-disable)
available(0-not install agent/1-normal/2-abnormal)

从zabbix控制台导出监控的主机

从每页选中所有主机,看选中的主机数是否和右下角总共主机数是否一致,一致后导出xml文件
在这里插入图片描述

把xml文件导入到linux服务器,进行切割,得出自己想要的数据

touch  host    #创建个host文件
cat zbx | grep "<host>"  | grep "</host>" |awk -F "</" '{print $1}' | awk -F ">" '{print $2}' |wc-l  #查询主机数量是否与zabbix web端一致
cat zbx | grep "<host>"  | grep "</host>" |awk -F "</" '{print $1}' | awk -F ">" '{print $2}' >host #根据xml导出的文件,筛选出主机名,IP的话同理
要使用Python调用Zabbix API批量查询主机的信息,您需要进行以下步骤: 1. 安装 `zabbix-api` 模块:您可以使用 `pip` 命令安装该模块,例如:`pip install zabbix-api` 2. 导入必要的库和模块: ```python from pyzabbix import ZabbixAPI import json ``` 3. 创建 `ZabbixAPI` 对象并登录: ```python zabbix_server = "http://zabbix.example.com" zabbix_user = "username" zabbix_password = "password" zapi = ZabbixAPI(url=zabbix_server, user=zabbix_user, password=zabbix_password) zapi.login() ``` 4. 使用 `host.get` 方法批量查询主机信息: ```python hosts = zapi.host.get(output=['hostid', 'host', 'name', 'status', 'ip']) ``` 此时,变量 `hosts` 将包含所有主机的信息。在这个示例中,我们查询了每个主机的 `hostid`、`host`、`name`、`status` 和 `ip` 信息。 5. 处理查询结果: ```python for host in hosts: print("Host ID:", host['hostid']) print("Host Name:", host['name']) print("Host Status:", host['status']) print("Host IP:", host['ip']) print("------------------------") ``` 以上代码将遍历每个主机,并打印出其 ID、名称、状态和 IP 地址。 完整代码示例: ```python from pyzabbix import ZabbixAPI import json zabbix_server = "http://zabbix.example.com" zabbix_user = "username" zabbix_password = "password" zapi = ZabbixAPI(url=zabbix_server, user=zabbix_user, password=zabbix_password) zapi.login() hosts = zapi.host.get(output=['hostid', 'host', 'name', 'status', 'ip']) for host in hosts: print("Host ID:", host['hostid']) print("Host Name:", host['name']) print("Host Status:", host['status']) print("Host IP:", host['ip']) print("------------------------") ``` 注意:在实际使用中,您可能需要根据具体情况修改查询的参数和返回结果的处理方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值