10
8

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.

GoogleAnalyticsのリアルタイムユーザーがある一定数を下回ったらSlackにアラートを飛ばしてみる

Last updated at Posted at 2017-06-27

コードを修正しました。最下部の更新履歴を確認してください。


15分毎にGoogleAnalyticsのリアルタイムユーザーを取得して、
リアルタイムユーザーがある一定数を下回っていた場合にSlackに通知してみます。

https://gyazo.com/08f1c337dd0e3a3bc5aedd5e42b23926

ユーザー数は隠していますが、通知はこんな感じです。

当初はGoogleのAPIを利用して実現しようかなと思っていたのですが、
Google Apps Scriptを利用すれば簡単に、しかも楽に実装できました。

スプレッドシートのツール>スクリプトエディタからGoogle Apps Scriptを起動します。

https://gyazo.com/fe78817751aaf6fc16e085834c25ec6b

Google Apps Scriptを起動するとエディタが表示されるので、このエディタ上でコーディングしていきます。

https://gyazo.com/4daf63db343563c0adf1ceb38b7f928a

任意のタイトルを設定した後で、リソース>Googleの拡張機能からAnalyticsを有効にします。

https://gyazo.com/86d46be6cbbea69fbe4949dbc7ede063

https://gyazo.com/5a9cef9b14af0b2f388ac3777a8d5d55

これらのサービスを Google API コンソールでも有効にする必要があります。

と注意書きがあるように上記の「Google API コンソール」のリンク先でも有効にしてください。
これで準備が整ったので、まず以下のコードを貼り付けます。

function execute() {
  var realTimeUserNumber = getRealTimeUserNumber()

  if (invalidRealTimeUserNumber(realTimeUserNumber))
    return

  slack('現在のユーザー数: ' + realTimeUserNumber);
}

function invalidRealTimeUserNumber(realTimeUserNumber) {
  const MINIMUM_USER_NUM_EACH_HOUR = {
     0: x,
     1: x,
     2: x,
     3: x,
     4: x,
     5: x,
     6: x,
     7: x,
     8: x,
     9: x,
    10: x,
    11: x,
    12: x,
    13: x,
    14: x,
    15: x,
    16: x,
    17: x,
    18: x,
    19: x,
    20: x,
    21: x,
    22: x,
    23: x,
    24: x
  };

  const RATIO = 0.7
  const CURRENT_HOUR = Utilities.formatDate(new Date(), "JST", "HH");  
    
  for(var hour in MINIMUM_USER_NUM_EACH_HOUR)
    if (hour == CURRENT_HOUR)
      Logger.log(MINIMUM_USER_NUM_EACH_HOUR[hour] * RATIO);
      return realTimeUserNumber > (MINIMUM_USER_NUM_EACH_HOUR[hour] * RATIO)

  slack('バグってます。 CURRENT_HOUR: ' + CURRENT_HOUR + ' realTimeUserNumber: ' + realTimeUserNumber + ' RATIO: ' + RATIO)
  return false;
}

function getRealTimeUserNumber() {
    return Analytics.Data.Realtime.get('ga:xxxxxx', 'rt:activeUsers').getRows();    
}

function slack(message) {
    const WebhookUrl = 'https://hooks.slack.com/services/hoge/piyo/fuga'

    var payload = {
      text: message,
      link_names: 1
    };

    UrlFetchApp.fetch(WebhookUrl, {
      method: "POST",
      payload: JSON.stringify(payload)
    });
}

個別に修正が必要な3箇所について解説していきます。

Analytics.Data.Realtime.get('ga:xxxxxx', 'rt:activeUsers').getRows();

ga:xxxxx にはGoogleAnalyticsのビューIDをセットします。
ビューIDはAnalyticsで確認できます。

https://gyazo.com/f557d1552eb9ca96f0d421f394cc7421

const MINIMUM_USER_NUM_EACH_HOUR = { ...x にユーザー数を入れてください。
invalidRealTimeUserNumberrealTimeUserNumber > (MINIMUM_USER_NUM_EACH_HOUR[hour] * RATIO) のようにしているので、 x に入れたユーザー数より3割少ないとslackに通知するようになっています。

const WebhookUrl = 'https://hooks.slack.com/services/hoge/piyo/fuga' の右辺は通知するSlackのwebhookのURLに変更します。
https://team-name.slack.com/apps でIncoming WebHooksを検索して、Add Configurationをクリックすると、どのチャンネルにintegrationsするか聞かれるのでチャンネルを選択すればwebhookのURLが発行されます。

https://gyazo.com/3aadaa8779b0427035c807404e1c4e63

最後に15分毎にこのスクリプトが実行されるように設定します。

https://gyazo.com/9b58de8cfdc81ab33d4c3bb57fef8502

参考にしたURL

http://blog.admage.jp/?p=1353
https://www.tam-tam.co.jp/tipsnote/javascript/post8499.html
https://api.slack.com/apps/A5VKERT4P/incoming-webhooks
http://www.devlog.atlas.jp/2016/11/18/1364
https://memordm.com/gas-log/

元記事

GoogleAnalyticsのリアルタイムユーザーがある一定数を下回ったらSlackにアラートを飛ばしてみる

更新履歴

以下の対応をしたのでコードを更新しました。

  • リアルタイムユーザーがある一定数を下回っていないのに通知が飛んでしまう不具合を修正
  • 通知する条件(リアルタイムユーザー数 < ユーザー数閾値)のユーザー数閾値を通知内容に含める

また、コードの履歴管理が面倒なのでgistにしました。

10
8
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
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?