知识预热;
(1).shell 发送post 请求接口;
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
}
checkmountchj1.运维和钉钉机器人背景;
现在企业面向工具化钉钉提供了人性化智能化的优质服务,运维过程中难免会出现各种报警渠道接入门槛比较高,需要各种封装接口或者封装sdk,由此引出钉钉报警,运维人员shell 脚本基本大众化,都能按照自己的需求进行开发;
2.钉钉自定义机器人(webhook)
(1).在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。点击“完成添加”,完成后会生成Hook地址,如下图:

点击“复制”按钮,即可获得这个机器人对应的Webhook地址,其格式如下:生成 access_token 认证唯一标识,每一个自定义机器人都不一样;
https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx
(3).使用自定义机器人
获取到Webhook地址后,用户可以向这个地址发起HTTP POST 请求,即可实现给该钉钉群发送消息。注意,发起POST请求时,必须将字符集编码设置成UTF-8。
当前自定义机器人支持文本 (text)、连接 (link)、markdown markdown)、ActionCard、FeedCard消息类型**,大家可以根据自己的使用场景选择合适的消息类型,达到最好的展示样式。
自定义机器人发送消息时,可以通过手机号码指定“被@人列表”。在“被@人列表”里面的人员收到该消息时,会有@消息提醒(免打扰会话仍然通知提醒,首屏出现“有人@你”)。
当前机器人尚不支持应答机制 (该机制指的是群里成员在聊天@机器人的时候,钉钉回调指定的服务地址,即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).查看叮叮机器人群内容;


















