SHELL 調用釘釘機器人-之Linux 系統磁盤監控單個服務佔用磁盤20%報警


知識預熱;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

   image.png


  • 點擊「複製」按鈕,便可得到這個機器人對應的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).查看自定義機器人發送結果; (由於我測試調用兩次因此出現)


image.png



(6).測試消息類型及數據格式;


{    
"msgtype": "text", 
    "text": {        "content": "我就是我, 是不同的煙火@156xxxx8827"
    }, 
    "at": {  
             "atMobiles": [            
             "156xxxx8827", 
             "189xxxx8325"
        ], 
        "isAtAll": false
    }
}

image.png

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
    }
}"


釘釘結果以下;(標紅部分爲釘釘機器人羣的名稱)


image.png


(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).驗證日誌結果;

image.png


(6).查看叮叮機器人羣內容;


image.png

相關文章
相關標籤/搜索