天天看點

shell 操作釘釘機器人實作告警提醒

我們知道,之前的運維告警多通過mail 等方式通知到相應的人員,難以實作随時随地的檢視。随着手機APP的發展,很多告警開始發送到IM軟體上去。目前比較常用的是發送到微信和釘釘上,今天我們将重點放在釘釘上。群機器人是釘釘群的進階擴充功能,群機器人可以将第三方服務的資訊聚合到群聊中,實作自動化的資訊同步。借助釘釘機器人,通過官方提供的API,可以很友善的post資料到相應的接收人 。群機器人支援Webhook協定的自定義接入,支援更多可能性,例如:你可将運維報警通過自定義機器人聚合到釘釘群實作提醒功能。

Shell 腳本語言是實作Linux系統管理及自動化所必須的重要工具。熟練地編寫Shell語言可以提升運維人員的工作效率,适應複雜的工作環境。

在本文,我們聚焦通過shell腳本語言實作借助釘釘機器人發送告警資訊。

1: 了解更多群機器人的資訊,大家可登入官網學習

https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

2.給自己的機器人起個好聽的名字

操作如下:

shell 操作釘釘機器人實作告警提醒

 3.使用指令行工具curl

curl是一個指令行工具,通過指定的URL來上傳或下載下傳資料,并将資料展示出來。curl中的

c

表示client,而URL,就是URL。

3.1 與curl一起使用的協定,最多的還是HTTP

在每一個HTTP請求中,都有一個對應的方法,常用的方法有:

GET

POST

HEAD

PUT

。如果在一個curl指令中不指定具體的方法,那麼預設的就是使用

GET

方法。對于其它的方法,可以在curl指令中指定:

method option

POST

-d

-F

HEAD

-I

PUT

-T

POST

是HTTP中向服務端送出資料的一種方法。在浏覽器中,可以在表單中填寫完資料後,浏覽器就會預設将填寫的資料使用

key=value

串的形式進行轉化。在curl中,我們可以使用

-d

--data

選項來指定具體的資料。

3.2 釘釘使用curl工具主要相關的兩個參數

參數(短形式) 參數(長形式) 解釋 具體描述
-d --data  HTTP POST data (H) 把指定的資料發送到伺服器上.
-H --header Custom header to pass to server (H) 當使用

POST

方法送出資料時,對于送出的資料主要有如下四種形式:
  • application/x-www-form-urlencoded

    :預設的形式,即

    key1=value1&key2=value2

    的形式;
  • multipart/form-data

    :使用表單上傳檔案時使用這個形式;
  • application/json

    :送出JSON格式的資料;
  • text/xml

    :送出XML格式的資料。
Content-Type是一個Header,如果不指定的話,預設使用

application/x-www-form-urlencoded

形式傳輸資料,當需要使用别的形式進行資料傳輸的話,需要指定Header。

3.3 調用格式(案例)

curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
   -H 'Content-Type: application/json' \
   -d '{"msgtype": "text", 
        "text": {
             "content": "我就是我, 是不一樣的煙火"
        }
      }'      

測試過程中,請将上面指令直接複制到指令行,再将xxxxxxxx替換為真實access_token。

4.不一樣的markdown類型

官網中除markdown類型,其它的消息類型的 測試例子(腳本) 都可以直接在shell中示範

官網markdown類型的測試案例

{
     "msgtype": "markdown",
     "markdown": {
         "title":"杭州天氣",
         "text": "#### 杭州天氣 @156xxxx8827\n" +
                 "> 9度,西北風1級,空氣良89,相對溫度73%\n\n" +
                 "> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\n"  +
                 "> ###### 10點20分釋出 [天氣](http://www.thinkpage.cn/) \n"
     },
    "at": {
        "atMobiles": [
            "156xxxx8827", 
            "189xxxx8325"
        ], 
        "isAtAll": false
    }
 }
      

 在shell中執行報錯資訊,錯誤資訊為:

{"errcode":40035,"errmsg":"缺少參數 json"}      
shell 操作釘釘機器人實作告警提醒

 報錯原因是  "text" 欄位對應的 value 值中的 “+” 運算符導緻,将中間的

" +
"      

删除。

即可執行代碼更新為:

{
     "msgtype": "markdown",
     "markdown": {
         "title":"杭州天氣",
         "text": "#### 杭州天氣 @156xxxx8827\n> 9度,西北風1級,空氣良89,相對溫度73%\n\n> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\n> ###### 10點20分釋出 [天氣](http://www.thinkpage.cn/) \n"
     },
    "at": {
        "atMobiles": [
            "156xxxx8827", 
            "189xxxx8325"
        ], 
        "isAtAll": false
    }
 }      

執行OK,錯誤消失。

執行情況如下:

shell 操作釘釘機器人實作告警提醒

 成功收到的資訊,内容截圖如下:

 

shell 操作釘釘機器人實作告警提醒

5. 将釘釘機器人代碼放到檔案中,友善調用

例如:建立用于監控當QQOrder_ERP叢集的VIP漂移時,調用用來發送釘釘告警的可執行檔案 ddalarm.sh。

其主要代碼如下:

#!/bin/bash

webhook='https://oapi.dingtalk.com/robot/send?access_token=34XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
cluster='QQOrder_ERP'
host=`hostname -I | awk '{print $1}'`
vip=$1

function SendMsgToDingding() {
    curl $webhook -H 'Content-Type: application/json' -d "
    {
        'msgtype': 'text',
        'text': {
            'content': '叢集名稱:$cluster\n告警資訊:虛拟IP<$vip>已漂移至節點<$host>,請注意\n'
        },
        'at': {
            'isAtAll': true
        }
    }"
}


SendMsgToDingding      

此測試檔案,調用執行時需要傳入一個參數(VIP)。

觸發執行,案例如下:

shell 操作釘釘機器人實作告警提醒

 手機釘釘收到的告警資訊

shell 操作釘釘機器人實作告警提醒

參考資料:

1.釘釘群機器人

https://ding-doc.dingtalk.com/doc#/serverapi2/krgddi 

2.curl使用指南

https://www.jianshu.com/p/fc0eb6c60816

繼續閱讀