LoginSignup
3
2

More than 5 years have passed since last update.

Azure Functionsでエラー検知してChatworkにメッセージを送る

Last updated at Posted at 2017-02-28

背景

Azureにはアラートという機能があって、エラー検知してWebhookでリクエストが送れる。

でも、その検知するエラーの内容がイマイチわからないし、

検知したいのは、Azureのストレージに載せたアプリのログで、
それはテーブルストレージに格納されるので、
エラーログのレコードが追加されたらその内容を知りたい。

ということで、パーフェクトな感じではないけど、Azure Functionsのタイマーで、
エラー検知したら、チャットワークに投げようと思います。

方法

1. Azure Functions でTimerTrigger-JavaScriptを選択し、1分間隔で実行
2. kuduでパッケージをインストール

npm init -y
npm install request underscore --save

3. 統合タブの入力で、取得するテーブルストレージのテーブルを選択
4. 関数に下記の処理を書く

var counter = 0;
var error_counter = 0;
var _ = require('underscore');

module.exports = function (context, myTimer) {
    if (counter != context.bindings.RbTraceLog.length) {
        var i = 0;
        var info = _.where(context.bindings.RbTraceLog, { Category: 'error' });
        var len = info.length - error_counter;
        for (; i < len ; i++) {
            setTimeout(function(i) {
                postChat(info[info.length - i - 1], context);
            }, 1000 * i, i);
        }
        error_counter = info.length;
    }

    counter = context.bindings.RbTraceLog.length;

    context.done();
};

function postChat(body, context) {
    var request = require('request');
    var end_point = 'https://api.chatwork.com/v2/rooms/るーむID/messages';
    var header = {'X-ChatWorkToken': 'トークン'};
    var options = {
        url: end_point,
        headers: header,
        form: {"body": JSON.stringify(body)}
    };

    request.post(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            context.log('success: '+ response.statusCode);
        } else {
            context.log('error: '+ response.statusCode);
        }
    });
}

まとめ

ちなみにFunctionsは100万回/月が無料なので、1分に一回だと無料です。

アラートからいい感じに検知できるようになったら、また書きたいと思います。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2