Azure Function에서 WebAPI를 정기적으로 모니터링하고 이상을 Slack에 알립니다.
17613 단어 AzureAzureFunctions
Timer Triger는 현 단계에서는 C#, F#, JavaScript 밖에 대응하고 있지 않기 때문에, 이번은 JavaScript로 실시한다.
알림 대상 SLACK의 Web Hook URL 가져 오기
Azure Function 설정
Schedule에 실행 일시를 입력.
6시간마다 0분 0초에 실행의 경우, 「0 0 */6 * * *」라고 입력.
request 모듈 설치
초기 상태에서는 request 모듈을 사용할 수 없으므로 설치한다.
https://[function-name].scm.azurewebsites.net/DebugConsole
에서 디버그 콘솔을 엽니다. ([function-name]에 내 함수 앱 이름 입력)
cd로 D:\home\site\wwwroot[함수명]으로 이동한다.
D:\home>cd site\wwwroot\TimerTriggerJS1
D:\home\site\wwwroot\TimerTriggerJS1>
request 모듈 설치
D:\home\site\wwwroot\TimerTriggerJS1>npm init
D:\home\site\wwwroot\TimerTriggerJS1>npm install --save request
테스트 실행 및 저장
다음을 입력하고 "저장 및 실행"을 누르면 테스트가 실행됩니다.
동작에 문제가 없으면 「저장」을 누르는 것으로 Schedule에서 지정한 시간에 실행된다.
module.exports = function (context, myTimer) {
var SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/〇/△/□"; // ↑でコピーした通知先SLACKのWebhook URL
var API_URL = "http://〇.〇.〇.〇/api/hoge"; // 死活チェックするWebAPIのURL
var data = "";
var channel = "channel_name"; // 通知先のSLACKチャンネル名
var request = require('request');
var http = require('http');
var options = {
url: API_URL
,method: 'GET'
,json: true
};
var payload = {};
payload.username = "hoge_bot"; //slackに表示される名前
payload.icon_emoji = ":anger:" // アイコン
payload.channel = channel;
http.get(API_URL, (res) => {
const { statusCode } = res;
const contentType = res.headers['content-type'];
context.log(statusCode);
let error;
if (statusCode !== 200) {
data = "Failure accessing " + API_URL + ", Status Code : " + statusCode;
} else if (!/^application\/json/.test(contentType)) {
error = new Error('Invalid content-type.\n' +
`Expected application/json but received ${contentType}`);
}
if (error) {
data = "API_URLにアクセスに失敗した。" + ", " + String(error);
}
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
try {
const parsedData = JSON.parse(rawData);
if ("<返されるJSONデータに含まれるキー>" in parsedData) {
articles = parsedData.articles;
} else {
data = "パースした結果にキーが含まれていなかった。" + String(rawData);
}
} catch (e) {
context.error(e.message);
data = "パース自体に失敗した" + String(rawData);
}
payload.text = data;
var options = {
url: SLACK_WEBHOOK_URL
,method: 'POST'
,headers: 'Content-type: application/json'
,json: payload
};
request.post(options, function (error, response, body) {
context.log("Response Code : "+response.statusCode);
})
context.done();
});
}).on('error', (e) => {
data = API_URL + "へアクセスできませんでした。ERROR : " + + String(e);
payload.text = data;
var options = {
url: SLACK_WEBHOOK_URL
,method: 'POST'
,headers: 'Content-type: application/json'
,json: payload
};
request.post(options, function (error, response, body) {
context.log("Response Code : "+response.statusCode);
})
context.done();
});
};
동작
수수료
6시간에 1회 실행으로 0.32엔/1일≒10엔/30일 정도
Reference
이 문제에 관하여(Azure Function에서 WebAPI를 정기적으로 모니터링하고 이상을 Slack에 알립니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/popondeli/items/dcd9d7b0789bd95bc216텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)