1.對系統不間斷實時監控
2.實時反饋系統當前狀態
3.保證服務可靠性安全性
4.保證業務持續穩定運行php
1.如何查看磁盤使用率 df -h
2.監控磁盤的那些指標 block、 inode
3.如何獲取具體的信息 df -h|awk '//(NF-1)}'
4.獲取的數值到達多少報警 80%css
1.Zabbix
2.Lepus(天兔)數據庫監控系統
3.Open-Falcon 小米
4.Prometheus(普羅米修斯, Docker、 K8s)html
1.硬件監控 路由器、交換機、防火牆
2.系統監控 CPU、內存、磁盤、網絡、進程、 TCP
3.服務監控 nginx、 php、 tomcat、 redis、 memcache、 mysql
4.WEB 監控 請求時間、響應時間、加載時間、
5.日誌監控 ELk(收集、存儲、分析、展現) 日誌易
6.安全監控 Firewalld、 WAF(Nginx+lua)、安全寶、牛盾雲、安全狗
7.網絡監控 smokeping 多機房
8.業務監控 活動引入多少流量、產生多少註冊量、帶來多大價值前端
CPU 監控命令: w、 top、 htop、 glancesnode
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st us 用戶態: 跟用戶的操做有關 35% sy 系統態: 跟內核的處理有關 60% id CPU 空閒:
內存監控命令: freepython
[root@m01 ~]# free -h total used free shared buff/cache available Mem: 977M 105M 724M 6.6M 148M 729M Swap: 1.0G 0B 1.0G
磁盤監控命令: df、 iotopmysql
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.80 25.32 33.36 221034 291193 設備名 每秒傳輸次數 每秒讀大小 每秒寫大小 讀的總大小 寫的總大小
網絡監控命令: ifconfig、 route、 glances、 iftop、 nethogs、 netstatlinux
單位換算 Mbps 100Mbps/8 MB 12MB iftop 中間的<= =>這兩個左右箭頭,表示的是流量的方向。 TX:發送流量、 RX:接收流量、 TOTAL:總流量 #查看 TCP11 中狀態 netstat -an|grep ESTABLISHED netstat -rn # 查看路由信息 netstat -lntup
2.隨着時間的推移,用戶不斷的增多,服務隨時可能扛不住會被 oom(out of memory),當系統內存不足的時候,會
觸發 oom
1.當系統內存不足的時候就會大量使用 swap
2.當系統大量使用 swap 的時候,系統會特別卡
注意: 有時可能內存還有剩餘 300Mb-500Mb,但會發現 swap 依然被使用nginx
[root@ZabbixServer ~]# dd if=/dev/zero of=/dev/null bs=800M [root@ZabbixServer ~]# tail -f /var/log/messages Out of memory: Kill process 2227 (dd) score 778 or sacrifice child Killed process 2227 (dd) total-vm:906724kB, anon-rss:798820kB, file-rss:0kB
3.那單機時代,如何使用 shell 腳原本實現服務器的監控
需求: 每隔 1 分鐘監控一次內存,當你的可用內存低於 100m,發郵件報警,要求顯示剩餘內存
1.怎麼獲取內存可用的值 free -m|awk '/^Mem/{print $NF}'
2.獲取到內存可用的值如何和設定的閾值進行比較
3.比較若是大於 100m 則不處理,若是小於 100 則報警
4.如何每隔 1 分鐘執行一次web
[root@ZabbixServer ~]# cat free.sh #!/usr/bin/bash HostName=$(hostname)_$(hostname -i) Date=$(date +%F) while true;do Free=$(free -m|awk '/^Mem/{print $NF}') if [ $Free -le 100 ];then echo "$Date: $HostName Mem Is < ${Free}MB" fi sleep 5 done
1.配置zabbix倉庫
[root@m01 ~]#rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
2.安裝 Zabbix 程序包,以及 MySQL、 Zabbix-agent
[root@m01 ~]# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server [root@m01 ~]# systemctl start mariadb.service && systemctl enable mariadb.service
3.建立 Zabbix 數據庫以及用戶
[root@m01 ~]# mysqladmin password 123456 [root@m01 ~]# mysql -uroot -p123456 MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin; MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; MariaDB [(none)]> flush privileges;
4.導入 Zabbix 數據至數據庫中
[root@m01 ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.11/create.sql.gz | mysql -uzabbix -pzabbix zabbix
5.編輯/etc/zabbix/zabbix_server.conf 文件,修改數據庫配置
[root@m01 ~]# grep "^[a-Z]" /etc/zabbix/zabbix_server.conf ............... DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix ...............
6.啓動 Zabbix 服務進程,並加入開機自啓
[root@m01 ~]# systemctl start zabbix-server.service [root@m01 ~]# systemctl enable zabbix-server.service
7.配置 Apache 的配置文件/etc/httpd/conf.d/zabbix.conf,修改時區
[root@m01 ~]# grep "Shanghai" /etc/httpd/conf.d/zabbix.conf php_value date.timezone Asia/Shanghai
8.重啓 Apache Web 服務器
[root@m01 ~]# systemctl start httpd
提示已成功地安裝了 Zabbix 前端。配置文件/etc/zabbix/web/zabbix.conf.php 被建立。
默認登錄 ZabbixWeb 的用戶名 Admin,密碼 zabbix
#解除問題 systemctl start zabbix-agent
打開圖形以後會發現語言爲亂碼,緣由是缺乏字體
解決方法:安裝字體並替換現有字體
[root@m01 ~]# yum install wqy-microhei-fonts -y [root@m01 ~]# cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf
再次刷新發現已經變成中文了
zabbix-agent(數據採集)—>zabbix-server(數據分析|報警)—> 數據庫(數據存儲)<—zabbix web(數據展現)
[root@web01 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm
[root@web01 ~]# grep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=10.0.1.61 ServerActive=127.0.0.1 Hostname=Zabbix server Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@web01 ~]# systemctl start zabbix-agent.service [root@web01 ~]# systemctl enable zabbix-agent.service [root@web01 ~]# netstat -lntup|grep 10050 tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 10351/zabbix_agentd tcp6 0 0 :::10050 :::* LISTEN 10351/zabbix_agentd
詞彙表
zabbix-server :負責接收agent的數據,分析並存入mysql
zabbix-agent :負責採集客戶端的數據併發送給zabbix-server
zabbix-web : 負責展現,過濾,配置監控項,觸發器,報警媒介
mysql :實際負責存儲數據
監控項 :每個實際的監控內容
自定義監控項 :默認監控模板沒有的監控內容,須要本身自定義的監控
應用集 : 把監控項分類劃分
觸發器 :監控項的報警閾值
報警媒介 :報警的方式 微信 郵件
圖形 :監控項歷史記錄的趨勢圖,多個監控項能夠一塊兒展現
聚合圖形 :多個圖形能夠組合成一個更大的圖形
模板 :
1.項目需求 監控當前有幾個用戶是登陸狀態 若是用同時在線的用戶超過3個就報警 2.任務拆解 shell命令實現: who|wc -l 3.編寫自定義監控項 cat /etc/zabbix/zabbix_agentd.d/who_num.conf UserParameter=who_num,who|wc -l 4.重啓zabbix-agent systemctl restart zabbix-agent 5.zabbix服務端測試可否取到自定義監控項的值 注意!在服務端安裝 rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-get-4.0.11-1.el7.x86_64.rpm zabbix_get -s 10.0.0.7 -k who_num 6.web頁面添加內容
監控TCP11種狀態集
netstat -antp|awk 'NR>1{print $6}'|grep LISTEN|wc -l netstat -antp|awk 'NR>1{print $6}'|grep TIME_WAIT|wc -l netstat -antp|awk 'NR>1{print $6}'|grep ESTABLISHED|wc -l
vim /etc/zabbix/zabbix_agentd.d UserParameter=LISTEN,netstat -ant|awk 'NR>1{print $6}'|grep LISTEN|wc -l UserParameter=TIME_WAIT,netstat -ant|awk 'NR>1{print $6}'|grep TIME_WAIT|wc -l UserParameter=ESTABLISHED,netstat -ant|awk 'NR>1{print $6}'|grep ESTABLISHED|wc -l systemctl restart zabbix-agent
[root@m01 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-get-4.0.11-1.el7.x86_64.rpm # [root@m01 ~]# yum install zabbix-get.x86_64 -y zabbix_get -s 10.0.0.7 -k LISTEN zabbix_get -s 10.0.0.7 -k TIME_WAIT zabbix_get -s 10.0.0.7 -k ESTABLISHED
1.多個監控項合併成一條命令的配置文件 cat >/etc/zabbix/zabbix_agentd.d/TCP.conf<<EOF UserParameter=TCP_[*],netstat -ant|awk 'NR>1{print \$6}'|grep \$1|wc -l EOF 2.重啓客戶端 systemctl restart zabbix_agent 3.服務端測試 zabbix_get -s 10.0.0.7 -k TCP_[LISTEN] zabbix_get -s 10.0.0.7 -k TCP_[TIME_WAIT] 4.web頁面添加 配置-->主機-->監控項-->新加監控項-->名稱:TCP_LISTEN 鍵值:TCP_[LISTEN] 應用集:TCP 其餘的監控項克隆
因爲TCP有多種狀態,須要添加多個監控項,咱們可使用克隆快速達到建立的效果
其餘的狀態依次添加便可
配置>>>動做>>>操做>>>恢復操做
定製報警內容:
https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location
參考博客
https://www.cnblogs.com/bixiaoyu/p/7302541.html
發送警告
報警郵件標題可使用默認信息,亦可以使用以下中文報警內容 名稱:Action-Email 默認標題:故障{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}
恢復警告
恢復標題:恢復{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}
[root@m01 ~]# grep "^AlertScriptsPath" /etc/zabbix/zabbix_server.conf AlertScriptsPath=/usr/lib/zabbix/alertscripts 3.配置微信企業號 AgentId:1000008 Secret: 6h3MVlvmjqN-8rKz4V84OPMB5cp0PPJPlKR0ny9kt6U corpid: wwd26fdfb9940e7efa 4.web頁面配置 {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE} 5.配置微信腳本修改參數 6.web頁面添加
[root@m01 /usr/lib/zabbix/alertscripts]# ll 總用量 4 -rwxr-xr-x 1 root root 1344 8月 7 21:58 weixin.py
https://work.weixin.qq.com/wework_admin/loginpage_wx
1.登錄後在企業號上新建應用
2.上傳logo,填寫應用名稱 ,應用介紹等
3.查看啓動應用
同時會生成應用的AgentId以及Secret,這個在後面步驟會有用
4.接口調用測試
http://work.weixin.qq.com/api/devtools/devtool.php
這裏的corpid爲公司ID
Corpsecret就是剛纔建立應用生成的Secrt,確認沒問題填寫進去而後下一步
若是沒問題會顯示200狀態碼
[root@m01 /usr/lib/zabbix/alertscripts]# cat weixin.py .............. corpid='微信企業號corpid' appsecret='應用的Secret' agentid=應用的id ..............
腳本
#!/usr/bin/env python 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='wwd26fdfb9940e7efa' appsecret='6h3MVlvmjqN-8rKz4V84OPMB5cp0PPJPlKR0ny9kt6U' agentid=1000008 token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret req=requests.get(token_url) accesstoken=req.json()['access_token'] 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)
[root@m01 /usr/lib/zabbix/alertscripts]# python weixin.py 你的帳號 '發信測試' ‘微信測試消息’
雖然咱們實現了發送到單個用戶的功能,可是若是咱們的用戶比較多,這樣仍是麻煩的,不過咱們能夠發送到整個組,其實腳本里已經預留好了配置,只不過默認註釋了。
將腳本修改成如下內容,註釋掉用戶,打開組設置
#!/usr/bin/env python 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='wwd26fdfb9940e7efa' appsecret='Btg89FnZfMu0k7l6b4iagmAR5Z9TCgKknYbx-SMQvmg' agentid=1000005 token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret req=requests.get(token_url) accesstoken=req.json()['access_token'] msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken #touser=sys.argv[1] toparty=sys.argv[1] subject=sys.argv[2] 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:' + toparty + ';;subject:' + subject + ';;message:' + message)
#!/bin/bash num=$(echo $(($RANDOM%28+1))) name=$(sed -n "${num}p" name.txt) ok_boy=$(grep -v "${name}" name.txt) for ok in ${ok_boy} do python weixin.py ${ok} "$1" "$2" done [root@web02 ~]# cat neigui.sh #!/bin/bash num=$(echo $(($RANDOM % 37 + 1))) neigui=$(sed -n "${num}p" name.txt) pc=$(sed "${num}d" name.txt > pc.txt) for i in $(cat pc.txt) do python weixin.py ${i} '有內鬼,終止交易!' "內鬼是: ${neigui}" done echo "內鬼是:${neigui}"
編寫zabbix配置文件
[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'
[root@web01 ~]# systemctl restart zabbix-agent.service
使用zabbix-get命令測試
[root@m01 ~]# yum install zabbix-get.x86_64 -y [root@m01 ~]# zabbix_get -s 10.0.1.7 -k ESTABLISHED 2 [root@m01 ~]# zabbix_get -s 10.0.1.7 -k LISTEN 12
1.端口是否正常
2.stub_ status 7種狀態
[root@web01 ~]# cat /etc/nginx/conf.d/status.conf server { listen 80; server_name localhost; location /nginx_status { stub_status on; access_log off; } } [root@web01 ~]# curl -s 127.0.0.1/nginx_status/ #-s去除多餘的行數 Active connections: 1 server accepts handled requests 6 6 6 Reading: 0 Writing: 1 Waiting: 0
1.安裝nginx 2.開啓stub_ status 3.獲取每一個狀態的指標 Active curl -s 127.0.0.1/nginx_ status |awk ' /^Active/ {print $NF}' accepts curl -s 127.0.0.1/nginx_ status|awk 'NR==3 {print $1}' handled curl -s 127.0.0.1/nginx_ status |awk ' NR==3 {print $2}' request curl -s 127.0.0.1/nginx_ status |awk ' NR==3 {print $3}' 4.將獲取到的狀態作成監控項 [ root@web01 zabbix_ _agentd.d]# cat nginx. conf UserParameter=nginx.active,curl -s 127.0.0.1/nginx_ status |awk '/^Active/ {print $NF}' UserParameter=nginx.accepts,curl -s 127.0.0.1/nginx_ status |awk 'NR==3 {print $1}' UserParameter=nginx.handled,curl -s 127.0.0.1/nginx_status |awk 'NR==3{print $2}' UserParameter=nginx.request,curl -s 127.0.0.1/nginx_ status| awk 'NR==3{print $3}' 5.重啓 systemctl restart zabbix-agent 6.在web界而建立模板->建立監控項(8次)-->建立觸發器(端口是否正常)
[root@web01 /etc/zabbix/zabbix_agentd.d]# cat nginx_monitor.sh #!/bin/bash NGINX_COMMAND=$1 CACHEFILE="/tmp/nginx_status.txt" CMD="/usr/bin/curl http://127.0.0.1/nginx_status/" if [ ! -f $CACHEFILE ];then $CMD >$CACHEFILE 2>/dev/null fi # Check and run the script TIMEFLM=`stat -c %Y $CACHEFILE` TIMENOW=`date +%s` if [ `expr $TIMENOW - $TIMEFLM` -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 $1}' exit 0; } nginx_handled(){ awk NR==3 $CACHEFILE| awk '{print $2}' exit 0; } nginx_requests(){ awk NR==3 $CACHEFILE| awk '{print $3}' exit 0; } 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 credentials'; exit 2; esac
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.conf UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_monitor.sh $1 [root@web01 ~]# systemctl restart zabbix-agent.service
[root@m01 ~]# zabbix_get -s 10.0.1.7 -k nginx_status[accepts] 7
[root@web01 ~]# tail -1 /etc/php-fpm.d/www.conf pm.status_path = /php_status [root@web01 ~]# cat /etc/nginx/conf.d/status.conf server { listen 80; server_name localhost; location /nginx_status { stub_status on; access_log off; } location /php_status { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME html$fastcgi_script_name; include fastcgi_params; } } [root@web01 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@web01 ~]# systemctl restart nginx.service php-fpm.service
[root@web01 ~]# curl 127.0.0.1/php_status pool: www process manager: dynamic start time: 08/Aug/2019:22:31:27 +0800 start since: 37 accepted conn: 1 listen queue: 0 max listen queue: 0 listen queue len: 128 idle processes: 4 active processes: 1 total processes: 5 max active processes: 1 max children reached: 0 slow requests: 0
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/fpm.sh #!/bin/bash ################################## # Zabbix monitoring script # # php-fpm: # - anything available via FPM status page # ################################## # Contact: # vincent.viallet@gmail.com ################################## # ChangeLog: # 20100922 VV initial creation ################################## # Zabbix requested parameter ZBX_REQ_DATA="$1" ZBX_REQ_DATA_URL="$2" # Nginx defaults NGINX_STATUS_DEFAULT_URL="http://localhost/fpm/status" WGET_BIN="/usr/bin/wget" # # Error handling: # - need to be displayable in Zabbix (avoid NOT_SUPPORTED) # - items need to be of type "float" (allow negative + float) # ERROR_NO_ACCESS_FILE="-0.91" ERROR_NO_ACCESS="-0.92" ERROR_WRONG_PARAM="-0.93" ERROR_DATA="-0.94" # either can not connect / bad host / bad port # Handle host and port if non-default if [ ! -z "$ZBX_REQ_DATA_URL" ]; then URL="$ZBX_REQ_DATA_URL" else URL="$NGINX_STATUS_DEFAULT_URL" fi # save the nginx stats in a variable for future parsing NGINX_STATS=$($WGET_BIN -q $URL -O - 2>/dev/null) # error during retrieve if [ $? -ne 0 -o -z "$NGINX_STATS" ]; then echo $ERROR_DATA exit 1 fi # # Extract data from nginx stats # #RESULT=$(echo "$NGINX_STATS" | awk 'print $0;match($0, "^'"$ZBX_REQ_DATA"':[[:space:]]+(.*)", a) { print a[1] }') #RESULT=$(echo "$NGINX_STATS" | grep "$ZBX_REQ_DATA" | awk -F : '{print $2}') RESULT=$(echo "$NGINX_STATS" | awk -F : "{if(\$1==\"$ZBX_REQ_DATA\") print \$2}") if [ $? -ne 0 -o -z "$RESULT" ]; then echo $ERROR_WRONG_PARAM exit 1 fi echo $RESULT exit 0 [root@web01 ~]# bash /etc/zabbix/zabbix_agentd.d/fpm.sh "total processes" http://127.0.0.1/php_status 5
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/fpm.conf UserParameter=php-fpm[*],/etc/zabbix/zabbix_agentd.d/fpm.sh "$1" "$2" [root@web01 ~]# systemctl restart zabbix-agent.service
[root@m01 ~]# zabbix_get -s 10.0.1.7 -k php-fpm["total processes",http://127.0.0.1/php_status] 5
導入以後須要修改一下模版裏的宏配置
需求,監控頁面狀態碼
故障現象:
提示zabbix-server is not running
報錯日誌:
34983:20190807:202215.171 database is down: reconnecting in 10 seconds 34983:20190807:202225.172 [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost' (using password: NO)
故障緣由:
zabbix-server的配置文件裏配有配置數據庫密碼
故障解決:
添加正確的數據庫帳號密碼信息
[root@m01 ~]# grep "^DB" /etc/zabbix/zabbix_server.conf DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix
故障現象:微信報警失敗
報錯日誌:
[root@m01 ~]# tail -f /var/log/zabbix/zabbix_server.log Problem name: TIME_WAIT過多 Host: web01 Severity: Average Original problem ID: 51 '": Traceback (most recent call last): File "/usr/lib/zabbix/alertscripts/weixin.py", line 7, in <module> import requests ImportError: No module named requests
問題緣由:
缺乏模塊 requests
問題解決:
安裝缺失的依賴包
[root@m01 ~]# yum install python-pip [root@m01 ~]# pip install --upgrade pip [root@m01 ~]# pip install requests
故障現象:
在server端使用zabbix_get命令測試鍵值命令時提示警告
[root@m01 ~]# zabbix_get -s 10.0.1.7 -k ESTABLISHED (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) 2
問題緣由:
zabbix_agent是以普通用戶zabbix運行的,而普通用戶執行netstat -antp時會有警告,網上查找發現只要不是用p參數就能夠以普通用戶運行
解決方案:
監控腳本里的命令修改成netstat -ant
1.zabbix組件
2.安裝zabbix-server