十六周四次課
19.12 添加自定義監控項目
19.13/19.14 配置郵件告警
19.15 測試告警
19.16 不發郵件的問題處理
19.12 添加自定義監控項目
添加自定義監控項目
需求:監控某臺web的80端口連接數,並出圖
兩步:1)zabbix監控中心創建監控項目;2)針對該監控項目以圖形展現
對於第一步,需要到客戶端定義腳本
vim /usr/local/sbin/estab.sh //內容如下
#!/bin/bash##獲取80端口並發連接數netstat -ant |grep ':80 ' |grep -c ESTABLISHED
chmod 755 /usr/local/sbin/estab.sh
客戶端上編輯配置文件 vim /etc/zabbix/zabbix_agentd.conf//增加
UnsafeUserParameters=1 //表示使用自定義腳本UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh //自定義監控項的key為my.estab.count,後面的[*]裏面寫腳本的參數,如果沒有參數則可以省略,腳本為/usr/local/sbin/estab.sh
重啟zabbix-agent服務 systemctl restart zabbix-agent
首先到服務端驗證,執行命令
zabbix_get -s 192.168.133.132 -p 10050 -k 'my.estab.count‘
然後在zabbix監控中心(瀏覽器)配置增加監控項目
鍵值寫my.estab.count
添加該項目後,到“監測中”? “最新數據”查看剛添加的項目是否有數據出現
有了數據就可以添加圖形了
“配置”?“主機” ?“圖形” ?“創建圖形”
添加自定義監控項目
zabbix的監控項目是在模板裏面體現,但是有時候就會有些個性化的需求:某一個業務的數據,比如:運營人員想知道網站會員註冊量,會員活躍度;實際上,這些數據,都可以通過數據庫裏面的表的數字來體現,但是zabbix模板是不可能提供那麽詳細的監控項目;遇到這種情況,就需要通過編程工具,寫成腳本,把數字展現出來,然後通過zabbix監控項目,形成圖表,就可以實現分析每天的數據是多少;
需求
監控某臺web的80端口連接數,並出圖
解決方法:
1)zabbix監控中心創建監控項目;
2)針對該監控項目以圖形展現;
1.首先需要在客戶端(B機器)定義腳本
[root@tianqi-02 ~]# vim /usr/local/sbin/estab.sh
#!/bin/bash
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
保存退出
2.配置一個能夠讓zabbix用戶執行的權限
chmod 755 /usr/local/sbin/estab.sh
[root@tianqi-02 ~]# chmod 755 !$
chmod 755 /usr/local/sbin/estab.sh
[root@tianqi-02 ~]#
3.在客戶端上編輯zabbix配置文件
B機器
[root@tianqi-02 ~]# vim /etc/zabbix/zabbix_agentd.conf
搜索 /UnsafeUserParameters
將# UnsafeUserParameters=0
改為UnsafeUserParameters=1
#目的是使用自定義腳本
搜索 /UserParameter
將# UserParameter=
改為UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
#表示自定義監控項的key為my.estab.count,後面的[*]裏面寫腳本的參數,如果沒有參數則可以省略,如果有參數寫入到 [ ] 裏面,用逗號分隔,腳本為/usr/local/sbin/estab.sh
保存退出
my.estab.count 這個是zabbix監控項裏的鍵值(key)
4.客戶端(B機器),重啟 zabbix-agent 服務
B機器
[root@tianqi-02 ~]# systemctl restart zabbix-agent
[root@tianqi-02 ~]#
5.檢查自定義的腳本是否被識別
6.到服務端(A機器)驗證,執行命令,server無法獲取數據
zabbix_get -s 192.168.23.129 -p 10050 -k 'my.estab.count'
-s 指定客戶端的IP地址
-p 指定端口,不加-p,默認就是10050端口
-k 表示 鍵值
A機器
[root@tianqi-01 ~]# zabbix_get -s 192.168.23.129 -p 10050 -k 'my.estab.count'
0
[root@tianqi-01 ~]#
若是之前在客戶端(B機器)寫的腳本權限不設置成 755 ,這裏的server獲取數據時,就會提示權限不夠
7.在獲取數據的時候,一定要保證數據的通暢,防火墻(關閉防火墻,查看沒有規則)和selinux(Disabled)都需要去設置,否則就會有可能無法獲取數據
8.在zabbix監控中心(瀏覽器)配置增加監控項目,在 配置 ——> 主機 ——>創建監控項
名稱 寫為:並發鏈接數
類型 :選擇zabbix客戶端
鍵值 寫:my.estab.count——>鍵值可自定義,是不固定的
單位 :保持默認
歷史數據保留時長(單位天):默認保持90天
應用集:可以不選擇,因為沒有定義應用集
點擊“添加”
9.在添加該項目後,還需要添加圖形,配置——>主機——>圖形——>創建圖形
名稱為並發鏈接數——>然後添加監控項並發鏈接數——>點擊添加——>添加
10.在圖形中,查看新創建的圖形,然後選擇預覽
若是網站訪問量很大,那麽每隔30秒就可以看到一個數字,時間長了,就可查看到網站訪問量的趨勢
11.做一個觸發器,選擇觸發器——>創建觸發器
當並發大於200,做警告級別
12.這樣觸發器就配置成功
總結:
在服務端上獲取數值(通過腳本實現),給予服務端訪問腳本的權限,在zabbix監控中心添加對應的監控項目(輸入鍵值)即可
19.13/19.14 配置郵件告警
配置郵件告警
使用163或者QQ郵箱發告警郵件
首先登錄你的163郵箱,設置開啟POP3、IMAP、SMTP服務
開啟並記錄授權碼
然後到監控中心設置郵件告警
“管理”,“報警媒介類型”,“創建媒體類型”
{ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}
創建報警腳本mail.py
vim /usr/lib/zabbix/alertscripts/mail.py//內容參考
chmod 755 /usr/lib/zabbix/alertscripts/mail.py
創建一個接受告警郵件的用戶,“管理”,“用戶”,“創建用戶”,“報警媒介”,類型選擇“baojing”,註意用戶的權限,如果沒有需要到用戶組去設置權限
設置動作,“配置”,“動作”,“創建動作”,名稱寫“sendmail”(自定義),“操作”頁面,內容如下
HOST:{HOST.NAME} {HOST.IP}TIME:{EVENT.DATE} {EVENT.TIME} LEVEL:{TRIGGER.SEVERITY} NAME:{TRIGGER.NAME}messages:{ITEM.NAME}:{ITEM.VALUE}ID:{EVENT.ID}
“新的觸發條件”,A維護狀態 非在 維護,B觸發器示警度>=未分類
“操作”,選擇發送的用戶為剛創建的用戶,僅送到選擇“baojing”
切換到“恢復操作”,把信息改成如下
HOST:{HOST.NAME} {HOST.IP}TIME:{EVENT.DATE} {EVENT.TIME} LEVEL:{TRIGGER.SEVERITY} NAME:{TRIGGER.NAME}messages:{ITEM.NAME}:{ITEM.VALUE}ID:{EVENT.ID}
點擊“新的”,“操作”,選擇發送的用戶為剛創建的用戶,僅送到選擇“baojing”
測試告警
配置郵件告警
1.首先需要一個郵箱,使用郵箱發郵件(163郵箱)
2.訪問163郵箱,在第三方平臺上調用163郵箱發郵件,需要設置開啟POP3、IMAP、SMTP服務
設置——POP3/IMAP/SMTP
第一次開啟POP3/IMAP/SMTP服務會有短信驗證
在驗證完之後還需要設置客戶端授權密碼(需要牢記去掉4個點),接下來發郵件的密碼就是授權密碼
3.在寫腳本之前 進入zabbix的web界面——> 管理——> 報警媒介類型——>創建媒體類型
在報警媒介類型裏面的自帶的 Email 使用不方便,所以自己寫python發郵件的腳本
名稱:指的是報警媒介類型的名稱,自定義,這裏叫做報警
類型:腳本
腳本名稱:自定義,這裏叫做 mail.py
在py腳本參數下,三個參數都分布在py的腳本裏
{ALERT.SENDTO} 表示收件人
{ALERT.SUBJECT} 表示郵件主題
{ALERT.MESSAGE} 表示郵件內容
4.這時會看到成功添加報警報警媒介類型
5.要實現報警,首先py腳本能發出郵件
6.在服務端(A機器)創建報警腳本mail.py,查看報警腳本所在位置
A機器
[root@tianqi-01 ~]# vim /etc/zabbix/zabbix_server.conf
搜索/alert
AlertScriptsPath=/usr/lib/zabbix/alertscripts
#報警腳本所在路徑
7.創建報警腳本mail.py,在/usr/lib/zabbix/alertscripts/目錄下是空的, 來創建,腳本內容參考
[root@tianqi-01 ~]# ls /usr/lib/zabbix/alertscripts/
[root@tianqi-01 ~]#
A機器
[root@tianqi-01 ~]# vim /usr/lib/zabbix/alertscripts/mail.py
#!/usr/bin/env python
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from subprocess import *
def sendqqmail(username,password,mailfrom,mailto,subject,content):
gserver = 'smtp.163.com'
##定義發郵件類型
gport = 25
try:
msg = MIMEText(unicode(content).encode('utf-8'))
msg['from'] = mailfrom
msg['to'] = mailto
msg['Reply-To'] = mailfrom
msg['Subject'] = subject
smtp = smtplib.SMTP(gserver, gport)
smtp.set_debuglevel(0)
smtp.ehlo()
smtp.login(username,password)
smtp.sendmail(mailfrom, mailto, msg.as_string())
smtp.close()
except Exception,err:
print "Send mail failed. Error: %s" % err
def main():
to=sys.argv[1]
subject=sys.argv[2]
content=sys.argv[3]
##定義QQ郵箱的賬號和密碼,你需要修改成你自己的賬號和密碼(請不要把真實的用戶名和密碼放到網上公開,否則你會死的很慘)
sendqqmail('163郵箱','密碼','163郵箱',to,subject,content)
if __name__ == "__main__":
main()
#####腳本使用說明######
#1. 首先定義好腳本中的郵箱賬號和密碼
#2. 腳本執行命令為:python mail.py 目標郵箱 "郵件主題" "郵件內容"
保存退出
8.更改mail.py腳本的權限(很重要!!!),否則就會無法告警
chmod 755 /usr/lib/zabbix/alertscripts/mail.py
[root@tianqi-01 ~]# chmod 755 /usr/lib/zabbix/alertscripts/mail.py
[root@tianqi-01 ~]#
9.測試mail.py是否能發郵件,定義三個參數,若是給QQ的郵箱發郵件有可能會收不到
python mail.py [email protected] "ssss" "dddd"
沒有任何提示就表示發郵件成功
[root@tianqi-01 ~]# cd /usr/lib/zabbix/alertscripts/
[root@tianqi-01 alertscripts]# python mail.py [email protected] "ssss" "dddd"
[root@tianqi-01 alertscripts]#
10.這時打開163郵箱,會看到郵件
11.若是在郵件裏面寫中文,到郵箱裏面會顯示亂碼,這是因為在zabbix使用的是utf-8的字符集,而在郵箱裏使用的是GBK字符集,所以會亂碼
12.創建一個接受告警郵件的用戶(用戶是用來接收郵件的),在創建用戶的前提是創建一個用戶組,用戶組可以使用已經存在的, 所以這裏直接創建用戶,管理-->用戶-->創建用戶
13.再給剛剛的用戶設置郵箱,管理-->用戶-->報警媒介-->添加
14.還要註意用戶的權限,如果沒有權限,郵件是沒法發的,要暫時到用戶組裏 (管理-->用戶群組)
默認的權限是無,需要去修改群組,給予權限
此時用戶權限出現
15.設置動作,我們配置了觸發器,那麽觸發後應該去做什麽,配置-->動作-->創建動作
動作
新的觸發條件,當觸發器示警度(也就是信息,警告,一般嚴重...)大於等於未分類(未分類 表示 所有狀態,都會發信息)
名稱:中英文都可以,這裏叫 發郵件
條件:維護狀態 非在 維護,就表示 維護狀態機器不進行發郵件
配置-->動作-->操作
默認信息:直接刪除原有的(比較亂),粘貼下面的內容
維護期間暫停操作:選擇打勾(若不打對勾也可以,因為在動作的條件裏定義了)
默認信息定義當發生報警時,zabbix會向你的郵箱發送什麽內容 HOST:{HOST.NAME} {HOST.IP} (定義主機名) TIME:{EVENT.DATE} {EVENT.TIME} (定義事件發生時間) LEVEL:{TRIGGER.SEVERITY} (定義示警度) NAME:{TRIGGER.NAME} (定義哪一個觸發器發出的報警) messages:{ITEM.NAME}:{ITEM.VALUE} (發出告警會出現什麽狀態碼) ID:{EVENT.ID} (發生事件的id)
配置-->動作-->恢復操作
默認信息:直接刪除原有的(比較亂),粘貼下面的內容(粘貼內容和操作裏面復制進去的信息是相同的)
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}ID:{EVENT.ID}
最後在操作處點 添加 確認
19.15 測試告警
測試告警
1.創建觸發器,來實現告警,配置-->主機-->aming-02主機-->創建觸發器
名稱:系統負載
嚴重性:警告
表達式: 如下
選擇 添加
最終看到如下
2.然後回到監控中心,主頁——>最近20個問題
如果提示為啟用中,證明發現問題,正在啟用告警,顯示為完成,就證明已經發送郵件告警;如圖,我們的實驗是成功的
查看郵箱,會看到郵件發送
這就表示測試郵件告警成功
這時想要解決這個問題,只要將觸發器 系統負載條件數值調整 >1 即可,再來查看監控中心,就會發現問題消失了,並且會給郵箱發送 OK 的郵件
3.這就表示測試郵件告警成功
4.這時想要解決這個問題,只要將觸發器 系統負載條件數值調整 >1 即可,再來查看監控中心,就會發現問題消失了,並且會給郵箱發送 OK 的郵件
19.16 不發郵件的問題處理
不發郵件的問題處理
因為虛擬機,可能存在一些bug,第一次配置的時候,經常會出現zabbix發現問題,做了郵件告警,但是郵箱卻沒有收到郵件的問題;
重新恢復快照以後再做一次,就又能正常發送郵件,接收郵件了
配置郵件告警總結
1.到 163郵箱或QQ郵箱開啟SMTP服務,並記錄授權碼,沒有授權碼,腳本裏面就無法去寫密碼
2.到監控中心設置郵件告警
首先設置一個報警媒介;
三個參數必須填寫正確,順序也不能錯誤
3.編輯郵件告警腳本,腳本地址
/usr/lib/zabbix/alertscripts目錄下
路徑不能錯誤,必須在這個路徑下,添加一個腳本
4.創建好之後,記得給腳本755權限,否則zabbix用戶是無法調用這個腳本的
5.配置用戶
配置用戶之前,把用戶群組的權限改一下,讓組有一個讀寫權限
用戶加到指定的群組裏
報警媒介,添加自己的郵箱地址,自己給自己發,這個成功率會比較高
6.配置動作
操作修改默認信息(發送郵件的格式),操作需要添加一個“新的”給誰發郵件;恢復操作同樣
7.測試一下告警是否能成功發送郵件
人為創建一個觸發器,設置一個系統最低運行都會觸發報警的觸發器
也可以在客戶端上斷開連接(停止客戶端的zabbix服務)
8.更改主動和被動
PS: 客戶端主動模式和被動模式,在監控項裏,選擇一個監控項打開,選擇類型是客戶端主動,客戶端;客戶端主動即為主動模式,客戶端為被動模式
9.觸發器不能用中文命名,不然郵件顯示亂碼
友情鏈接:http://www.apelearn.com阿銘linux
十六周四次課