himanago

Azure・C#などのMS系技術やLINE関連技術など、好きな技術について書くブログ

Ignite The Tour Osaka: OPS20「インシデントに対応する」フォローアップ~内容・デモ解説編その2~

間が空いてしまいましたがその2です。。

f:id:himanago:20200131235952p:plain

1/23(木)・24(金) 、インテックス大阪にて開催された Microsoft の大型カンファレンス「Ignite The Tour Osaka」で登壇した「インシデントに対応する」セッションのフォロー記事の続きです。

★前回:Ignite The Tour Osaka: OPS20「インシデントに対応する」フォローアップ~内容・デモ解説編その1~ - himanago

前回の内容を受けてのデモ

f:id:himanago:20200207154452p:plain

Tailwind Traders の課題がいくつかありましたが、

f:id:himanago:20200131201244p:plain

これに対して、まず「インシデントトラッキング」を行うための「ユニークなチャネル」を作ることで解決しようというデモです。

内容と登場技術

コミュニケーションに関する課題に対処するために、エンジニアがインシデントに関する議論を行うユニークなチャネルを作成する必要があります。

これはそのインシデントにのみ「固有の」チャネルであることが必要で、インシデント対応に集中したり、あとから分析したりするためにも普段使用しているチャネルとは分けるべきです。

そして今回は

  • Azure Boards(Azure DevOps)への issue 作成&オンコールなエンジニアのアサイ
  • Microsoft Teams へそのインシデントに関するチャネルの作成
  • オンコールなエンジニアへの連絡

を Azure Logic Apps で自動化します。

f:id:himanago:20200207155437p:plain

デモ

ざざっと画面キャプチャで流れを見ていきます。

Logic Apps フロー

ライブで作った部分も含め、見ていきます。

全体像

このような流れです。

f:id:himanago:20200207155853p:plain

Azure Monitor から連携することを想定していて、インシデント情報は JSON を HTTP で受け取るようにつくります(デモでは Postman で JSON を投げました)。

Azure Boards への issue 作成

f:id:himanago:20200207160257p:plain

まずは Azure DevOps へ issue を作ります。タイトルに JSON で飛んできたインシデント内容を入れておきます。Logic Apps では JSON の内容を項目(動的なコンテンツ)としてマウスクリックのみで扱えるのでとても楽ですね。

説明(内容)はひとまず空欄にしておきます。

Teams へのチャネル作成

インシデント対応チーム用の、このインシデント専用のチャネルを作ります。

f:id:himanago:20200207160555p:plain

ひとつ前のステップで作った issue の番号(ID)とランダムな数値をチャネル名に入れているのがポイントです。

Logic Apps ではステップ間の連動もこのように簡単にできます。

issue に Teams チャネルへのリンクを張る

f:id:himanago:20200207160817p:plain

チャネルのリンク(ひとつ前のステップで得られるチャネル ID を使って作る)を issue の説明に載せます。

オンコールなエンジニアを見つける

f:id:himanago:20200207160959p:plain

オンコールなエンジニアの情報は、今回は Azure Table Storage に入っているのでそこから取得します。

ちなみに Storage Explorer で見ると、このようになっています。

f:id:himanago:20200207161337p:plain

Table Storage から得た情報は JSON 形式なので、パースします。

f:id:himanago:20200207161436p:plain

パースした情報を使い、メールアドレスを issue の担当者として設定します。

f:id:himanago:20200207161516p:plain

インシデントチャネルに情報を投稿

最後のステップとして、インシデントの内容および issue へのリンクを含んだメッセージを作成したチャネルに投稿します。

今回は Adaptive Cards という形式でメッセージを送ってみます(オリジナルのセッションでは HTML 形式。どちらも「フローボット」という連携方法で送ります)。

{
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "type": "AdaptiveCard",
    "version": "1.0",
    "body": [
        {
            "type": "Image",
            "url": "https://globaleventcdn.blob.core.windows.net/assets/ops/ops20/screenshots/alert.gif",
            "size": "Small",
            "spacing": "None"
        },
        {
            "type": "TextBlock",
            "text": "[AlertType]: [SeverityDescription]"
        },
        {
            "type": "TextBlock",
            "text": "Issue を見る:"
        }
    ],
    "actions": [
        {
            "type": "Action.OpenUrl",
            "title": "Incident [ID]",
            "url": "https://xxxxxxxxx.visualstudio.com/xxxxxxx/_workitems/edit/[ID]/"
        }
    ]
}

ちなみに Adaptive Cards は VS Code 用の拡張機能もあり、プレビューを見ることもできます(コマンドパレットから「Adaptive Card: Preview」)。

f:id:himanago:20200207162707p:plain

f:id:himanago:20200207162635p:plain

Logic App は以下のようになります。動的なコンテンツをいくつか埋め込みます。 f:id:himanago:20200207162044p:plain

実際の動き

Postman から JSON を飛ばすと、インシデントの「28」issue が作成され、次々に自動で行われていきます。

f:id:himanago:20200207173458g:plain

このあと、Teams でコミュニケーションをとりながらインシデント対応をしていきます。

補足

なお、当日はできませんでしたが、オリジナルではさらにオンコールなエンジニアへの DM も作っています。

さらに以下のようなステップを追加すれば、

f:id:himanago:20200207164618p:plain

このようなメッセージが飛んでくるので、安心ですね。

f:id:himanago:20200207164750p:plain