千家信息网

Python Selenium 自动配置zabbix邮箱报警

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,介绍:在上一篇博客中写了关于zabbix配置邮箱报警功能,但由于配置过程十分繁琐,这里我写了一个自动化配置的脚本(python selenium模块)。直接运行脚本会提高很多效率!实验环境:1.pyt
千家信息网最后更新 2024年11月18日Python Selenium 自动配置zabbix邮箱报警

介绍:

在上一篇博客中写了关于zabbix配置邮箱报警功能,但由于配置过程十分繁琐,这里我写了一个自动化配置的脚本(python selenium模块)。直接运行脚本会提高很多效率!

实验环境:

1.python3.7
2.selenium 模块
3.PyCharm 开发软件

实验步骤

一、zabbix服务端和代理端安装,配置

温馨提示:具体步骤参考博客 https://blog.51cto.com/13760351/2431576

二、zabbix服务web配置邮箱报警

编写selenium自动化脚本

from selenium import webdriver
import time
driver = webdriver.Chrome()
#Windows窗口最大化
driver.maximize_window()


# 登录账户密码

driver.get("http://192.168.0.112/zabbix/")
driver.find_element_by_xpath("//input[@type='text']").send_keys("Admin")
driver.find_element_by_id("password").send_keys("zabbix")
driver.find_element_by_id("enter").click()


# 创建媒体类型

driver.get("http://192.168.0.112/zabbix/zabbix.php?action=mediatype.edit")
选择"脚本"
driver.find_element_by_id("type").click()
driver.find_element_by_xpath('//*[@id="type"]/option[2]').click()
名称
driver.find_element_by_id("description").send_keys("mail-test")
脚本名称
driver.find_element_by_id("exec_path").send_keys("mailx.sh")
# 添加脚本参数
driver.find_element_by_id("exec_param_add").click()
driver.find_element_by_id("exec_params_0_exec_param").send_keys("{ALERT.SENDTO}")
driver.find_element_by_id("exec_param_add").click()
driver.find_element_by_id("exec_params_1_exec_param").send_keys("{ALERT.SUBJECT}")
driver.find_element_by_id("exec_param_add").click()
driver.find_element_by_id("exec_params_2_exec_param").send_keys("{ALERT.MESSAGE}")
# 添加完成
driver.find_element_by_id("add").click()


# 设置报警媒介

driver.get("http://192.168.0.112/zabbix/users.php?form=update&userid=1")
# 设置中文
driver.find_element_by_id("lang").click()
driver.find_element_by_xpath('//[@id="lang"]/option[3]').click()
# 报警媒介
driver.find_element_by_id("tab_mediaTab").click()
# 添加
driver.find_element_by_xpath('//
[@id="userMediaFormList"]/li/div[2]/div/button').click()
time.sleep(1)
# 选择类型
driver.find_element_by_xpath('//[@id="mediatypeid"]/option[3]').click()
# 收件邮箱
driver.find_element_by_id("sendto").send_keys("1451772664@qq.com")
# 添加
driver.find_element_by_xpath('//
[@id="overlay_dialogue"]/div[3]/button[1]').click()
time.sleep(1)
# 更新
driver.find_element_by_id("update").click()


# 配置操作-动作

driver.get('http://192.168.0.112/zabbix/actionconf.php?ddreset=1')
# 删除默认模板
driver.find_element_by_id("g_actionid_3").click()
driver.find_element_by_xpath('//[@id="action_buttons"]/button[3]').click()
time.sleep(1)
#确认对话框
dig_confirm = driver.switch_to.alert
dig_confirm.accept()
time.sleep(1)
#动作模块
driver.get("http://192.168.0.112/zabbix/actionconf.php?eventsource=0&form=%E5%88%9B%E5%BB%BA%E5%8A%A8%E4%BD%9C")
#名称
driver.find_element_by_id("name").send_keys("mailx")
#新的触发条件
driver.find_element_by_id('new_condition_conditiontype').click()
driver.find_element_by_xpath('//
[@id="new_condition_conditiontype"]/option[3]').click()
driver.find_element_by_xpath('//[@id="actionTab"]/ul/li[4]/div[2]/div/table/tbody/tr[1]/td/div[3]/div[2]/button').click()
time.sleep(1)
driver.find_element_by_id('item_2').click()
driver.find_element_by_xpath('//
[@id="overlay_dialogue"]/div[3]/button[1]').click()
driver.find_element_by_xpath('//*[@id="actionTab"]/ul/li[4]/div[2]/div/table/tbody/tr[2]/td/button').click()


知识点讲解:确认对话框部分,是没有直接元素可以定位的,只能使用固定"dig_confirm"方法

#操作

driver.find_element_by_id('tab_operationTab').click()
#默认时间
driver.find_element_by_id('esc_period').clear()
driver.find_element_by_id('esc_period').send_keys("60")
#默认标题
driver.find_element_by_id('def_shortdata').clear()
driver.find_element_by_id('def_shortdata').send_keys("{TRIGGER.STATUS}:{TRIGGER.NAME}")
#操作内容
driver.find_element_by_id('def_longdata').clear()
driver.find_element_by_id('def_longdata').send_keys(
'告警主机:{HOST.NAME}\n'
'告警 IP:{HOST.IP}\n'
'告警时间:{EVENT.DATE}-{EVENT.TIME}\n'
'告警等级:{TRIGGER.SEVERITY}\n'
'告警信息:{TRIGGER.NAME}:{ITEM.VALUE}\n'
'事件 ID:{EVENT.ID}'
)
time.sleep(1)
#添加新的
driver.find_element_by_xpath('//[@id="operationTab"]/ul/li[5]/div[2]/div/button').click()
#步骤
driver.find_element_by_id('new_operation_esc_step_to').send_keys("3")
#时间
driver.find_element_by_id('new_operation_esc_period').send_keys("60")
#发送用户
driver.find_element_by_xpath('//
[@id="opmsgUserListFooter"]/td/button').click()
time.sleep(1)
driver.find_element_by_id('item_1').click()
driver.find_element_by_xpath('//[@id="overlay_dialogue"]/div[3]/button[1]').click()
driver.find_element_by_id('new_operation_opmessage_mediatypeid').click()
driver.find_element_by_xpath('//
[@id="new_operation_opmessage_mediatypeid"]/option[4]').click()
#添加
driver.find_element_by_xpath('//*[@id="operationTab"]/ul/li[6]/div[2]/div/ul[2]/li[1]/button').click()


知识点讲解:sendkey发送换行文本需要加"\n",而且是在引号里面,否则没用。

#恢复操作

driver.find_element_by_id('tab_recoveryOperationTab').click()
#恢复标题
driver.find_element_by_id('r_shortdata').clear()
driver.find_element_by_id('r_shortdata').send_keys("{TRIGGER.STATUS}:{TRIGGER.NAME}")
#恢复信息内容
driver.find_element_by_id('r_longdata').clear()
driver.find_element_by_id('r_longdata').send_keys(
"恢复主机:{HOST.NAME}\n"
"恢复 IP:{HOST.IP}\n"
"恢复时间:{EVENT.DATE}-{EVENT.TIME}\n"
"恢复等级:{TRIGGER.SEVERITY}\n"
"恢复信息:{TRIGGER.NAME}:{ITEM.VALUE}\n"
"恢复 ID:{EVENT.ID}"
)
#添加"新的"
driver.find_element_by_xpath('//[@id="recoveryOperationTab"]/ul/li[3]/div[2]/div/button').click()
driver.find_element_by_xpath('//
[@id="recOpmsgUserListFooter"]/td/button').click()
time.sleep(1)
driver.find_element_by_id('item_1').click()
driver.find_element_by_xpath('//[@id="overlay_dialogue"]/div[3]/button[1]').click()
driver.find_element_by_id('new_recovery_operation_opmessage_mediatypeid').click()
driver.find_element_by_xpath('//
[@id="new_recovery_operation_opmessage_mediatypeid"]/option[4]').click()
driver.find_element_by_xpath('//*[@id="recoveryOperationTab"]/ul/li[4]/div[2]/div/ul[2]/li[1]/button').click()
#添加所有动作
driver.find_element_by_id('add').click()


#添加监控主机

driver.get('http://192.168.0.112/zabbix/hosts.php?form=create')
#主机名称
driver.find_element_by_id("host").send_keys("test")
#群组
driver.find_element_by_xpath('//[@id="hostlist"]/li[3]/div[2]/div/div[2]/button').click()
time.sleep(2)
driver.find_element_by_id("item_2").click()
driver.find_element_by_xpath('//
[@id="overlay_dialogue"]/div[3]/button[1]').click()
#添加ip地址
driver.find_element_by_name('interfaces[1][ip]').clear()
driver.find_element_by_name('interfaces[1][ip]').send_keys('192.168.0.200')
#模板
driver.find_element_by_id('tab_templateTab').click()
driver.find_element_by_xpath('//[@id="templateTab"]/ul/li[2]/div[2]/div/table/tbody/tr[1]/td/div/div[2]/button').click()
time.sleep(2)
driver.find_element_by_id('item_10095').click()
driver.find_element_by_id('item_10050').click()
driver.find_element_by_xpath('//
[@id="overlay_dialogue"]/div[4]/button[1]').click()
driver.find_element_by_xpath('//*[@id="templateTab"]/ul/li[2]/div[2]/div/table/tbody/tr[2]/td/button').click()
#点击添加
driver.find_element_by_id('add').click()


#回到仪表板

driver.get('http://192.168.0.112/zabbix/zabbix.php?action=dashboard.view&ddreset=1')

三、web页面验证


总结

1.这里写的脚本只是一个模板,不建议拿过去直接使用
2.这里面有好多细节要特别注意,例如弹出对话框处理,发送文本换行,时间停顿等

0