雑なA型によるクラウドとモバイルと運営と

大阪でJAWS-UG OSAKAとInnovation EGGを運営している人のBLOGです。時々更新します〜

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

 

現在cloudpackではPagerDutyを試験的に導入していってます。

PagerDutyとは何ぞや?と言う方への説明や導入方法を記載すべきところですが

それはおいおいしていくとして(置いといてよいのかw)、

今回は「Google Apps ScriptからPagerDutyに通知する」を試します。

※ほとんど備忘録です

 

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

f:id:unioce:20150603161550p:plain

 

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

f:id:unioce:20150603161742p:plain

 

で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

を参考にしてください。

 

上記を実行すると

f:id:unioce:20150603163144p:plain

のような画面がPDの画面にインシデントとして表示されます。

Google Apps Scriptから”インシデントとしての”の登録はまず無いとは思いますが

PDのインシデント管理機能とエスカレーション機能を使って

作業をその日の当番の方に明示的に通知とかも出来るので、

計画作業(Googleカレンダーに登録されている作業)や日次・週次的な作業の通知&

状態管理なんかに使いたいと思っています(今までHubotに任せていた状態管理部分をPDへ)。

 

基本的な使い方ではなく、いきなり応用編になってしまいましたが、PagerDutyは

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