Zabbix自定義監控項 & 企業微信報警


一、zabbix自定義監控

zabbix-agent 獲取數據,然后定義,交給zabbix-server端

1.指定監控的內容

#監控服務器登錄用戶的數量
[root@web01 ~]# w | awk 'NR==1 {print $(NF-6)}'
1

2.客戶端配置監控項

1)客戶端配置文件

[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf

2)定義監控項語法

#語法:
Format: 
UserParameter=<key>,<shell command>

#官方示例
[root@web01 ~]# tail -n 2 /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V

3)設置自定義監控項

[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/login_user.conf
UserParameter=login_usernumber,w | awk 'NR==1 {print $(NF-6)}'

4)重啟客戶端

[root@web01 ~]# systemctl restart zabbix-agent.service

3.客戶端驗證

[root@web01 ~]# zabbix_agentd -t login_usernumber		# 針對客戶端文件中的key來驗證
login_usernumber                              [t|4]

[root@web01 ~]# zabbix_agentd -p | grep login_usernumber
login_usernumber                              [t|4]

#得到的結果,前面的字母含義
d   	#帶小數部分的數字
m   	#不支持,只有在這種模式下,查詢日志才可能是活動的(如日志監視項或需要多個收集值的項)引起的。權限問題或不正確的用戶參數可能
s   	#文本。最大長度不受限制。
t   	#文本。最大長度不受限制。
u   	#無符號整數

4.服務端獲取值

[root@zabbix ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-get-4.0.1-1.el7.x86_64.rpm

#zabbix_get語法
zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] -k item-key

-s		#主機名或者IP地址
-p		#端口
-I		#IP地址
-k		#監控項的key名稱

# 在服務端檢測客戶端的key結果
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -p 10050 -k login_usernumber
4

5.web頁面添加監控項

  • 針對主機配置監控項

  • 點擊創建監控項

  • 這里的鍵值一定要寫為自定義監控文件中的key(也就是agent文件中的key名)

二、zabbix自定義閾值(觸發器)

  • 根據監控項配置觸發器

  • 點擊創建觸發器

  • 選擇添加表達式,和監控項進行綁定

  • 選擇之前創建的監控

  • 繼續選擇功能,這里實驗針對登錄用戶數量,針對登錄用戶超過4個進行觸發

  • 也可以選擇點擊表達式構造器進行測試

  • 點擊測試

  • 設置值為6,也就超過了之前設置的閾值4,超過為觸發成功,也就為true

  • 最終觸發器界面,最后點擊添加

  • 到此為止,已經在服務端進行對客戶端的自定義監控,並且已經進行了觸發器配置,但觸發結果僅在web頁面顯示,並未配置郵件或微信等媒介報警

三、自定義告警

1.郵件方式

#### 這里為大概的流程,距離操作參考下方圖片

1.配置---動作---啟用里面的動作

2.點擊動作---操作
·自定義報警內容參考博客:https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location
#默認標題:
故障{TRIGGER.STATUS},服務器:{HOSTNAME1}發生: {TRIGGER.NAME}故障!
#消息內容:
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

3.點擊動作---恢復操作
#默認標題:
恢復{TRIGGER.STATUS}, 服務器:{HOSTNAME1}: {TRIGGER.NAME}已恢復!
#消息內容:
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

4.更新

5.管理---報警媒介類型---mail
	smtp.qq.com
	465
	qq.com
	1240206455@qq.com
	SSL/TLS
	勾選
	用戶名和密碼
	1240206455@qq.com
	QQ郵箱授權碼
	
6.更新

7.配置收件人
	頭像---報警媒介---添加
	填寫收件人
	根據職位設置接收告警的級別

1) 配置郵件告警之前,需要將此動作開啟並且對此進行動作配置

2)設置動作,當觸發動作時的操作(也就是報警信息),這里的標題和消息內容為此文章上方書寫文件,當然也可以自行百度,網上大把的模板參考。然后點擊新的,設置發送人員

3)設置報警收到報警人員,然后點擊添加

4)當警告解除時,同樣發送郵件,這里為配置警告解除,發送郵件模板(同樣這里的標題,和消息內容可從上文中復制,或直接從網上拷貝)

5)這里的更新操作默認不需要修改,直接點擊更新即可

6)選擇報警媒介類型,並且進行創建

7)這里的密碼需要在qq郵箱的POP3/SMTP中進行獲取,然后點擊更新即可

8)選擇報警媒介,也就是當達到觸發值后的告警信息,通過郵件進行告警

2.微信方式

1)注冊企業微信

2)配置腳本

#1.查看腳本存放位置
[root@zabbix ~]# grep 'script' /etc/zabbix/zabbix_server.conf 
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts

#2.上傳腳本
[root@zabbix ~]# cd /usr/lib/zabbix/alertscripts
[root@zabbix alertscripts]# ll
total 4
-rw-r--r-- 1 root root 1231 Sep  9 16:41 weixin.py

[root@zabbix-server ~]# cat /usr/lib/zabbix/alertscripts/weixin.sh 
#!/bin/bash
CropID='wwe81f9f79dde15536'            #企業ID
Secret='u_SJG43-SAgG3fQKFeY23lVVGzmBMAltfInpUP_AuwU'    #企業號中的應用Secret
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" 
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}')

PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"

function body() {
local int AppID=1000002                  #企業號中的應用id
local UserID=$1                          #部門成員id,zabbix中定義的微信接收者
local PartyID=2                          #部門id,定義了范圍,組內成員都可接收到消息
local Msg=$(echo "$@" | cut -d" " -f3-)  #過濾出zabbix中傳遞的第三個參數
printf '{\n'
printf '\t"touser": "'"$User"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'" $AppID "\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
                                                                                                            }
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL

#3.授權
[root@zabbix alertscripts]# chmod +x weixin.py

#4.修改腳本
[root@zabbix alertscripts]# vim weixin.py
#企業ID
corpid='ww69b7626c5e711bdf'
#應用的secret
appsecret='TchtAn_azm8DGT5gpVgPNffzOn8BeuVhT1jHQlbRHzs'
#應用的agentid
agentid=1000002

#5.測試腳本
yum -y install epel-release
yum install python-pip
pip install requests
pip install --upgrade requests
[root@zabbix alertscripts]# ./weixin.py LinHaoDa 2 hello

3)添加報警媒介

{ALERT.SENDTO}                    #發送的⽤戶
{ALERT.SUBJECT}                    #發送的主題
{ALERT.MESSAGE}                    #發送的內容
  • web參考流程

    1)配置發件人

2)配置收件人

3)登錄企業微信公眾號添加賬戶,登錄后在企業號上新建應用

4)上傳logo,填寫應用名稱,應用介紹等

5)查看啟動應用(同時會生成應用的Agent以及Secret,這個后面步驟會有用)

6)調用接口測試

注意:這里的corpid為公司的ID

Corpecret就是剛才應用生成的Secrt,確認沒有問題填寫進去然后進行下一步

如果沒有問題會顯示200狀態碼

7)成員添加

8)公眾號關注

9 )查看自己的賬戶

10)修改腳本里的信息

11)發信息進行測試

12)微信號上查看

四、zabbix深入自定義監控項

1.自定義監控項-ssh端口

2.自定義監控項-TCP11種狀態

1)了解11種狀態

LISTEN - 偵聽來自遠方TCP端口的連接請求;
SYN_SENT -在發送連接請求后等待匹配的連接請求;
SYN_RECEIVED - 在收到和發送一個連接請求后等待對連接請求的確認;
ESTABLISHED- 代表一個打開的連接,數據可以傳送給用戶;
FIN_WAIT_1 - 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認;
FIN_WAIT_2 - 從遠程TCP等待連接中斷請求;
CLOSE_WAIT - 等待從本地用戶發來的連接中斷請求;
CLOSING -等待遠程TCP對連接中斷的確認;
LAST_ACK - 等待原來發向遠程TCP的連接中斷請求的確認;
TIME_WAIT -等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;
CLOSED - 沒有任何連接狀態;

客戶端獨有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。

服務端獨有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。

共有的:(1)CLOSED (2)ESTABLISHED 。

2)配置監控項

注意:以下兩種方式都是對TCP的11種狀態進行監控,只是使用的方法一的*為匹配所有,$1可以理解成sed的后項引用前項,所以這里定義了一個*號比方式二更為簡單。
######################### 方式一:##########################################
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_state.conf
UserParameter=tcp_state[*],netstat -ant | grep -c $1

######################### 方式二:##########################################
[root@web01 /etc/zabbix/zabbix_agentd.d]# cat zbx_tcp.conf
UserParameter=ESTABLISHED,netstat -ant|grep  -c 'ESTABLISHED'
UserParameter=SYN_SENT,netstat -ant|grep  -c 'SYN_SENT'
UserParameter=SYN_RECV,netstat -ant|grep  -c 'SYN_RECV'
UserParameter=FIN_WAIT1,netstat -ant|grep  -c 'FIN_WAIT1'
UserParameter=FIN_WAIT2,netstat -ant|grep  -c 'FIN_WAIT2'
UserParameter=TIME_WAIT,netstat -ant|grep  -c 'TIME_WAIT'
UserParameter=CLOSE,netstat -ant|grep  -c 'CLOSE'
UserParameter=CLOSE_WAIT,netstat -ant|grep  -c 'CLOSE_WAIT'
UserParameter=LAST_ACK,netstat -ant|grep  -c 'LAST_ACK'
UserParameter=LISTEN,netstat -ant|grep  -c 'LISTEN'
UserParameter=CLOSING,netstat -ant|grep  -c 'CLOSING

# 重啟zabbix-agent
[root@web01 ~]# systemctl restart zabbix-agent.service

3)驗證

# zabbix-agent檢測自定義監控是否正常
[root@web01 ~]# zabbix_agentd -t tcp_state[TIME_WAIT]
tcp_state[TIME_WAIT]                          [t|47]
[root@web01 ~]# netstat -ant | grep -c TIME_WAIT
47

# zabbix-server檢測服務端配置是否正常
[root@zabbix alertscripts]# yum install zabbix-get.x86_64 -y
[root@zabbix alertscripts]# zabbix_get -s 10.0.1.7 -k tcp_state[TIME_WAIT]

4)web配置

1.繼續針對主機創建監控項

2.創建

3.這里僅針對time_wite進行演示,注意:這里的鍵值也必須是,對應文件中的key名稱

4.查看數據

5.同樣和其他流程一樣,配置觸發器

6.驗證,查收到報警

五、自定義監控項(合並監控項)

1.配置內存自定義監控項

#監控內存命令
[root@web01 ~]# free -m|awk '/^Mem/{print $NF/$2}'
0.664609
[root@web01 ~]# free -m|awk '/^Mem/{print $NF/$2*100}'
66.358

#定義監控項
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/mem_free.conf
UserParameter=mem_pfree,free -m|awk '/^Mem/{print $NF/$2*100}'

2.測試監控項

#客戶端測試
[root@web01 ~]# zabbix_agentd -t mem_pfree
mem_free                                      [t|66.2551]
[root@web01 ~]# systemctl restart zabbix-agent.service

#服務端測試
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -k mem_pfree
66.358

3.配置監控項

4.配置觸發器

5.測試告警

[root@web01 ~]# dd if=/dev/zero of=/dev/null bs=2000M count=1000

2.配置swap空間自定義監控項

#獲取值
[root@web01 ~]# free -m|awk '/^Swap/{print $3/$2*100}'
15.0538

#自定義監控項
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/swap_used.conf
UserParameter=swap_pused,free -m|awk '/^Swap/{print $3/$2*100}'

7.測試監控項

#客戶端
[root@web01 ~]# systemctl restart zabbix-agent.service 
[root@web01 ~]# zabbix_agentd -t swap_pused
swap_used                                     [t|14.6628]

#服務端
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -k swap_pused
14.6628

8.配置監控項

9.配置觸發器

10.觸發器常用表達式

and             #並且
or              #或者

last()          #比對最新的值
avg()           #平均值
diff()          #比對上一次文件的內容
nodata()        #收不不到數據進行報警nodata(5m)
(5m)            #表示最近5分鍾得到值
(#5)            #表示最近5次得到的值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM