thumbnail

Google Analyticsのリアルタイムレポートを利用してアクセス急増を監視

Google Analyticsのリアルタイムレポート機能とGoogle Apps Scriptを使用して簡単に簡易サーバ監視を作成できたのでその手順を記録しておきます。

機能



  1. 15分おきにリアルタイムのユーザー数を取得

  2. 設定してある閾値よりも大きい場合にslackへ通知


手順


Slackに通知用のチャネルを追加


例:#alert

Slackに着信Webフックアプリを追加する



  1. 「incomming web hook」で検索して着信Webフックを選択

  2. 「設定を追加」を押下

  3. 追加した通知用チャネルを選択した状態で追加ボタンを押下


Webhook URLを使用します。


Google Apps Scriptにプログラムを記述




  1. 適当にプロジェクトを作成します。

  2. プロパティを設定します。

    1. 「ファイル」→「プロジェクトのプロパティ」を選択します。

    2. スクリプトのプロパティに設定を追加します。



























      プロパティ
      IDGoogle AnalyticsのビューID



      (例:123456789)
      THRESHOLD閾値(例:50)
      COLOR色(例:#D00)
      TITLE_LINKタイトルリンク

      (google analyticsのリンクを指定しておくと便利)
      URL上で取得したWebhook URL


    3. 保存を押下



  3. 以下のプログラムを追加します。
    function run() {
    notify(getUserNumber());
    }

    function getUserNumber() {
    var ID = PropertiesService.getScriptProperties().getProperty("ID");
    var rows = Analytics.Data.Realtime.get('ga:' + ID, 'rt:activeUsers').getRows();
    if (rows === undefined) return 0;
    return rows[0][0];
    }

    function notify(number) {
    var THRESHOLD = PropertiesService.getScriptProperties().getProperty("THRESHOLD");
    if (number > THRESHOLD) {
    slack(getTitle(number, THRESHOLD), getMessage(number, THRESHOLD));
    }
    }

    function getTitle(number, threshold) {
    return "リアルタイムユーザー数が閾値を超えています";
    }

    function getMessage(number, threshold) {
    return "ユーザー数:" + number + "\n閾値:" + threshold;
    }

    function createPayload(title, message) {
    var COLOR = PropertiesService.getScriptProperties().getProperty("COLOR");
    var TITLE_LINK = PropertiesService.getScriptProperties().getProperty("TITLE_LINK");
    return JSON.stringify({
    attachments: [{
    fallback: title,
    pretext: title,
    color: COLOR,
    title: "アクセスアラート",
    title_link: TITLE_LINK,
    text: message
    }]
    });
    }

    function slack(payload) {
    var URL = PropertiesService.getScriptProperties().getProperty("URL");
    UrlFetchApp.fetch(URL, {
    method: "POST",
    payload: createPayload(title, message)
    });
    }


  4. トリガーを設定します。

    1. 設定ボタンを押下

    2. 15分ごとのトリガーを設定

    3. 保存を押下




動作


これまでの手順で設定は終わりです。

15分ごとのチェック時にリアルタイムユーザー数が閾値を超えていると以下のようなメッセージがslackに届くはずです。


まとめ


今回は閾値を超えた場合に通知を送る設定にしましたが、逆に少なすぎる場合も設定することも簡単にできそうです。

外部サーバやサービスを用意するのが面倒な場合はこれで十分だと思います。

Makefile で 動的にコマンドを変える方法
next article
arrow