1. 程式人生 > >十六周四次課

十六周四次課

linux

十六周四次課

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的郵箱發郵件有可能會收不到


  • 沒有任何提示就表示發郵件成功

[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. 這就表示測試郵件告警成功

  2. 這時想要解決這個問題,只要將觸發器 系統負載條件數值調整 >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

十六周四次課