minato128 blog

minato128の公開メモ帳です。

logentries の Alert を Azure Functions で加工してから Slack に送ってみる

そもそも logentries は標準で Slack 通知をサポートしているのですが、raw log (JSONとか) がそのまま通知されるだけなので、アラートがきていることはわかっても何が起きたのかよくわからないということがあります。 そこで Azure Functions で logetries Alert Webhook を受け取って、少し加工してから Slack に通知してみました。 こういったちょっとしたものは AWS API Gateway + Lambda で作るより Azure Functions のほうが楽でいいですね。

まず、ここで飛んでくる JSON の仕様を確認して、普通に Azure Functions を作成して動作確認してみたのですが動きませんでした。

docs.logentries.com

The content type of the message is encoded in application/x-www-form-urlencoded.

よくみたら、Content Type が application/json ではないですね。 手動で POST してみたら確かに 415 が帰ってきて Azure Functions が起動するところまで到達しませんでした。

gyazo.com

function.json の webHookType で選べる値に適切なものが見つからなかったのでぐぐったら項目ごと消せばよいとのこと。その通りにしたら確かに動きました。ちなみに値を空にしても動きました。 設定がなかったら、Content Type をチェックしない仕様なんですね。

{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "webHookType": ""
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ],
  "disabled": false
}
#r "System.Web"
#r "Newtonsoft.Json"

using System;
using System.Web;
using System.Net;
using System.Configuration;
using System.Threading.Tasks; 
using Newtonsoft.Json;


public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info($"Webhook was triggered!");
    var formData = await req.Content.ReadAsStringAsync();
    var list = HttpUtility.ParseQueryString (formData);
    var payload = list["payload"];
    log.Info(payload);

    dynamic data = JsonConvert.DeserializeObject(payload);

    // edit data

       
    // post slack


    return req.CreateResponse(HttpStatusCode.OK, new {
    });
}

アブラサスの小さい財布が便利

長財布をカバンに入れて生活していたけど、カバンに入っているものは財布しか必要ないケースが多いので、財布と定期入れとキーケースを兼ね備えたものを買って、それと携帯だけあればカバンなしでどこにでもいける状態を目指していろいろ検討した結果、小さい財布(商品名)を買った。

  • お札が曲がらない
  • コインがそれなりに入る
  • 鍵がつけられる
  • 小さいので前ポケットにずっと入れていられる
  • カードも5枚入れられて、そのまま改札も通れる

などのメリットがあり、創業者のプロダクトデザインの話がおもしろかったのも決め手となった。

「薄い財布」と「小さい財布」を比較。こんなライフスタイルには「◯◯い財布」 | SUPERCLASSIC