Application Insights + Logic App + Microsoft Teams 整合

Application Insights可以讓我們去設定監控某些指標,當這些指標有發生異常時候,就會發送Alert通知,讓我們隨時知道發生的狀況或是是否有異常發生

我們通常會設定是屬於Exception類的訊息,且這對於開發或是維運人員來說才可以立即進行處理,同時也是屬於DevOps環節的一塊,不過,透過Mail方式收到資訊內容就會像下圖這樣呈現方式,就這樣內容來說只知道有發生問題,但是無法知道問題點是甚麼,是否要做立即性的的處理,且若想要知道更細節的資訊,還必須回到Azure內查詢,才可以知道是到底是發生甚麼錯誤

若是使用手機去查看時候,更就會感到不方便。先前有實作一篇Azure Application Insights發Alert訊息到Slack,可以透過Logice App利用Application Insights的Webhook作為發送管道,雖然,可以放入比”Mail”還多的資訊,但明顯還是不夠,這時候就可以利用Logice App屬於Application insights的功能,這目前還在Preview版本,透過這個的Application insights Task就可以在訂定更多細節的資訊

Logic App流程設計


在這次設計上,只需要三個步驟就可以讓Application Insights蒐集到Exception送到Microsoft Teams Channel,算是很簡單了

Recurrence

Recurrence主要是設定間隔一段時間確認Application Insights內的資料,可以依照需求決定時間點

Run Analytics Query

在Logice App的Application Insights Task共有兩種Application insights Query & Application insights for Visualize

  • Application insights Query : 透過分析語法取得想要的資料,呈現方式是表格型態
  • Application insights for Visualize : 意思如同上面一樣,只是採用圖表方式呈現

因為Logice App會與Application Insights做資料串接,所以,我們必須讓Logic App可以與Application Insights溝通,因此,要設定Connection Info

  • Connection Name : 定義連線資訊名稱
  • Application ID : Application Insights的Application Key,可以在下圖找到
  • API Key:在同一個畫面中,選擇建立API金鑰,就可以得到

設定完以上資訊,就可以讀取到Application Insights資料,之後,就採用Application insights Query這個Task,要使用語法可以先在Application Insights Analytics去跑跑看自己寫的語法是否可以運作,下面為這次實作的語法,主要是抓取資訊類型是屬於exception

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
exceptions
| where timestamp>ago(180s)
| where (itemType == 'exception' )
| project timestamp=timestamp+8h,
s=now()+8h,
client_Type ,
outerType ,
outerMethod ,
outerMessage ,
outerAssembly,
operation_Name ,
details ,
customDimensions,
ApplicationName=tostring(customDimensions["ApplicationName"]),
user_Id

上面查詢語法的每個欄位,之後都可以當作傳送的資訊欄位

Microsoft Teams

設定好取得Application Insights資料後,再來就是設定綁定到Microsoft Teams,在Task中找到Microsoft Teams

要將資訊POST到Teams的Channel,所以選擇Post Message

前面有提到,透過Application Insights Query的資料欄位,都可以作為傳遞訊息的欄位,所以,可以看見Parameter都是剛剛查詢出來的欄位,然後,就可以在Message組合自己想要收到的資訊,因為是Application Insights Query查詢到的資料,所以,可以完整呈現出Application Insights蒐集的資訊

  • Team ID : 就是在Teams上的群組
  • Channel ID : 就是Teams群組中的頻道
    基本上只要跟Teams綁定後,這兩個資訊可以用選的,不需要人工Key,希望在Teams中的訊息有html格式,可以用Html的Tag去編排,如下圖

另外,在發送資料時候,Logic App會用迴圈方式一筆一筆將資料推送到Teams

整個流程如下

總結


Logic App功能越來越強大,整合越來越Microsoft SaaS的服務,對於企業來說可以省掉整合的成本與時間,但是,採用排程方式並不是最好的,最好的方式還是用觸發會比較好,又因為觸發沒有辦法找到詳細資訊,所以,目前怎樣運用就自行評估,不過,也許後續有可以透過參數方式丟給Application Insights Query,這樣就可以透過觸發方式去運作