3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

乱立するGoogleスプレッドシートから逃げるように、Mackerelのサービスメトリクスに投稿して監視してみた

Last updated at Posted at 2018-04-04

みんな大好きGoogleスプレッドシート

みなさん、Googleスプレッドシートは好きですか?

私たち「あなたのマイスター」では無事、大量のGoogleスプレッドシートが増産されています!w

マスタ系のデータやテストケースとかは関係ないのですが、KPI系の数値はグラフで見たいってこともよくあって、スプレッドシートのグラフを活用しています。

しかし、定期的に入れ替わる測定項目や、大元のシートに変更があったりして混乱が起きることが・・・

はい、日常ですよね。

あなたのマイスター」ではシステムのモニタリングをMackerelで行なっています。

毎日そこは目に触れてるので、サービスのKPIトラッキングも併せて表示すれば、エンジニアたちが頻度高く見てくれるようになる! と少し心踊り、少しずつMackerelに寄せていきたいと思うようになりました。

そして、そんなGoogleスプレッドシートとめちゃくちゃ相性がいいのが、GAS(Google Apps Script)です。

以下にGASを使って、Mackerelのサービスメトリクスにデータを連携する方法を紹介します。

無題のプレゼンテーション_-_Google_スライド-2.png

Mackerelの設定を確認する

  1. オーガニゼーションページを表示する
    https://mackerel.io/orgs/{オーガニゼーション名}

  2. APIキーのタブを選択する
    yourmystar_·_yourmystar.png

  3. APIキーをコピーしておく

スプレッドシートを準備する

  1. スプレッドシートを新規作成
    もちろん、もともと存在するスプレッドシートでも構いません。
    例えば以下のようなスプレッドシートを準備したとします。
a b c
1 10 100
2 20 200
3 30 300
4 40 400
5 50 500
6 60 600
7 70 700
  1. シート名をコピーしておく(あとで使う)
    ここでは watashi-no-sheet というシート名だったと仮定します。

Google Apps Scriptを書く

  1. スプレッドシートの ツール > スクリプトエディタ を開く
    自動でエディタが開きます。
    無題のプロジェクト_と_Viber__818044151622.png

  2. コードを書く
    下記がサンプルコードです。外部APIにPOSTするところは相手がMackerelじゃなくても応用がきくと思います。例えば、SlackのIncoming WebhookとかにPOSTすれば通知なんかもできると思います。

code.js
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を実行する

  1. 実行 > 関数を実行 > main を選択する
  2. Mackerelのサービスメトリクス表示画面を見ると、すぐにグラフが現れて数字を見ることができます。

sandbox_·_yourmystar-2.png

Google Apps Scriptのトリガーを設定する

  1. トリガーのボタンを選択する
    Qiita投稿選手権-2.png

  2. 何分ごとに動かすか設定する
    Qiita投稿選手権.png

以上で完了です。

あとは、スプレッドシートに好きな数字を入れておいて、GASの定期実行でMackerelのモニタリングが可能になります。

参考

なんの苦労もなく、いろんなサービスを連携できるようになったので、本当に便利な世の中になったなあ。
個人的に初めて使うサービスだったので、そこに至った方法を丁寧に残しておきました。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?