shell 操作釘釘機器人實現告警提醒
我們知道,之前的運維告警多通過mail 等方式通知到相應的人員,難以實現隨時隨地的檢視。隨著手機APP的發展,很多告警開始傳送到IM軟體上去。目前比較常用的是傳送到微信和釘釘上,今天我們將重點放在釘釘上。群機器人是釘釘群的高階擴充套件功能,群機器人可以將第三方服務的資訊聚合到群聊中,實現自動化的資訊同步。藉助釘釘機器人,通過官方提供的API,可以很方便的post資料到相應的接收人 。群機器人支援Webhook協議的自定義接入,支援更多可能性,例如:你可將運維報警通過自定義機器人聚合到釘釘群實現提醒功能。
Shell 指令碼語言是實現Linux系統管理及自動化所必須的重要工具。熟練地編寫Shell語言可以提升運維人員的工作效率,適應複雜的工作環境。
在本文,我們聚焦通過shell指令碼語言實現藉助釘釘機器人傳送告警資訊。
1: 瞭解更多群機器人的資訊,大家可登入官網學習
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
2.給自己的機器人起個好聽的名字
操作如下:
3.使用命令列工具curl
curl是一個命令列工具,通過指定的URL來上傳或下載資料,並將資料展示出來。curl中的c
表示client,而URL,就是URL。
3.1 與curl一起使用的協議,最多的還是HTTP
在每一個HTTP請求中,都有一個對應的方法,常用的方法有:GET
、POST
、HEAD
和PUT
。如果在一個curl命令中不指定具體的方法,那麼預設的就是使用GET
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) |
當使用
Content-Type是一個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"}
報錯原因是 "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,錯誤消失。
執行情況如下:
成功收到的資訊,內容截圖如下:
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)。
觸發執行,案例如下:
手機釘釘收到的告警資訊
參考資料:
1.釘釘群機器人
https://ding-doc.dingtalk.com/doc#/serverapi2/krgddi
2.curl使用指南
https://www.jianshu.com/p/fc0eb6c6