1.數(shù)據(jù)計算
2.自定義監(jiān)控TCP 11種狀態(tài)?
3.觸發(fā)器
4.自定義報警
5.自定義模板(nginx狀態(tài)
1.數(shù)據(jù)計算
1.歷史保留如何計算? ( 數(shù)據(jù) )
days(items/refresh rate)243600bytes
items:監(jiān)控項數(shù)量。
days:保留歷史數(shù)據(jù)的天數(shù)欧穴。
refresh rate:監(jiān)控項的更新間隔锥惋。
bytes:保留單個值所需要占用的字節(jié)數(shù)忌穿,依賴于數(shù)據(jù)庫引擎,通常為 ~90 字節(jié)笋额。
90(200/60)24*3600 ~ 24MB * 200主機 = 5G
2.趨勢保留如何計算? ( 圖形 )
days(items/3600)243600bytes
items:監(jiān)控項數(shù)量增拥。
days:保留歷史數(shù)據(jù)的天數(shù)。
bytes:保留單個趨勢數(shù)據(jù)所需要占用的字節(jié)數(shù)掘鄙,依賴于數(shù)據(jù)庫引擎,通常為 ~90 字節(jié)嗡髓。
365(200/3600)24*3600 ~ 2MB * 200主機 = 500MB
3.事件如何計算?
daysevents243600bytes
events:每秒產(chǎn)生的事件數(shù)量操漠。假設最糟糕的情況下,每秒產(chǎn)生 1 個事件饿这。
days:保留歷史數(shù)據(jù)的天數(shù)浊伙。
bytes:保留單個趨勢數(shù)據(jù)所需的字節(jié)數(shù)撞秋,取決于數(shù)據(jù)庫引擎,通常為 ~170 字節(jié)嚣鄙。
365124*3600 ~ 30MB *200主機 = 6G
https://www.zabbix.com/documentation/4.0/zh/manual/installation/requirements
2.自定義監(jiān)控TCP 11種狀態(tài)?
netstat -an | grep -c ESTABLISHED
netstat -an | grep -c LISTEN
netstat -an | grep -c SYN_SENT
netstat -an | grep -c TIME_WAIT
1.使用shell命令提取狀態(tài)
2.通過zabbix-agent將提取的狀態(tài)封裝為一個又一個的監(jiān)控項目
3.檢查封裝后的監(jiān)控項是否取值正確
4.創(chuàng)建一個模板
5.基于模板創(chuàng)建監(jiān)控項
6.將主機關聯(lián)該模板,完成監(jiān)控
7.檢查監(jiān)控后的數(shù)據(jù)
UserParameter=tcp[*], netstat -lntp | grep -c "$1"
如何讓其他機器也能使用該模板?
1.推送*.conf文件,這樣其他主機也能提取到key對應的值
2.將主機關聯(lián)對應的模板
3.觸發(fā)器
1.自定義觸發(fā)器
https://www.cnblogs.com/kingle-study/p/10172413.html
①.監(jiān)控內(nèi)存的百分比, 如果 低于20% 則觸發(fā)報警
1.通過shell命令提取內(nèi)存的百分比
2.設定觸發(fā)器
②.多條件觸發(fā)器
1.監(jiān)控內(nèi)存, 以及swap 當內(nèi)存低于百分之20,并且swap使用率超過百分之1% 則觸發(fā)報警
內(nèi)存取的是剩余 20
swap取的是已使用 1
變量
監(jiān)控項
key | 鍵值
2.觸發(fā)器功能
and #并且 多個監(jiān)控項,同時成立
or #或者 多個監(jiān)控項,一個成立
last() #比對最新的值
avg() #平均值 網(wǎng)絡的流量 avg(5m) 進程 負載 IO
diff() #比對上一次文件的內(nèi)容
nodata() #收不到數(shù)據(jù)進行報警nodata(5m) 探測主機存活
test.nodata(5m) = 1 這個條件為真 獲取不到數(shù)據(jù)報警
(5m) #表示最近5分鐘得到值
(#5) #表示最近5次得到的值
3.自定義圖形
1.基于監(jiān)控項, 創(chuàng)建圖形, 可以在模板上創(chuàng)建,這個所有的主機都應用成功
2.基于圖形創(chuàng)建, 聚合圖形, 將多個小圖片整合至一個大圖片上 ( 檢測中--->聚合圖形 )
3.基于聚合圖形創(chuàng)建幻燈片, 可以讓多張聚合圖形進行輪播 (大屏顯示器 --> )
擴展: 如果希望出更好看,更炫的圖,需要使用grafana
注意: grafana只是一個出圖,所有的數(shù)據(jù)都是zabbix提供 ( 皮膚 )
1.安裝grafana
# yum localinstall grafana-6.4.4-1.x86_64.rpm
2.啟動grafana 默認監(jiān)聽在3000端口
# systemctl start grafana-server
3.安裝插件, 集成zabbix
# grafana-cli plugins install alexanderzobnin-zabbix-app
# systemctl restart grafana-server
4.啟用已安裝好的zabbix插件,這樣就完成了集成
5.配置zabbix數(shù)據(jù)源
6.grafana 變量 ()
1.實現(xiàn)一個單條件觸發(fā)器
2.實現(xiàn)一個多條件觸發(fā)器
3.基于監(jiān)控項
1.圖形
2.聚合圖形
3.幻燈片
4.grafana安裝
4.自定義報警
基于監(jiān)控項-->觸發(fā)器-->執(zhí)行動作--> ( 通知 | 執(zhí)行命令
1.怎么發(fā)
2.發(fā)什么
3.發(fā)給誰
1.啟用動作
2.動作中將所有的報警消息通過介質(zhì)發(fā)送給administrator用戶
3.配置介質(zhì)--> 新建一個發(fā)郵件的郵箱介質(zhì)
4.配置administrator用戶, 填寫收件人郵件
https://www.zabbix.com/documentation/3.4/zh/manual/appendix/macros/supported_by_location
1.修改觸發(fā)器動作
1.修改報警的消息
報警主機:{HOST.NAME1}
報警服務: {ITEM.NAME1}
報警Key1: {ITEM.KEY1}:{ITEM.VALUE1}
報警Key2: {ITEM.KEY2}:{ITEM.VALUE2}
嚴重級別: {TRIGGER.SEVERITY}
2.配置故障恢復消息吻贿,消息內(nèi)容如下:
恢復主機:{HOST.NAME1}
恢復服務: {ITEM.NAME1}
恢復Key1:{ITEM.KEY1}:{ITEM.VALUE1}
恢復Key2: {ITEM.KEY2}:{ITEM.VALUE2}
{ALERT.SENDTO} #發(fā)送的用戶
{ALERT.SUBJECT} #發(fā)送的主題
{ALERT.MESSAGE} #發(fā)送的內(nèi)容
2.報警方式
郵件報警
微信報警
釘釘報警
-
郵件報警:
image.png
image.png 微信報警
企業(yè)微信地址,個人可注冊
https://work.weixin.qq.com/
登錄企業(yè)微信
1. 企業(yè) -> 微工作臺里可以直接微信關注哑子,無需要下載企業(yè)微信
2. 通訊錄里的賬號在發(fā)微信腳本中要用到
3. 應用與小程序可創(chuàng)建應用
發(fā)微信的python腳本/usr/local/zabbix/alertscripts/weixin.py
[root@zabbix-server alertscripts]# cat weixin.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: bgx
#date: 2018
#comment: zabbix接入微信報警腳本
import requests
import sys
import os
import json
import logging
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
datefmt = '%a, %d %b %Y %H:%M:%S',
filename = os.path.join('/tmp','weixin.log'),
filemode = 'a')
corpid='xxx'
appsecret='xxx'
agentid=xxx
#獲取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#發(fā)送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
"touser": touser,
# "toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
測試腳本
/usr/local/zabbix/alertscripts/weixin.py 'xuliangwei' 'weixin_subject' 'weixin_message'
- 釘釘報警
釘釘企業(yè)的地址
https://oa.dingtalk.com/
釘釘企業(yè)告警的注意事項
1.通訊錄管理里的userid發(fā)釘釘需要用到
2.工作臺里可自建應用
3.微應用管理可以管理應用
4.開發(fā)賬號管理可以查看密碼信息
發(fā)送釘釘告警的腳本/usr/local/zabbix/alertscripts/zabbix_dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
#curl 'https://oapi.dingtalk.com/gettoken?corpid=xxx&corpsecret=xxx'
import json,urllib2,sys
appkey = 'xxx'
appsecret = 'xxx'
agentid = 'xxx'
touser = sys.argv[1]
content = sys.argv[2]
tockenurl = 'https://oapi.dingtalk.com/gettoken?corpid=' + appkey + "&corpsecret=" + appsecret
tockenresponse = urllib2.urlopen(tockenurl)
tockenresult = json.loads(tockenresponse.read().decode('utf-8'))
tocken = tockenresult['access_token']
sendurl = 'https://oapi.dingtalk.com/message/send?access_token=' + tocken
headers = {
'Content-Type':'application/json'
}
main_content = {
"touser": touser,
"toparty": "",
"agentid": agentid,
"msgtype": "text",
"text": {
"content": content
}
}
main_content = json.dumps(main_content)
req = urllib2.Request(sendurl,headers=headers)
response = urllib2.urlopen(req, main_content.encode('utf8'))
print(response.read().decode('utf-8'))
手動發(fā)釘釘告警測試
chmod +x /usr/local/zabbix/alertscripts/zabbix_dingding.py
/usr/local/zabbix/alertscripts/dingding.py 194668593697491 'dingding_messages'
{ALERT.SENDTO} #發(fā)送的用戶
{ALERT.SUBJECT} #發(fā)送的主題
{ALERT.MESSAGE} #發(fā)送的內(nèi)容
3.告警升級 | 告警抑制
1.遠程執(zhí)行命令
2.告警抑制是怎么回事
告警抑制:
1個故障 出現(xiàn) 發(fā)郵件給運維 郵件
超過1分鐘沒有被處理 發(fā)郵件給經(jīng)理 微信
超過2分鐘沒有被處理 發(fā)郵件給總監(jiān) 釘釘
5.自定義模板(nginx狀態(tài))
開啟nginx狀態(tài)
location /nginx_status {
stub_status;
access_log off;
allow 127.0.0.1;
deny all;
}
編寫取值腳本
[root@web1 zabbix_agentd.d]# cat /etc/zabbix/zabbix_agentd.d/scripts/nginx.sh Nginx_status_file=/tmp/nginx_status.tmp
Nginx_status_name=status.oldxu.com
Nginx_status_path=/nginx_status
curl -sH host:${Nginx_status_name} http://127.0.0.1:80/${Nginx_status_path} > ${Nginx_status_file}
case $1 in
active)
echo $[ $(awk 'NR==1 {print $NF}' ${Nginx_status_file}) -1 ]
;;
accepts)
echo $[ $(awk 'NR==3 {print $1}' ${Nginx_status_file}) - 1 ]
;;
handled)
echo $[ $(awk 'NR==3 {print $2}' ${Nginx_status_file}) - 1 ]
;;
requests)
echo $[ $(awk 'NR==3 {print $3}' ${Nginx_status_file}) - 1 ]
;;
reading)
awk 'NR==4 {print $2}' ${Nginx_status_file}
;;
writing)
awk 'NR==4 {print $4}' ${Nginx_status_file}
;;
waiting)
awk 'NR==4 {print $NF}' ${Nginx_status_file}
;;
*)
echo "USAGE: $0 [active|accepts|handled|requests|reading|writing|waiting]"
;;
esac
添加自定義監(jiān)控項
UserParameter=nginx[*],/bin/bash /etc/zabbix/zabbix_agentd.d/scripts/nginx.sh "$1"
web界面添加模板