暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

zabbix监控动态ip的主机,通过运行脚本自动获取最新的ip并更改zabbix_web上的主机ip地址

小小IT仔 2021-06-22
2204
作用:【定时自动更改zabbix_web中监控主机的ip,其他信息不变】----前提是之前手动添加过主机信息      zabbix被监控主机没有固定ip,我们通过解析域名得到最新的ip,域名解析以后将命令结果输入到txt中,从txt中匹配出ip地址,把zabbix中的ip地址更改为此ip

步骤:

       【0】调用系统命令,解析域名,将命令运行结果保存到txt文件中

1】从txt文件中提取字符串,去掉回车符 空行,将多有字符串拼接在一起,生产一个字符串(无空行、无回车符)
2】通过正则匹配出ip地址
3】使用pymysql,连接到zabbix数据库,更新数据库中的IP.[我们事先要了解zabbix的数据库结构,ip存放的表,如何更改ip,使其他信息不变]
执行:在linux下执行不会报错,在windows下执行的时候因为txt路径转义符的原因报错,需要添加转义符

脚本内容:

    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    """
    作者:pzl960504@163.com
    作用:【定时自动更改zabbix_web中监控主机的ip,其他信息不变】----前提是之前手动添加过主机信息
    zabbix被监控主机没有固定ip,我们通过解析域名得到最新的ip,域名解析以后将命令结果输入到txt中,从txt中匹配出ip地址,把zabbix中的ip地址更改为此ip。
    步骤:
    【1】从txt文件中提取字符串,去掉回车符 空行,将多有字符串拼接在一起,生产一个字符串(无空行、无回车符)
    【2】通过正则匹配出ip地址
    【3】使用pymysql,连接到zabbix数据库,更新数据库中的IP.[我们事先要了解zabbix的数据库结构,ip存放的表,如何更改ip,使其他信息不变]
    执行:在linux下执行不会报错,在windows下执行的时候因为txt路径转义符的原因报错,需要添加转义符
    """
    import re # 解析ip时需要
    import pymysql # 修改数据库数据需要
    import os
    #定义函数,使域名作为为变量
    def auto_change_zabbix_web_ip(ddns):
    #执行系统命令,将命令的结果存储到txt文件中
    path='/dig/'+ddns+'.txt'
    os.system('rm -rf '+ path+'&& dig ' + ddns + ' >> dig/' + ddns + '.txt')
    # 【1】读取文件
    with open(path) as file:
    lines = file.readlines() # 读取每一行
    a = '' # 空字符(中间不加空格)
    for line in lines:
    a += line.strip() # strip()是去掉每行末尾的换行符\n 1
    c = a.split() # 将a分割成单独的字符串 2
    b = ''.join(c) # 将c的每个字符直接连接 3
    txt_ip = b # 定义需要解析的字符串
    # 【2】正则匹配语句
    re_str = re.compile(
    r'(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)')
    re_ip = re_str.search(txt_ip)
    ip = re_ip.group(0)
    input_ip = ip
    # 【3】数据修改
    # 创建连接,定义连接信息[zabbix数据库信息]
    conn = pymysql.connect(
           host="*.*.*.*",
    user="zabbix",
           password="password"
    )
    # 创建游标
    cursor = conn.cursor()
    # 定义sql语句,并执行
        if ddns=="域名1":
    update = "UPDATE zabbix.interface set ip='" + input_ip + "' where hostid=10414"
        if ddns=="域名2":
    update = "UPDATE zabbix.interface set ip='" + input_ip + "' where hostid=10413"
    cursor.execute(update)
    # 提交事务
    conn.commit()
    # 释放游标
    cursor.close()
    # 关闭连接
    conn.close()
    #调用函数执行
    auto_change_zabbix_web_ip("域名1")
    auto_change_zabbix_web_ip("域名2")


    文章转载自小小IT仔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论