文章

dingTalk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/bash

### 配置变量
#LOCAL_REPO=$(cd "$(dirname "$0")"; pwd)
#LOCAL_REPO=$( cd "${LOCAL_REPO}";cd ../../; pwd )

#MODEDIR=$(cd "$(dirname "$0")"; pwd)

## 钉钉机器人信息
DINGTALK_ACCESS_TOKEN=******
DINGTALK_SECRET=******
read timestamp sign < <( python3 ${MODEDIR}/get_signs.py ${DINGTALK_SECRET} )

## 获取当前节点系统信息:
HostName=$( /bin/hostname )
if [ -f /sbin/ip ]; then
    IPDDR=$( /sbin/ip addr | grep -EwA 4 "eth0|ens192|en0" | grep -w inet | awk '{print $2}'|awk -F'/' '{print $1}' )
elif [ -f /sbin/ifconfig ]; then
    IPDDR=$( /sbin/ifconfig | grep -EwA 4 "eth0|ens192|en0" | grep -w inet | awk '{print $2}'|awk -F'/' '{print $1}' )
else
    echo "无法获取本机内网ip"
    IPDDR=""
fi

# ip.xtrfr.cn,前面的三级域名 ip 可以是随便的字符
InternetIP=$( curl -s ip.fscloude.cn ) 

## 消息体颜色变量:
Pale_Green="#00CC00"  # 浅绿色
Pale_Blue="#0000dd"   # 浅蓝色
Pale_Red="#dd0000"    # 浅红色
Pale_Orange="#FF3333" # 红橙色
Orange_Red="#FF9966"  # 正橘红色
Red_Brown="#990000"   # 红棕色

# 默认颜色
Topic_Color="${Pale_Green}" # 浅绿色
GigRo_Color="${Pale_Blue}"  # 浅蓝色

function dingTalk() {
    local health_status=$1
    local push_info="$2"

    #当前时间
    NowTime="$( date "+%Y-%m-%d %H:%M:%S" )"

    ## 消息体
    # 去除执行后返回信息中的回车
    push_info="$( echo "${push_info}" | tr '\n' ' ' )"

    ## 消息体变量:
    # 颜色变动
    if [[ ${health_status} -ne 0 ]]; then
        health_status=Failed
        Topic_Color="${Pale_Orange}"
        Topic_Mk_Cnt='<font color='"${Topic_Color}"'> CallCenter-OSS-Rsync 同步失败 - P1</font>'
    else
        health_status=Succeed
        Topic_Color="${Pale_Green}"
        Topic_Mk_Cnt='<font color='"${Topic_Color}"'> CallCenter-OSS-Rsync 同步成功 - P1</font>'
    fi
    Alert_Mk_Source='**来源:** '"ECS Crontab Script"''
    Alert_Mk_Name='**告警名称:** '"呼叫中心录音上传OSS"''
    HostName_Mk_Cnt='**推送主机:** '"${HostName}"''
    HostIPNet_Mk_Cnt='**内网地址:** '"${IPDDR}"''
    HostIPNat_Mk_Cnt='**公网地址:** '"${InternetIP}"''
    NowTime_Mk_Cnt=' **推送时间:** '"${NowTime}"''
    Health_Mk_Cnt='  **同步状态:** **<font color='${Topic_Color}'>'${health_status}'</font>**'
    StaInfo_Mk_Cnt=' **状态信息:** \n<font color='${Topic_Color}'>'${push_info}'</font>'

    message='{
        "msgtype": "markdown",
        "markdown": {
            "title": "呼叫中心OSS录音同步状态",
            "text": "## '${Topic_Mk_Cnt}'\n'${Alert_Mk_Source}'\n\n'${Alert_Mk_Name}'\n\n**告警内容:**\n> - '${HostName_Mk_Cnt}'\n> - '${HostIPNet_Mk_Cnt}'\n> - '${HostIPNat_Mk_Cnt}'\n> - '${NowTime_Mk_Cnt}'\n --- \n> - '${Health_Mk_Cnt}'\n\n> - '${StaInfo_Mk_Cnt}'"
        },
        "at": {
            "atMobiles": ["15660830862"],
            "isAtAll": false
        }
    }'

    # 发送钉钉消息
    curl -s 'https://oapi.dingtalk.com/robot/send?access_token='"${DINGTALK_ACCESS_TOKEN}"'&timestamp='${timestamp}'&sign='${sign}'' \
         -H 'Content-Type: application/json' \
         -d "${message}"
}

调用方式

1
2
3
4
# 在其他脚本中
source dingTalk.sh

dingTalk $? "告警信息"
本文由作者按照 CC BY 4.0 进行授权