介紹:
在上一篇博客中寫了關于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("http://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.這里面有好多細節要特別注意,例如彈出對話框處理,發送文本換行,時間停頓等
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
