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

相关文章
相关标签/搜索