介紹:

在上一篇博客中寫了關(guān)于zabbix配置郵箱報(bào)警功能,但由于配置過程十分繁瑣,這里我寫了一個(gè)自動(dòng)化配置的腳本(python selenium模塊)。直接運(yùn)行腳本會(huì)提高很多效率!

實(shí)驗(yàn)環(huán)境:

1.python3.7
2.selenium 模塊
3.PyCharm 開發(fā)軟件

實(shí)驗(yàn)步驟

一、zabbix服務(wù)端和代理端安裝,配置

溫馨提示:具體步驟參考博客 https://blog.51cto.com/13760351/2431576

二、zabbix服務(wù)web配置郵箱報(bào)警

編寫selenium自動(dòng)化腳本

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("http://input[@type='text']").send_keys("Admin")
driver.find_element_by_id("password").send_keys("zabbix")
driver.find_element_by_id("enter").click()


# 創(chuàng)建媒體類型

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")
# 添加腳本參數(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()


# 設(shè)置報(bào)警媒介

driver.get("http://192.168.0.112/zabbix/users.php?form=update&userid=1")
# 設(shè)置中文
driver.find_element_by_id("lang").click()
driver.find_element_by_xpath('// [@id="lang"]/option[3]').click()
# 報(bào)警媒介
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()


# 配置操作-動(dòng)作

driver.get('http://192.168.0.112/zabbix/actionconf.php?ddreset=1')
# 刪除默認(rèn)模板
driver.find_element_by_id("g_actionid_3").click()
driver.find_element_by_xpath('// [@id="action_buttons"]/button[3]').click()
time.sleep(1)
#確認(rèn)對(duì)話框
dig_confirm = driver.switch_to.alert
dig_confirm.accept()
time.sleep(1)
#動(dòng)作模塊
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")
#新的觸發(fā)條件
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()


知識(shí)點(diǎn)講解: 確認(rèn)對(duì)話框部分,是沒有直接元素可以定位的,只能使用固定"dig_confirm"方法

#操作

driver.find_element_by_id('tab_operationTab').click()
#默認(rèn)時(shí)間
driver.find_element_by_id('esc_period').clear()
driver.find_element_by_id('esc_period').send_keys("60")
#默認(rèn)標(biāo)題
driver.find_element_by_id('def_shortdata').clear()
driver.find_element_by_id('def_shortdata').send_keys("{TRIGGER.STATUS}:{TRIGGER.NAME}")
#操作內(nèi)容
driver.find_element_by_id('def_longdata').clear()
driver.find_element_by_id('def_longdata').send_keys(
'告警主機(jī):{HOST.NAME}\n'
'告警 IP:{HOST.IP}\n'
'告警時(shí)間:{EVENT.DATE}-{EVENT.TIME}\n'
'告警等級(jí):{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")
#時(shí)間
driver.find_element_by_id('new_operation_esc_period').send_keys("60")
#發(fā)送用戶
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()


知識(shí)點(diǎn)講解: sendkey發(fā)送換行文本需要加"\n",而且是在引號(hào)里面,否則沒用。

#恢復(fù)操作

driver.find_element_by_id('tab_recoveryOperationTab').click()
#恢復(fù)標(biāo)題
driver.find_element_by_id('r_shortdata').clear()
driver.find_element_by_id('r_shortdata').send_keys("{TRIGGER.STATUS}:{TRIGGER.NAME}")
#恢復(fù)信息內(nèi)容
driver.find_element_by_id('r_longdata').clear()
driver.find_element_by_id('r_longdata').send_keys(
"恢復(fù)主機(jī):{HOST.NAME}\n"
"恢復(fù) IP:{HOST.IP}\n"
"恢復(fù)時(shí)間:{EVENT.DATE}-{EVENT.TIME}\n"
"恢復(fù)等級(jí):{TRIGGER.SEVERITY}\n"
"恢復(fù)信息:{TRIGGER.NAME}:{ITEM.VALUE}\n"
"恢復(fù) 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()
#添加所有動(dòng)作
driver.find_element_by_id('add').click()


#添加監(jiān)控主機(jī)

driver.get('http://192.168.0.112/zabbix/hosts.php?form=create')
#主機(jī)名稱
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()
#點(diǎn)擊添加
driver.find_element_by_id('add').click()


#回到儀表板

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

三、web頁(yè)面驗(yàn)證

Python Selenium 自動(dòng)配置zabbix郵箱報(bào)警功能_第1張圖片
Python Selenium 自動(dòng)配置zabbix郵箱報(bào)警功能_第2張圖片

總結(jié)

1.這里寫的腳本只是一個(gè)模板,不建議拿過去直接使用
2.這里面有好多細(xì)節(jié)要特別注意,例如彈出對(duì)話框處理,發(fā)送文本換行,時(shí)間停頓等