知識預熱;python
(1).shell 發送post 請求接口;linux
function checkmountchj(){ mountpath="/chj" if [ ! -d ${mountpath} ] then runenv=${RUNTIME_ENV} ip=$(hostname -i) apiurl="http://api域名/image/init/v1" echo $runevn $ip /bin/curl ${apiurl} -X POST -H "Content-Type:application/json" -d "{\"run_type\":\"${runenv}\",\"instanceip\":\"${ip}\"}" else echo "$rundate磁盤檢查成功" fi } checkmountchj
1.運維和釘釘機器人背景;web
如今企業面向工具化釘釘提供了人性化智能化的優質服務,運維過程當中不免會出現各類報警渠道接入門檻比較高,須要各類封裝接口或者封裝sdk,由此引出釘釘報警,運維人員shell 腳本基本大衆化,都能按照本身的需求進行開發;shell
2.釘釘自定義機器人(webhook)json
(1).在機器人管理頁面選擇「自定義」機器人,輸入機器人名字並選擇要發送消息的羣。若是須要的話,能夠爲機器人設置一個頭像。點擊「完成添加」,完成後會生成Hook地址,以下圖:api
點擊「複製」按鈕,便可得到這個機器人對應的Webhook地址,其格式以下:生成 access_token 認證惟一標識,每個自定義機器人都不同;bash
https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx
(3).使用自定義機器人服務器
獲取到Webhook地址後,用戶能夠向這個地址發起HTTP POST 請求,便可實現給該釘釘羣發送消息。注意,發起POST請求時,必須將字符集編碼設置成UTF-8。markdown
當前自定義機器人支持文本 (text)、鏈接 (link)、markdown markdown)、ActionCard、FeedCard消息類型**,你們能夠根據本身的使用場景選擇合適的消息類型,達到最好的展現樣式。app
自定義機器人發送消息時,能夠經過手機號碼指定「被@人列表」。在「被@人列表」裏面的人員收到該消息時,會有@消息提醒(免打擾會話仍然通知提醒,首屏出現「有人@你」)。
當前機器人尚不支持應答機制 (該機制指的是羣裏成員在聊天@機器人的時候,釘釘回調指定的服務地址,即Outgoing機器人)。
(4).測試自定義機器人
經過下面方法,能夠快速驗證自定義機器人是否能夠正常工做:
Linux 使用命令行工具curl
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \ -H 'Content-Type: application/json' \ -d '{"msgtype": "text", "text": { "content": "我就是我, 是不同的煙火" } }'
(5).查看自定義機器人發送結果; (由於我測試調用兩次因此出現)
(6).測試消息類型及數據格式;
{ "msgtype": "text", "text": { "content": "我就是我, 是不同的煙火@156xxxx8827" }, "at": { "atMobiles": [ "156xxxx8827", "189xxxx8325" ], "isAtAll": false } }
linux 測試方法 curl 進行測試命令; curl 'https://oapi.dingtalk.com/robot/send?access_token=你的token' -H "Content-Type:application/json" -d "{\"msgtype\": \"text\", \"text\": { \"content\": \"服務器異常,請快速處理下\" }, \"at\": { \"atMobiles\": [ \"183xxx50xx\", ], \"isAtAll\": false } }"
釘釘結果以下;(標紅部分爲釘釘機器人羣的名稱)
(4).實戰磁盤監控腳本案例;
#!/bin/bash #author:lijx " 1.定義日誌路徑,腳本須要變量參數,執行系統指標過濾; " logPath="/chj/logs" envs=$(ls -lrt /chj/logs/ |awk '{print $9}'|tr -d "\r"|grep -v "^$"|grep -v "logdelrecord"|grep -v "filebeat"|grep -v "rsyslog") DiskCapacity=$(df -m /chj/ |awk 'NR==2 {print $2}') thresholdValue=$(echo "$DiskCapacity * 0.15" | bc |awk -F "." '{print $1}') runLog="/var/log/app_check_run.log" start_current_date=`date "+%Y-%m-%d %H:%M:%S"` function alarmdingdingDisk(){ " 1.經過curl 發送post請求到叮叮機器人 2.將環境以及應用信息傳遞到content 中; " conTent=$(echo "k8s應用磁盤報警 k8s宿主機:$3 環境: $1 應用名稱: $2" 時間: ${start_current_date}) apiurl="https://oapi.dingtalk.com/robot/send?access_token=此處須要跟進實際狀況生成" /bin/curl $apiurl -X POST -H "Content-Type: application/json" -d "{\"msgtype\": \"text\",\"text\": {\"content\": \"$conTent\"} }" } function traverseDir(){ " 1.動態獲取系統環境列表,磁盤chj空間大小; 2.使用bc 計算磁盤容量和當前佔用單個文件大小; 3.進行比較,計算知足單個應用佔用/chj 20%條件將發送報警 " for env in $envs do appName=$(/bin/du -sm /chj/logs/$env/* |awk '{print $2}' |awk -F "/" '{print $NF}'|tr -d "\r") for app in $appName do appDiskValue=$(/bin/du -sm /chj/logs/$env/$app|/bin/awk '{print $1}') if [ $appDiskValue -ge $thresholdValue ] then hostIp=$(hostname -I |awk '{print $1}') alarmdingdingDisk $env $app $hostIp else testing="this is test" echo "未發現應用,佔用/chj/磁盤20%" echo "檢查環境: $env 檢查應用名稱: $app 文件大小:${appDiskValue}M 當前運行時間: $start_current_date" >> $runLog fi done done } traverseDir
(5).驗證日誌結果;
(6).查看叮叮機器人羣內容;