一、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次得到的值
