share facebook facebook2 twitter menu hatena pocket slack

2015.07.01 WED

【cloudpack 大阪 BLOG】MSPのシステム化について Google Apps ScriptからPagerDutyに通知する

比企 宏之

WRITTEN BY比企 宏之

現在cloudpackではPagerDutyを試験的に導入していってます。
PagerDutyとは何ぞや?と言う方への説明や導入方法を記載すべきところですが
それはおいおいしていくとして(置いといてよいのかw)、
今回は「Google Apps ScriptからPagerDutyに通知する」を試します。
※ほとんど備忘録です

まずは通知先のPagerDuty側の設定を行います。下記画面で設定します。

20150603161550そして設定した画面のService API Keyの情報をメモします。

20150603161742でGASのプログラミング部分は下記になります

function sendToPagerDuty(service_key) {
    var url = "https://events.pagerduty.com/generic/2010-04-15/create_event.json";
    var data = {
        "service_key": service_key,
        "event_type": "trigger",
        "description": "FAILURE for production/HTTP on machine srv01.acme.com",
        "client": "Sample Monitoring Service",
        "client_url": "https://monitoring.service.com",
        "details": {
            "ping time": "1500ms",
            "load avg": 0.75
        },
        "contexts":[ 
            {
                "type": "link",
                "href": "http://acme.pagerduty.com",
                "text": "View the incident on PagerDuty"
            },{
                "type": "image",
                "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1"
            }
        ]
    };
    var payload = JSON.stringify(data);
    var headers = {"Accept":"application/json", 
        "Content-Type":"application/json", 
        "Authorization":"Basic _authcode_"
    };
    var options = { "method" : "POST",
        "contentType" : "application/json",
        "headers" : headers,
        "payload" : payload
    };
    try {
        var response = UrlFetchApp.fetch(url, options); 
        var json = JSON.parse(response.getContentText());
        Logger.log("status:" + json.status + " message:" + json.message + " incident_key:" + json.incident_key);
    } catch(e){
        var error = e;
        Logger.log("message:" + error.message + "fileName:" + error.fileName + "nlineNumber:" + error.lineNumber + "nstack:" + error.stack);
    }
}

※サンプルコードをそのままGASに移植していますので内容が気になる方は
PagerDuty Developer
を参考にしてください。

上記を実行すると

20150603163144のような画面がPagerDutyの画面にインシデントとして表示されます。
Google Apps Scriptから”インシデントとしての”の登録はまず無いとは思いますが
PagerDutyのインシデント管理機能とエスカレーション機能を使って
作業をその日の当番の方に明示的に通知とかも出来るので、
計画作業(Googleカレンダーに登録されている作業)や日次・週次的な作業の通知&
状態管理なんかに使いたいと思っています(今までHubotに任せていた状態管理部分をPagerDutyへ)。

基本的な使い方ではなく、いきなり応用編になってしまいましたが、PagerDutyは
スケジュール作成の部分に癖?(シンプルすぎるので一手間必要でここをどう対応したかはまた今度)もありますが、試す分には非常に簡単ですので試してみてください。

元記事はこちら

【cloudpack 大阪 BLOG】MSPのシステム化について Google Apps ScriptからPagerDutyに通知する

比企 宏之

比企 宏之

The latest Tweets from Universal Ocellaris (@UniOce). そろそろ自身が得意とするエリア(IoT)に世の中が近づいてきて虎視眈々と決起のタイミングを狙っている開発では無敗の元モバイル端末開発&WEBアプリ開発者で、今はクラウド業界にダイブして、cloudpackのMSPのリーダーの一人