作者:JackTian
文章首發(fā)于公眾號:【杰哥的IT之旅】
沒錯,這次我結(jié)合工作運(yùn)用場景在現(xiàn)網(wǎng)環(huán)境服務(wù)器上部署了一個自動巡檢多個接口地址是否正常并按 crontab 定時任務(wù)通過企業(yè)微信機(jī)器人以文本的形式發(fā)送到告警群的腳本。
思路需求很明確,目前接口服務(wù)器為固定設(shè)備、固定 IP。首先,我們可以先創(chuàng)建一個接口地址檢查的目錄以及需要輸出的日志文件。
第一步:
# mkdir -p /opt/interface-check
第二步:
# cd /opt/interface-check/
# touch interface.log
mkdir [-p] DirName:確保目錄名稱存在,如果目錄名稱不存在,則需要新創(chuàng)建一個。
接著,我們只需在這一臺服務(wù)器上將對接過的省份、企業(yè)的接口地址,以及包括自身回調(diào)地址、涉及相關(guān)內(nèi)部網(wǎng)絡(luò)可以互通的各種接口地址全部收集起來。
第三步:
vim jkdz-check.sh
#!/bin/bash
#1、北京接口地址
http_beijing_addr=接口地址
#2、xxx企業(yè)接口地址
http_xxxqiye_addr=接口地址
# 企業(yè)微信機(jī)器人地址(需要根據(jù)實際機(jī)器人地址配置)
WEBHOOK_URL=企業(yè)微信機(jī)器人地址
# 循環(huán)執(zhí)行檢測方法
while :
do
date=$(date +%Y-%m-%d-%H:%M:%S)
#1、北京接口地址檢測
beijing_status_code=`curl -m 20 -s -o /dev/null -w %{http_code} $http_beijing_addr`
if [ "$beijing_status_code" -ne 200 ]
then
curl --location --request POST ${WEBHOOK_URL} \
--header 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content": "'$date' 北京-接口連接異常"}}'
echo "$date 北京-接口連接異常" >>/opt/interface-check/interface.log
else
echo "$date 北京-接口連接正常" >>/opt/interface-check/interface.log
fi
#2、xxx企業(yè)接口地址檢測
xxxqiye_status_code=`curl -m 20 -s -o /dev/null -w %{http_code} $http_xxxqiye_addr`
if [ "$xxxqiye_status_code" -ne 200 ]
then
curl --location --request POST ${WEBHOOK_URL} \
--header 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content": "'$date' xxx企業(yè)-接口連接異常"}}'
echo "$date xxx企業(yè)-接口連接異常" >>/opt/interface-check/interface.log
else
echo "$date xxx企業(yè)-接口連接正常" >>/opt/interface-check/interface.log
fi
exit
done第三步:
vim jkdz-check.sh
#!/bin/bash
#1、北京接口地址
http_beijing_addr=接口地址
#2、xxx企業(yè)接口地址
http_xxxqiye_addr=接口地址
# 企業(yè)微信機(jī)器人地址(需要根據(jù)實際機(jī)器人地址配置)
WEBHOOK_URL=企業(yè)微信機(jī)器人地址
# 循環(huán)執(zhí)行檢測方法
while :
do
date=$(date +%Y-%m-%d-%H:%M:%S)
#1、北京接口地址檢測
beijing_status_code=`curl -m 20 -s -o /dev/null -w %{http_code} $http_beijing_addr`
if [ "$beijing_status_code" -ne 200 ]
then
curl --location --request POST ${WEBHOOK_URL} \
--header 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content": "'$date' 北京-接口連接異常"}}'
echo "$date 北京-接口連接異常" >>/opt/interface-check/interface.log
else
echo "$date 北京-接口連接正常" >>/opt/interface-check/interface.log
fi
#2、xxx企業(yè)接口地址檢測
xxxqiye_status_code=`curl -m 20 -s -o /dev/null -w %{http_code} $http_xxxqiye_addr`
if [ "$xxxqiye_status_code" -ne 200 ]
then
curl --location --request POST ${WEBHOOK_URL} \
--header 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content": "'$date' xxx企業(yè)-接口連接異常"}}'
echo "$date xxx企業(yè)-接口連接異常" >>/opt/interface-check/interface.log
else
echo "$date xxx企業(yè)-接口連接正常" >>/opt/interface-check/interface.log
fi
exit
done
通過 while 循環(huán)語句進(jìn)行多次循環(huán)接口地址檢測、if 判斷語句來判斷省份、企業(yè)的接口正常 / 異常情況并輸出打印日志至 /opt/interface-check/interface.log 文件中。
企業(yè)微信添加群機(jī)器人方法:
1、需先建一個群,建好后,通過聊天信息找到添加群機(jī)器人。

2、新建機(jī)器人,填寫好機(jī)器人名稱,保存。


3、添加成功后,創(chuàng)建者可以在機(jī)器人詳情頁看到該機(jī)器人特有的 webhookurl,可以按說明 a 向這個地址發(fā)起 HTTP POST 請求,即可實現(xiàn)給該群組發(fā)送消息。

根據(jù)機(jī)器人配置說明,可以看到有用 curl 工具往群組推送文本消息的示例:
curl 'webhookurl地址' \
-H 'Content-Type: application/json' \
-d '
{
"msgtype": "text",
"text": {
"content": "hello world"
}
}'
注意要將 webhookurl 替換成你的機(jī)器人 webhook 地址,content 必須是 utf8 編碼。
當(dāng)前自定義機(jī)器人支持文本(text)、markdown(markdown)、圖片(image)、圖文(news)四種消息類型。
機(jī)器人的 text/markdown 類型消息支持在 content 中使用 <@userid> 擴(kuò)展語法來 @群成員。
除此之外,還有消息類型及數(shù)據(jù)格式(文本類型、markdown類型、圖片類型、圖文類型、文件類型)模版卡片類型(文本通知模版卡片、圖文展示模版卡片)消息發(fā)送頻率限制、文件上傳接口等配置說明,可根據(jù)實際需求參考進(jìn)行配置。
第三步腳本中需根據(jù)實際情況更新接口地址、企業(yè)微信機(jī)器人地址、$http_beijing_addr、beijing_status_code、$date 北京-接口連接異常、$date 北京-接口連接正常字段。
配置無誤后,可以先手動驗證下腳本的語法是否無誤,避免出現(xiàn)語法錯誤:未預(yù)期的文件結(jié)尾提示。
腳本中未加 &> /dev/null 相關(guān)參數(shù)配置,因此在驗證腳本時,會有打印信息提示,我們可以放后臺運(yùn)行。
# nohup bash /opt/interface-check/jkdz-check.sh &
# more nohup.out
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 134 100 27 100 107 64 254 --:--:-- --:--:-- --:--:-- 254
{"errcode":0,"errmsg":"ok"} % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 140 100 27 100 113 63 267 --:--:-- --:--:-- --:--:-- 267
{"errcode":0,"errmsg":"ok"} % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 134 100 27 100 107 61 244 --:--:-- --:--:-- --:--:-- 245
{"errcode":0,"errmsg":"ok"} % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 134 100 27 100 107 58 232 --:--:-- --:--:-- --:--:-- 232
{"errcode":0,"errmsg":"ok"} % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 140 100 27 100 113 56 235 --:--:-- --:--:-- --:--:-- 235
{"errcode":0,"errmsg":"ok"} % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 140 100 27 100 113 58 244 --:--:-- --:--:-- --:--:-- 244
寫個 crontab 定時任務(wù),每 2 小時執(zhí)行該腳本。
第四步:
crontab -e
0 */2 * * * sh /opt/interface-check/jkdz-check.sh
最后,我們可以通過企業(yè)微信群查看機(jī)器人發(fā)送的告警信息,效果如下:

輸出的 log 日志情況如下:

以上就是今天所要分享的全部內(nèi)容了。
如果你覺得這篇文章對你有點(diǎn)用的話,為本文點(diǎn)個贊、留個言或者轉(zhuǎn)發(fā)一下,讓更多的朋友看到,因為這將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動力!