19.12 添加自定義監控項目
zabbix的監控項目是在模板裏面體現,但是有時候就會有些個性化的需求:某一個業務的數據,例如:運營人員想知道網站會員註冊量,會員活躍度;實際上,這些數據,都可以通過數據庫裏面的表的數字來體現,但是zabbix模板是不可能提供那麼相信的監控項目;遇到這種情況,就需要通過編程工具,寫成腳本,最後通過zabbix監控項目,形成圖表,就可以實現;
自定義的監控項目
• 需求:監控某臺web的80端口連接數,並出圖
• 解決方案: 1.zabbix監控中心創建監控項目; 1.針對該監控項目以圖形展現
• 對於第一步,需要到客戶端定義腳本
vim /usr/local/sbin/estab.sh //內容如下
#!/bin/bash
##獲取80端口併發連接數
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
配置一個能夠讓zabbix用戶執行的權限
chmod 755 /usr/local/sbin/estab.sh
• 客戶端上編輯配置文件
vim /etc/zabbix/zabbix_agentd.conf //增加
#1表示使用自定義腳本
UnsafeUserParameters=1
#自定義監控項的key爲my.estab.count,後面的[*]裏面寫腳本的參數,如果沒有參數則可以省略,腳本爲/usr/local/sbin/estab.sh,my.estab.count 是zabbix監控項裏的一鍵值
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
• 重啓zabbix-agent服務
systemctl restart zabbix-agent
• 首先到服務端驗證,執行命令
[root@zabbix ~]# zabbix_get -s 172.16.22.246 -p 10050 -k 'my.estab.count' //-p端口,-k 鍵值
3
web 管理頁
• 然後在zabbix監控中心(瀏覽器)配置增加監控項目(併發鏈接數)
配置-->創建模板-->監控項
• 鍵值寫my.estab.count
添加圖形
然後給對應的主機添加剛纔創建的模板,配置完主機後去瀏覽器訪問
配置好以後,就可以在監控中心查看圖表清空
- 進入監控中心
- 進入圖表
- 選擇需要查看的客戶端
- 選擇需要查看的圖表類型
總結:
在服務端上獲取數值(通過腳本實現),給予服務端訪問腳本的權限,在zabbix監控中心添加對應的監控項目(輸入鍵值),即可19.13/19.14 配置郵件告警
• 使用gmail發告警郵件
• 首先登錄gmail郵箱,設置轉發,開啓POP3、IMAP、SMTP服務;允許低安全應用
• 開啓並記錄授權碼(需要牢記)
• 然後到監控中心設置郵件告警
• “管理”,“報警媒介類型”,“創建媒體類型”
{ALERT.SENDTO}收件人,{ALERT.SUBJECT}主題,{ALERT.MESSAGE}郵件內容 //這三個東西分佈在py腳本參數下
要實現報警,首先py腳本能發出郵件
定義腳本報警 在配置文件定義 在服務端上定義
vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts //報警腳本所在路徑
• 創建報警腳本mail.py
• vim /usr/lib/zabbix/alertscripts/mail.py
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
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.qq.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('[email protected]','aaaaaaaaaa','[email protected]',to,subject,content)
if __name__ == "__main__":
main()
#####腳本使用說明######
#1. 首先定義好腳本中的郵箱賬號和密碼
#2. 腳本執行命令爲:python mail.py 目標郵箱 "郵件主題" "郵件內容"
給予腳本讀寫權限
chmod 755 /usr/lib/zabbix/alertscripts/mail.py
測試mail.py是否能發郵件
# python mail.py [郵箱] "test1" "zabbix;mail;test"
# date
Mon Jul 9 01:46:51 CST 2018
創建一個接受告警郵件的用戶,“管理”,“用戶”,“創建用戶”
選擇羣組,歸屬於那個羣組,這個涉及到之後的權限是否能發送郵件
密碼,用於,登錄,接收,發送郵件
登錄系統時,默認顯示的界面
“報警媒介”,類型選擇“Email”,注意用戶的權限,如果沒有需要到用戶組去設置權限
別忘了點添加
默認的權限是無,需要去修改羣組,給予權限
1、選擇讀寫 2、點擊“選擇”添加所有組 3、選擇好一切以後,添加權限
如果沒有設置觸發器,需添加一個觸發器
• 設置動作,“配置”,“動作”,“創建動作”,名稱寫“sendmail”(自定義),“操作”頁面,內容如下:
“維護狀態 非在 維護” // 維護狀態機器不進行發郵件
“觸發器示警度”>=未分類 // 即任何情況都進行發郵件
修改發郵件的模板
修改發郵件的模板
HOST:{HOST.NAME} {HOST.IP} //主機,IP
TIME:{EVENT.DATE} {EVENT.TIME} //時間
LEVEL:{TRIGGER.SEVERITY} //示警度
NAME:{TRIGGER.NAME} //那個觸發器
messages:{ITEM.NAME}:{ITEM.VALUE} //狀態
ID:{EVENT.ID} //時間ID
•“操作”,選擇發送的用戶爲剛創建的用戶,僅送到選擇"Email"
• 切換到“恢復操作”,把信息改成如下 (客戶端狀態恢復了,需要確認已經恢復狀態)
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
• 點擊“新的”,“操作”,選擇發送的用戶爲剛創建的用戶,僅送到選擇“Email”
最後查看動作主界面
看到最後有一個“已啓用”證明配置成功
19.15 測試告警
手動調節觸發器,以實現報警,發郵件
包剛纔的5000改爲5
再次修改爲5000
19.16 不發郵件的問題處理
爲虛擬機,可能存在一些bug,第一次配置的時候,經常會出現zabbix發現問題,做了郵件告警,但是郵箱卻沒有收到郵件的問題;重新恢復快照以後再做一次,就又能正常發送郵件,接收郵件了
配置郵件告警總結
1、到gmail郵箱開啓SMTP服務,並記錄授權碼,沒有開啓,腳本里面就沒有寫的密碼
2、設置郵件告警
首先設置一個報警媒介;三個參數必須填寫正確,順序也不能錯誤
3、編輯郵件告警腳本
/usr/lib/zabbix/alertscripts
路徑不能錯誤,必須在這個路徑下,添加一個腳本
創建好之後,記得給腳本755權限
4、配置用戶
配置用戶之前,把用戶羣組的權限改一下,讓組有一個讀寫權限
用戶加到指定的羣組裏
報警媒介,添加自己的郵箱,自己給自己發,這個成功率會比較高
5、配置動作
操作修改默認信息(發送郵件的格式),操作需要添加一個“新的”給誰發郵件;恢復操作同樣
6、測試一下告警是否能成功發送郵件
人爲創建一個觸發器,設置一個系統最低運行都會觸發報警的觸發器
也可以在客戶端上斷開連接(停止客戶端的zabbix服務)
PS: 客戶端主動模式和被動模式,在監控項裏,選擇一個監控項打開,選擇類型是客戶端主動,客戶端;客戶端主動即爲主動模式,客戶端爲被動模式