Zabbix 監控平台搭建 —服務監控
前言
在Zabbix 監控平台搭建一文中,已經将Zabbix的基礎理論知識以及基礎搭建過程大緻展示了一遍,本文主要内容是展示Zabbix其他的監控功能以及與生産工具結合使用的搭建過程,如有錯誤或者遺漏的地方,歡迎大家指正,謝謝。
基礎理論說明
請閱讀Zabbix 監控平台搭建一文來擷取Zabbix的基本理論知識。
實驗步驟
實驗目的:搭建展示其他監控功能
實驗準備:3台Centos标準系統虛拟機(防火牆與selinux已關閉)
Zabbix服務端使用Centos7,其餘虛拟機系統任意。(6或7)
實驗規劃:
本試驗由于被監控端服務不同,此處不做規劃。
PS:Zabbix服務端搭建見Zabbix 監控平台搭建
一、Zabbix監控nginx的活動量
主機規劃
伺服器角色 | IP |
---|---|
Zabbix服務端 | 192.168.10.20 |
Nginx伺服器(被監控端) | 192.168.10.21 |
1.被監控端配置Nginx服務
安裝依賴
yum -y install gcc gcc-c++ zlib zlib-devel pcre pcre-devel
準備Nginx軟體包,解壓編譯安裝。
tar -zxvf nginx-1.13.8.tar.gz
cd nginx-1.13.8
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module # 指定安裝路徑、指定使用者、組、開啟http狀态統計子產品
make && make install
useradd -s /sbin/nologin -M nginx # 建立運作使用者
修改nginx的配置檔案,開啟狀态統計子產品.
vim /usr/local/nginx/conf/nginx.conf
# 在server區域下添加資訊。
location /ngx_status {
stub_status on;
}
儲存退出,編寫用戶端腳本。
vim nginx.sh
#!/bin/bash
HOST="127.0.0.1"
PORT="80"
# 檢測 nginx 程序是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 檢測 nginx 性能
function active {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
# 執行function
$1
儲存退出,給腳本賦予執行權限。啟動Nginx服務後測試腳本。
chmod a+x nginx.sh
ln -s /usr/local/nginx/sbin/* /usr/local/bin # 做好軟連結,友善調用Nginx
echo "123" > /usr/local/nginx/html/index.html # 添加網頁内容
nginx -t # 檢測Nginx配置檔案是否有問題
nginx # 啟動Nginx服務
./nginx.sh ping # 測試腳本
傳回值為1,代表服務運作正常。關閉nginx服務測試腳本。
pkill nginx
./nginx.sh ping
傳回值為0,代表服務運作異常。
安裝agent端,修改配置檔案,将腳本放入指定目錄,啟動服務。
yum -y install zabbix-agent-3.2.1-1.el6.x86_64.rpm
vim /etc/zabbix/zabbix_agentd.conf
# 修改95行,指定zabbix伺服器的IP或域名
Server=192.168.10.20
# 修改136行,指定主動方案中的zabbix伺服器的IP或域名
ServerActive=192.168.10.20
# 修改147行,指定本機的主機名,此項必須與web界面配置項一緻
Hostname=192.168.10.21
# 取消284行,開啟自定義子產品
UnsafeUserParameters=1
# 取消293行,配置自定義子產品。
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx.sh $1
mv nginx.sh /etc/zabbix/zabbix_agentd.d/
service zabbix-agent start
新複制會話,建立通路循環,以便測試通路量。
2.配置監控端
安裝Zabbix探測工具,進行探測測試。
yum -y install zabbix-get-3.2.1-1.el7.x86_64.rpm
zabbix_get -s 192.168.10.21 -k 'nginx.status[ping]'
啟動服務端Nginx,再次探測。
zabbix_get -s 192.168.10.21 -k 'nginx.status[ping]'
zabbix_get -s 192.168.10.21 -k 'nginx.status[accepts]'
探測成功,傳回浏覽器監控端添加主機。
導入nginx模闆,添加監控nginx的主機
配置→模版→導入
然後點選主機,建立主機,設定主機名稱、IP位址、模闆、主機資産記錄、加密等,然後檢視監控的各項名額情況。
監控模版設定
點選添加,添加監控主機,等待片刻後開始監控。
檢視Nginx通路量
監控中→聚合圖形,添加自定義監控項目。
監測成功,成功擷取Nginx服務資訊。
二、Zabbix監控MySQL資料庫
還原被監控端,監控端删除被監控Nginx主機。
主機規劃
伺服器角色 | IP |
---|---|
Zabbix服務端 | 192.168.10.20 |
MySQL資料庫 | 192.168.10.10 |
1.被監控端配置MySQL資料庫
安裝資料庫,配置基本資訊。
yum -y install mysql mysql-server # 在CentOS7裡需安裝maridb-server
service mysqld start
mysqladmin -uroot password 123 # 建立MySQL初始密碼
mysql -uroot -p123
GRANT ALL ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix'; # 建立連接配接通路使用者
FLUSH PRIVILEGES; # 重新整理權限表
quit
安裝agent端
yum -y install zabbix-agent-3.2.1-1.el6.x86_64.rpm
配置使用者連接配接資訊檔案
vim /etc/zabbix/.my.cnf
# 填寫以下資訊
[client]
user=zabbix
password=zabbix
配置MySQL監控模版
cd /etc/zabbix/zabbix_agentd.d/
cp -a userparameter_mysql.conf userparameter_mysql.conf.bak # 備份該配置檔案
vim userparameter_mysql.conf
# 修改第5行,指定模版檔案存放目錄。
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/etc/zabbix mysql -N | awk '{print $$2}'
# 修改第17行,指定模版檔案存放目錄。
UserParameter=mysql.ping,HOME=/etc/zabbix mysqladmin ping | grep -c aliveUserParameter=mysql.version,mysql -V
修改agent端配置檔案
vim /etc/zabbix/zabbix_agentd.conf
# 修改95行,指定zabbix伺服器的IP或域名
Server=192.168.10.20
# 修改136行,指定主動方案中的zabbix伺服器的IP或域名
ServerActive=192.168.10.20
# 修改147行,指定本機的主機名,此項必須與web界面配置項一緻
Hostname=192.168.10.10
儲存退出,啟動zabbix-agent服務。
service zabbix-agent start
netstat -antp | grep :10050
2.配置監控端
點選配置建立主機設定主機、模闆、主機資産記錄、加密等
一段時間後,檢視mysql伺服器的監控狀态。
主機資訊
模版配置
點選添加,過一段時間檢視監控内容。
建立聚合圖形,檢視MySQL伺服器的帶寬,操作數,負載等資訊。
監測成功。
三、Zabbix自動發現設定
假設zabbix-server伺服器已經配置完成,zabbix-agent端也已經通過批量部署完畢。那麼這時候就需要我們在zabbix的監控頁面進行添加工作了,如果隻有10幾台機器還好說。但是生産環境中基本上都是動辄上百台的虛拟機,添加主機的工作量就非常巨大了,而且無腦的重複性勞動是毫無意義。而Zabbix的自動發現功能解決了這個問題。
還原被監控端,監控端删除被監控端。
主機規劃
伺服器角色 | IP |
---|---|
Zabbix服務端 | 192.168.10.20 |
被監控端1 | 192.168.10.10 |
被監控端2 | 192.168.10.11 |
1.被監控端配置
兩台被監控端安裝agent端,修改配置檔案。
yum -y install zabbix-agent-3.2.1-1.el6.x86_64.rpm
vim /etc/zabbix/zabbix_agentd.conf
# 修改95行,指定zabbix伺服器的IP或域名
Server=192.168.10.20
# 修改136行,指定主動方案中的zabbix伺服器的IP或域名
ServerActive=192.168.10.20
# 修改147行,指定本機的主機名,此項必須與web界面配置項一緻
Hostname=192.168.10.10
ps:注意兩台機器的主機名!!!
安裝apache服務,開啟apache服務。
yum -y install httpd # 安裝apache
echo "123" > /var/www/html/index.html # 填寫網頁内容
service httpd start # 啟動服務
curl localhost # 通路測試
啟動Zabbix-agent服務
service zabbix-agent start
netstat -antp | grep :10050
2.配置監控端
傳回浏覽器的監控端,開始配置自動發現。
配置動作
先建立動作,再配置自動發現。
配置→動作→選擇自動發現→建立動作
配置動作
配置操作
點選添加,當動作條件滿足,才能開始執行操作。
配置自動發現
配置→自動發現→建立自動發現規則
點選添加,完成配置。
ps:該過程困難較慢,需要等待一段時間。
3.檢視自動發現的主機
檢測中→自動發現
成功發現配置的被監控端
進入監控頁面檢視
成功觸發動作,添加了兩台主機。
四、Zabbix綁定釘釘進行報警提示
1.添加釘釘機器人
在釘釘工作群内建立智能機器人
郵件點選選擇群設定
點選添加機器人,機器人設定如下。
勾選同意協定,完成設定。
點選完成設定
添加成功
2.配置告警腳本
vim /etc/zabbix/zabbix_server.conf
# 檢視455行,檢視Zabbix腳本存放目錄或自行定義
AlertScriptsPath=/usr/lib/zabbix/alertscripts
cd /usr/lib/zabbix/alertscripts/
vim token.sh # 建立告警腳本
#!/bin/bash
to=$1
subject=$2
text=$3
curl 'https://oapi.dingtalk.com/robot/send?access_token=d84c01cc34d5b5443de7ca887e2f4184b0261e93c94429d70f7a390ac579b7d4' \ # 設定剛剛配置機器人的Wedhook
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "'"$text"'"
},
"at":{
"atMobiles": [
"'"$1"'"
],
"isAtAll": false
}
}'
儲存退出,賦予腳本執行權限與使用者群組權限。
chown zabbix.zabbix token.sh
chmod +x token.sh
測試腳本是否能與釘釘建立通信。
./token.sh 13221612875 aa
yajunxitou
釘釘成功接受到發送的資訊
3.Zabbix綁定釘釘
建立報警媒介類型
管理→報警媒介類型→建立報警媒介
報警媒介配置
點選完成,報警媒介添加成功。
建立動作
配置→動作→觸發器→建立動作
配置故障操作
預設接收人設定為
故障{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}
for yajunxitou
ps:最後一行為配置機器人時的安全設定的自定義關鍵詞!
配置恢複操作
預設接收人設定為
恢複{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}
for yajunxitou
ps:最後一行為配置機器人時的安全設定的自定義關鍵詞!
配置使用者權限
管理→使用者→Admin
點選報警媒介添加釘釘報警媒介
4.測試釘釘告警
關閉任意一台被監測主機的http服務(模拟故障)
service httpd stop
錯誤報警提示成功。
開啟httpd服務(模拟修複)
service httpd start
本文于2020年11月25日由Vonmerlot整理成文。