背景
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分に一回だと無料です。
アラートからいい感じに検知できるようになったら、また書きたいと思います。