fbpx
HOW TO TD(User Engagement)Treasure Data User Engagement

td-js-sdkでのデータ収集状況モニタリング

ホーム » td-js-sdkでのデータ収集状況モニタリング

カスタマーオンボーディングチームの塚原 一喜です。
本日は、td-js-sdkでのデータ収集状況モニタリングの重要性について説明します。

td-js-sdkで送信していたはずのデータが送信されていない

そんな経験をお持ちのTreasure Data CDPご担当者様もいらっしゃるのではないでしょうか。

  1. サイトリニューアルでうまくタグが動かなくなった
  2. タグマネーシャーの管理を複数人で行っていて、誤って停止してしまった
  3. 他のタグと干渉してうまく送信ができなくなってしまった

など、さまざまな理由で送信していたはずのデータが送信されなくなってしまうという状況は、発生する可能性があります。Javascriptのブラウザエラーなどを毎日モニタリングする体制が整っていれば、突発的なエラーに気づく社内体制も構築できると思いますが、できれば機械的にモニタリングしたいと思います。

そこで、日次実行のWorkflowで、3ヶ月の日次PV平均から閾値を設定し、アラート対象以下になったらメールやSlackで通知をする、などの仕組みを構築しておくことで、「データ送信に何か不具合が発生したかもしれない」、ということにタイムリーに気が付く体制を構築することができます。

機械学習のロジックにWebログが使われている、定期アクセスに対してロイヤリティプログラムを組んでいる、などの分析実行をしている場合、データ送信ができていない状況に1ヶ月気がつかなかった場合などは、施策にも影響が出ると思いますので、準備をしておくことは重要だと思っております。

Workflowサンプル

ベーシックな記述になりますので、お客様ごとにカスタマイズは必要になると思いますが、サンプルを公開します。(本サンプルは「前日のPVが、過去3ヶ月平均PVの1/3以下だった場合通知する」Workflowサンプルです)

https://github.com/tsukaharakazuki/td/tree/master/monitoring_collect_weblog

WITH avg AS (
  SELECT
    AVG(pv) AS pv_avg , --平均PVの1/3
    AVG(pv) / 3 AS avg_onetherd , --平均PVの1/3
    'a' AS dum
  FROM (
    SELECT
      TD_TIME_FORMAT(time, 'yyyy-MM-dd', 'JST') AS day ,
      COUNT(*) AS pv
    FROM
      ${brand.log_db}.${brand.log_tbl}
    WHERE
      TD_INTERVAL(time, '-3M/now', 'JST')
    GROUP BY
      1
    )
)

, yesterday AS (
  SELECT
    TD_TIME_FORMAT(time, 'yyyy-MM-dd', 'JST') AS check_date ,
    COUNT(*) AS pv_yesterday , 
    'a' AS dum
  FROM
    ${brand.log_db}.${brand.log_tbl}
  WHERE
    TD_INTERVAL(time, '-1d', 'JST')
  GROUP BY  1
)


SELECT
  b.check_date ,
  a.pv_avg ,
  a.avg_onetherd ,
  b.pv_yesterday ,
  CASE
    WHEN a.avg_onetherd > b.pv_yesterday THEN 'true'
    WHEN a.avg_onetherd <= b.pv_yesterday THEN 'false'
  END flag ,
  '${brand.brand_name}' AS brand_name
FROM
  avg a
INNER JOIN
  yesterday b
ON
  a.dum = b.dum

上記のSQLで、前日のPV数と平均を比較して、アラート対象の場合だけ通知をする制御を実行しています。

config/params.yml
で、モニタリングする対象のDatabase名/Table名を指定すると、複数サイトのモニタリングが一括処理で実行されます。

---
brand:
- brand_name: branda
  log_db: branda_db
  log_tbl: pageviews
- brand_name: brandab
  log_db: brandab_db
  log_tbl: pageviews

サンプルWorkflowでは、Slackに送信設定を行っています。

+for_each_slack:
  td_for_each>: queries/p1000_log_store.sql
  _do:
    +send_slack:
      if>: ${td.each.flag}
      _do:
        http>: https://hooks.slack.com/services/xxxxx/yyyyy/zzzzzzzzzzzzzz
        method: POST
        content:
          username: "Log alert bot"
          icon_emoji: ':fireball:'
          channel: "#general"
          fields:
          - title: ブランド名
            value: "${td.each.brand_name}"
            short: false
          - title: 計測日
            value: "${td.each.check_date}"
            short: false
          - title: PV
            value: "${td.each.pv_yesterday}"
            short: true
          - title: 3ヶ月平均PV
            value: "${td.each.pv_avg}"
            short: true
          - title: session_time
            value: "${session_time}"
            short: false
          content_format: json

Webhook URL、チャネル名を変更いただくと、送信したいSlackアカウントの該当チャネルにデータを送信していきます。メール、チャットワークなど、他のプラットフォームへの送信も可能です。

導入をご検討の際は、担当カスタマーサクセスまでお問い合わせください。

塚原 一喜

Customer Onboardingチーム

マーケティング・広告領域の専門出版社で、広告営業、イベント企画、Webメディアの広告商品開発に従事。広告主企業・テクノロジー企業・メディア企業・制作会社等、幅広いクライアントを担当。2017年トレジャーデータに入社し、カスタマーサクセスとしてメディア企業をメインに担当。メディア企業におけるデータ分析手法提案や、データを活用した広告商品設計などサポート。

Ex.大学時代は早稲田大学ラグビー蹴球部に所属し、大学選手権優勝。ポジションはフッカー。

得意領域 : メディア企業におけるデータ活用サポート、Workflow、DataStudio

Back to top button