みんな大好きGoogleスプレッドシート
みなさん、Googleスプレッドシートは好きですか?
私たち「あなたのマイスター」では無事、大量のGoogleスプレッドシートが増産されています!w
マスタ系のデータやテストケースとかは関係ないのですが、KPI系の数値はグラフで見たいってこともよくあって、スプレッドシートのグラフを活用しています。
しかし、定期的に入れ替わる測定項目や、大元のシートに変更があったりして混乱が起きることが・・・
はい、日常ですよね。
「あなたのマイスター」ではシステムのモニタリングをMackerelで行なっています。
毎日そこは目に触れてるので、サービスのKPIトラッキングも併せて表示すれば、エンジニアたちが頻度高く見てくれるようになる! と少し心踊り、少しずつMackerelに寄せていきたいと思うようになりました。
そして、そんなGoogleスプレッドシートとめちゃくちゃ相性がいいのが、GAS(Google Apps Script)です。
以下にGASを使って、Mackerelのサービスメトリクスにデータを連携する方法を紹介します。
Mackerelの設定を確認する
スプレッドシートを準備する
- スプレッドシートを新規作成
もちろん、もともと存在するスプレッドシートでも構いません。
例えば以下のようなスプレッドシートを準備したとします。
a | b | c |
---|---|---|
1 | 10 | 100 |
2 | 20 | 200 |
3 | 30 | 300 |
4 | 40 | 400 |
5 | 50 | 500 |
6 | 60 | 600 |
7 | 70 | 700 |
- シート名をコピーしておく(あとで使う)
ここではwatashi-no-sheet
というシート名だったと仮定します。
Google Apps Scriptを書く
-
コードを書く
下記がサンプルコードです。外部APIにPOSTするところは相手がMackerelじゃなくても応用がきくと思います。例えば、SlackのIncoming WebhookとかにPOSTすれば通知なんかもできると思います。
var epoch = Date.now() / 1000; // Mackerel投稿用タイムスタンプ
var mackerelApiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // MackerelのAPIキー
var mackerelServiceName = "sandbox"; // サービスメトリクスを投稿したいMackerelのサービスネーム
var sheetName = "watashi-no-sheet"; // スプレッドシートのシート名
function main() {
var ss =SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheetByName(sheetName)
SpreadsheetApp.setActiveSheet(sheet);
// ここは自分の取りたいセルを選べるように、いろんな書き方があると思います
var row = sheet.getLastRow(); // 最終行を取得
var a = sheet.getRange(row, 1).getValue(); // 最終行の1列目(先ほどの例の7)
var b = sheet.getRange(row, 2).getValue(); // 最終行の2列目(先ほどの例の70)
var c = sheet.getRange(row, 3).getValue(); // 最終行の3列目(先ほどの例の700)
var payload = [
{"name" : "testmetrics.a", "time" : epoch, "value" : a},
{"name" : "testmetrics.b", "time" : epoch, "value" : b},
{"name" : "testmetrics.c", "time" : epoch, "value" : c}
];
var response = post(mackerelApiKey, mackerelServiceName, payload);
}
function post(apiKey, mackerelServiceName, payload) {
var headers = {
"X-Api-Key" : apiKey
};
var options = {
'contentType' : 'application/json',
'method': 'POST',
'headers': headers,
'payload': JSON.stringify(payload),
'muteHttpExceptions' : true
};
var response = UrlFetchApp.fetch('https://api.mackerelio.com/api/v0/services/'+ mackerelServiceName + '/tsdb', options);
var json = response.getContentText();
var data = JSON.parse(json);
return data;
}
Google Apps Scriptを実行する
- 実行 > 関数を実行 > main を選択する
- Mackerelのサービスメトリクス表示画面を見ると、すぐにグラフが現れて数字を見ることができます。
Google Apps Scriptのトリガーを設定する
以上で完了です。
あとは、スプレッドシートに好きな数字を入れておいて、GASの定期実行でMackerelのモニタリングが可能になります。
参考
なんの苦労もなく、いろんなサービスを連携できるようになったので、本当に便利な世の中になったなあ。
個人的に初めて使うサービスだったので、そこに至った方法を丁寧に残しておきました。