1.監控nginx連結數狀態status
# 1.開啟status頁面功能
cat > /etc/nginx/conf.d/status.conf <<'EOF'
server{
listen 80;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
}
}
EOF
# 2.訪問測試
[root@web-7 ~]#nginx -t
[root@web-7 ~]#systemctl restart nginx
[root@web-7 ~]#
[root@web-7 ~]#curl 10.0.0.7/nginx_status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
2.開發nginx監控狀態指令碼
# 自定義監控內容,也就是自定義key的操作
# 指令碼核心思路就是,提取status頁面的數值,交給zabbix
# 1.開發監控nginx指令碼
#!/bin/bash
# Author: www.yuchaoit.cn
# 接受指令碼的第一個引數
# 由於nginx的status狀態太多,寫為一個接受引數的key
# status_nginx[*]
NGINX_COMMAND=$1
CACHEFILE="/tmp/nginx_status.log"
CMD="/usr/bin/curl http://127.0.0.1/nginx_status"
# 判斷是否有status日誌檔案
if [ ! -f $CACHEFILE ];then
$CMD >$CACHEFILE 2>/dev/null
fi
# 檢查status日誌有效期,限定狀態檔案在60秒內
# 記錄最後一次status日誌的生成時間(秒)
STATUS_TIME=$(stat -c %Y $CACHEFILE)
# 以unix時間計算,seconds since 1970-01-01 00:00:00 UTC
# 當前系統時間減去日誌時間,推算,是否超過60秒,超過就立即重新生成
TIMENOW=$(date +%s)
if [ $[ $TIMENOW - $STATUS_TIME ] -gt 60 ];then
rm -f $CACHEFILE
fi
if [ ! -f $CACHEFILE ];then
$CMD > $CACHEFILE 2>/dev/null
fi
nginx_active(){
grep 'Active' $CACHEFILE |awk '{print $NF}'
exit 0;
}
nginx_reading(){
grep 'Reading' $CACHEFILE |awk '{print $2}'
exit 0;
}
nginx_writing(){
grep 'Writing' $CACHEFILE |awk '{print $4}'
exit 0;
}
nginx_waiting(){
grep 'Waiting' $CACHEFILE |awk '{print $6}'
exit 0;
}
nginx_accepts(){
awk NR==3 $CACHEFILE|awk '{print $2}'
exit 0;
}
nginx_handled(){
awk NR==3 $CACHEFILE|awk '{print $2}'
exit 0;
}
nginx_requests(){
awk NR==3 $CACHEFILE|awk '{print $3}'
exit 0;
}
# 對指令碼傳入引數判斷,需要獲取什麼值
# 如下引數,都是nginx的連結狀態,
case $NGINX_COMMAND in
active)
nginx_active ;;
reading)
nginx_reading;;
writing)
nginx_writing;;
waiting)
nginx_waiting;;
accepts)
nginx_accepts;;
handled)
nginx_handled;;
requests)
nginx_requests;;
*)
echo "Invalid arguments"
exit 2
;;
esac
3建立agent的自定義key配置檔案
[root@web-7 /etc/zabbix/zabbix_agentd.d]#cat nginx_status.conf
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_status.sh $1
# 授權
[root@web-7 /etc/zabbix/zabbix_agentd.d]#chmod +x nginx_status.sh
[root@web-7 /etc/zabbix/zabbix_agentd.d]#chown -R zabbix.zabbix ./*
[root@web-7 /etc/zabbix/zabbix_agentd.d]#ll
total 16
-rw-r--r-- 1 zabbix zabbix 87 Jul 4 13:40 nginx_status.conf
-rwxr-xr-x 1 zabbix zabbix 1697 Jul 4 13:40 nginx_status.sh
務必要重啟
[root@web-7 /etc/zabbix/zabbix_agentd.d]#systemctl restart zabbix-agent.service
4手動測試,自定義key+指令碼,是否採集nginx的各種狀態
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[active]
3
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[reading]
0
5建立nginx_status的模板,便於給web組所有機器用
和你的web7機器關聯讓它用
看看圖形,拿到資料了嗎,最新資料
web7機器nginx,七個連結狀態的資料的圖形建立
觸發器,當nginx的requests請求數,超過50000萬,就報警,釘釘報警
ab壓測,看釘釘是否報警就完事。服務端壓測
ab -c 100 -n 50000 http://10.0.0.7/