知识预热;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).查看叮叮机器人群内容;