zabbix郵件報警及自定義腳本實戰

1、概要

一、說明
本文是繼<LNMP環境部署zabbix實戰><agent部署與zabbix web配置>的又一後續補充篇,衆所周知做爲監控系統主要就是數據採集,監控數據存儲,再根據監控數據進行判斷產生事件,進行報警通知管理員,同時經過展現接口進行數據的展現;本文主要關注zabbix的報警系統的實現及自定義腳本發送報警;
二、知識回顧
1)zabbix邏輯組件:
主機組(host groups)
主機(hosts)
應用(applications)
監控項(items)
觸發器(triggers)
事件(events)
動做(actions):條件(conditions)和操做(operations)
媒介(media):發送通知通道;
通知(notifications)
遠程命令(remote command)
報警升級(escalation)
模板(template)
圖形(graph)
屏幕(screens)
幻燈(side show)
2)zabbix架構:
zabbix郵件報警及自定義腳本實戰
根據以上的組件及架構說明:
zabbix監控系統包括zabbix-server(服務端)用來收集分析展現監控數據,同時定義各監控項數據的觸發條件,用於報警;zabbix-agent(監控端)用於收集所在設備上的監控數據(可自定義監控什麼),監控數據既能夠主動也能夠被髮送到zabbix-server進行處理;同時也能夠執行遠程命令;在zabbix-server與zabbix-agent之間添加了zabbix_proxy這個代理監控服務,使用得zabbix監控系統支持分佈式監控系統;node

三、實驗重點與環境
對於部署好了zabbix-server與agent並應用了對應的模塊監控後,在web GUI上咱們能夠看到各監控的數據,對於出故障的服務咱們須要提供報警通知管理的功能;所以本文主要講述如何完善和自定義郵件報警功能;
zabbix-server: CentOS7.2_x64 172.16.3.152
zabbix-agent: CentOS7.2_x64 172.16.3.216 httpd服務
測試當httpd服務故障時第一步嘗試遠程重啓httpd服務,若是不能解決發送郵件給管理員,恢復時發送恢復郵件!經過對http服務的狀態感知報警系統的配置與做用!web

2、zabbix報警系統

一、說明
zabbix報警系統是基於其餘zabbix組件,並不是是獨立的,關係以下圖所示:
zabbix郵件報警及自定義腳本實戰apache

如上圖所示,zabbix server經過item(可自定義) 從zabbix agent獲取被監控端的各項數據,經過觸發器trigger定義生成事件狀態,知足條件後經過action處理,或發送郵件,或對目標主機遠程執行命令!
二、發送報警信息的前提
a)配置發送信息的信道
管理-->管理媒介類型-->建立媒介類型-->如圖:
zabbix郵件報警及自定義腳本實戰bash

注意:在zabbix server上默認要安裝有postfix服務無須要額外配置便可;以此爲接下來的郵件發送測試服務器!實際當中這裏配置購買的郵箱服務;自行搭建的服務器須要有備案的公網ip和郵箱服務的相關認證!服務器

b)添加收件人
管理 --> 用戶 --> 報警媒介 --> 添加 --> 類型(localmail) --> 收件人"root@localhost" -->添加-->更新
zabbix郵件報警及自定義腳本實戰
zabbix郵件報警及自定義腳本實戰架構

c)監控項item與觸發器trriger
若有item須要有被監控端這裏添加主機node2.san.com(172.16.3.216)如何經過web GUI添加,能主如何安裝agent請參考以前文章;添加好被監控主機並應用監控模板即包含常規的application item以及trriger;app

3、添加item監控項與觸發器

任務以下:
測試當httpd服務故障時第一步嘗試遠程重啓httpd服務,若是不能解決發送郵件給管理員,恢復時發送恢復郵件!
一、添加httpd的監控項
本次針對node2.san.com 上安裝httpd服務,經過httpd服務的監控完成,故障發生與恢復時產生的事件進行發送報警郵件
默認Linux監控模塊沒有自帶監控httpd(apache),因此這裏須要針該主機建立監控httpd tcp 80端口的item監控項;
配置-->主機-->node2.san.com-->監控項-->建立監控項 -->名稱"web server status" -->鍵值"net.tcp.listen[80]" (能夠選擇其餘的方式) 如圖:
zabbix郵件報警及自定義腳本實戰
有了監控項(item)就有了從agent獲取httpd狀態的數據,以及默認的圖形;
監測中-->最新數據-->找到node2.san.com中的 web server status -->圖形 如圖:
zabbix郵件報警及自定義腳本實戰ssh

光有item項及收穫的數據還不行,須要對這些數據進行定義觸發器,當知足條件時發出報警;如定義針對httpd狀態的觸發器,當狀態不是1時(即80端口down異常) 作出action動做,或遠程執行命令,或發出郵件等信息報警通知管理員!tcp

二、添加httpd的觸發器trriger
配置-->主機-->node2.san.com-->觸發器-->建立觸發器-->名稱"web server down" -->嚴重性"嚴重" -->表達式-->添加 -->監控項選擇"選擇web server status" -->功能"最新的T值 = N" -->最後一個T值 "計數" 並填寫1 -->插入 如圖:
zabbix郵件報警及自定義腳本實戰
最終表達式以下: {web service:net.tcp.listen[80].last(#1)}=0
如圖:
zabbix郵件報警及自定義腳本實戰分佈式

有了監控數據項,也有了對應的觸發器,如今只剩下當觸發器被觸發時如何作了,換句話說就是httpd最後一次值是0時(即httpd服務down)如何作?這裏就須要定義action動做了,action分兩種,一種是遠程執行命令,如重啓httpd服務;一種是發郵件等信息通知到管理員!
三、添加action動做
動做:
配置-->動做-->建立動做-->名稱 填寫"Email" -->新的觸發條件 "添加" -->選擇web server down 觸發器 如圖:
zabbix郵件報警及自定義腳本實戰
操做:
配置-->操做-->默認操做步驟持續時間 "60" -->默認接收人 "故障{TRIGGER.STATUS}:{HOSTNAME1}:{TRIGGER.NAME}" -->默認信息
"報警主機:{HOSTNAME1}
報警時間:{EVENT.DATE} {EVENT.TIME}
報警等級:{TRIGGER.SEVERITY}
報警信息:{TRIGGER.NAME}
報警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態: {TRIGGER.STATUS}:{ITEM.VALUE1}

Item values:
Original event ID: {EVENT.ID}"--->添加 如圖:
zabbix郵件報警及自定義腳本實戰

操做-->新的 -->步聚 "1 - 1" 表示動做第一步 -->步聚持續時間 默認60s 可不修改 表示第一步處理時間 -->操做類型"遠程命令" -->目標列表 添加"當前主機" -->類型-->自定義腳本 -->執行在 zabbix agent端 -->命令 "sudo systemctl restart httpd"--> 添加 如圖:
zabbix郵件報警及自定義腳本實戰

注意此處遠程執行命令方式有多種:如ssh/telnet/IPMI/全局腳本/自定義腳本等方式;最爲方便的是經過agent執行
但這裏有兩個前提須要在agent機器上配置/etc/sudoers
修改添加如下兩項:
大約在56行 註釋Defaults requiretty
添加: zabbix ALL=(ALL) NOPASSWD: ALL
別一個前提是修改zabbix_agent.conf文件中的
EnableRemoteCommands=1
重啓zabbix-agent服務

操做-->新的 -->步聚"2-0" 表示第二步 即第一步沒有 處理好 從第二步開始一直執行 -->步聚持續時間 默認60s 可不修改 表示第一步處理時間 -->操做類型"發送消息" -->發送到用戶 "選擇admin" -->僅送到" 建立的localmail 信道" -->添加 -->更新 如圖:
zabbix郵件報警及自定義腳本實戰

恢復操做:
配置-->恢復操做-->默認接收人"恢復{TRIGGER.STATUS}:{HOSTNAME1}: {TRIGGER.NAME} OK!" -->默認信息
"
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
" -->添加
最終action動做以下:
zabbix郵件報警及自定義腳本實戰
對恢復操做添加發送信息
恢復操做-->操做-->添加-->操做類型-->發送消息-->發送到用戶-->選擇 "Admin (Zabbix Administrator)" -->僅送到"localmail" -->添加-->更新 如圖:
zabbix郵件報警及自定義腳本實戰

4、測試

關閉agent 上httpd服務
[root@node2 ~]# systemctl stop httpd
查看zabbix事件信息
監測中-->問題 如圖:
zabbix郵件報警及自定義腳本實戰
能夠發現已經監測到httpd服務宕機了,而且第一步的遠程執行命令成功~!
同時在zabbix server機器上經過命令行輸入mail查看root郵件

[root@zabbix ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 9 messages 9 new
>N  1 zabbix@localhost.san  Fri Mar  2 16:33  22/983   "故障PROBLEM:web service:web server down"
  N  2 zabbix@localhost.san  Fri Mar  2 16:40  21/906   "恢復OK:web service: web server down OK!"
& 
1
Message  1:
From zabbix@localhost.san.com  Fri Mar  2 16:34:24 2018
Return-Path: <zabbix@localhost.san.com>
X-Original-To: root@localhost
Delivered-To: root@localhost.san.com
From: <zabbix@localhost.san.com>
To: <root@localhost.san.com>
Date: Fri, 02 Mar 2018 16:34:24 +0800
Subject: 故障PROBLEM:web service:web server down
Content-Type: text/plain; charset="UTF-8"
Status: R

報警主機:web service
報警時間:2018.03.02 16:32:21
報警等級:High
報警信息:web server down
報警項目:net.tcp.listen[80]
問題詳情:web server status:0
當前狀態: PROBLEM:0

Item values:
Original event ID: 53& 

2
Message 2:
From zabbix@localhost.san.com  Fri Mar  2 16:40:55 2018
Return-Path: <zabbix@localhost.san.com>
X-Original-To: root@localhost
Delivered-To: root@localhost.san.com
From: <zabbix@localhost.san.com>
To: <root@localhost.san.com>
Date: Fri, 02 Mar 2018 16:40:55 +0800
Subject: 恢復OK:web service: web server down OK!
Content-Type: text/plain; charset="UTF-8"
Status: R

告警時間:2018.03.02 16:32:21
告警等級:High
告警信息: web server down
告警項目:net.tcp.listen[80]
問題詳情:web server status:1
當前狀態:OK:1
事件ID:53&

5、添加自定義腳本發送信息

添加媒介
管理-->管理媒介類型-->建立媒介類型-->媒介名稱"sentscript" -->類型"腳本" -->腳本名稱"sentmail.sh" -->添加三個腳本參數"{ALERT.SENDTO} ; {ALERT.SUBJECT} ; {ALERT.MESSAGE}" 分別表示收件人,標題,信息; 如圖:
zabbix郵件報警及自定義腳本實戰

添加收件人
管理 --> 用戶 --> 報警媒介 --> 添加 --> 類型(sentscript) --> 收件人"root@localhost" -->添加-->更新

修改httpd觸發器中的第二步報警信息爲sentscript
在管理--動做-->Email-->操做-->編輯2-0步 -->僅送到 修改成"sentscript" -->更新 如圖:
zabbix郵件報警及自定義腳本實戰

編寫自定義腳本
在zabbix server上默認存放自定義腳本的目錄在

cat /usr/lib/zabbix/alertscripts/sentmail.sh

#!/bin/bash
contact=$1
subject="$2"
content="$3"

echo "${content}" | mail -s $subject $contact

注意這裏的腳本名稱必須和媒介中的腳本名保持一致!
重啓zabbix-server服務

測試:
關閉node2.san.com上的httpd服務查看zabbix 信息

如圖:
zabbix郵件報警及自定義腳本實戰

在zabbix service上命令行輸入mail

[root@zabbix alertscripts]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
......省略.......
>N 15 Zabbix Monitoring Sy  Fri Mar  2 17:17  23/998   "故障PROBLEM:web"
& 15
Message 15:
From zabbix@zabbix.san.com  Fri Mar  2 17:17:17 2018
Return-Path: <zabbix@zabbix.san.com>
X-Original-To: root@localhost
Delivered-To: root@localhost.san.com
Date: Fri, 02 Mar 2018 17:17:17 +0800
To: root@localhost.san.com, down@zabbix.san.com,
    server@zabbix.san.com
Subject: 故障PROBLEM:web
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: application/octet-stream
From: zabbix@zabbix.san.com (Zabbix Monitoring System)
Status: R

[Binary content]

說明咱們算定義發送郵件腳本正常!

總結:

本次經過對zabbix web GUI添加httpd服務的監控項,定義觸發器,添加報警媒介,以及自定義腳本報警媒介;同時對報警作了分級處理;如第一次嘗試遠程命令恢復;再發送郵件到管理的一系列平常實用的報警配置!採用3.2版本而且已經配置成中文,若有錯誤或遺漏之處,歡迎留言指正交流!謝謝!

相關文章
相關標籤/搜索