Heroku, Rails, BigQueryを使って日付毎にログを保存して、APIエンドポイント毎のコール数を知りたい

なぜ?

WEBページのPVやAUGoogle Analyticsを見ればわかるが、ページによってはタブの遷移などでURLが割り振られていない動作があり、それはAPIコールの回数を解析することでしか知ることができない。そして解析はSQLを使っていい感じにやりたい。

やりかた : サーバ

参考にさせていただいた以下の記事通りにやればほとんど出来るが一部変更点がある。

qiita.com

変更点

  1. $ heroku drains:add https://my-fluentd-app.herokuapp.com/log -a myapp$ heroku drains:add https://my-fluentd-app.herokuapp.com/access_log -a myapp

  2. td-agent.confの一部を以下のように変更した。(pathにクエリパラメータを含めないようにし、テーブル名を変えた)

format /\<.*\>\d (?<strtime>.+)\..* method=(?<method>.+) path=((?<path>[^\?]+)(\?.*)?) host=(?<host>.+) request_id=(?<request_id>.+) fwd=(?<fwd>.+) dyno=(?<dyno>.+) connect=(?<connect>.+) service=(?<service>.+) status=(?<status>.+) bytes=(?<bytes>.+) protocol=https$/

table api_call_%{time_slice}

field_string strtime,path,host,status,method,client,fwd,service,bytes,request_id,dyno,connect

やりかた:BigQuery

SELECT
  path,
  COUNT(*) AS count
FROM
  `hogehoge.fugafuga.api_call_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20191001' AND '20191031'
GROUP BY
  path
LIMIT
  1000

itkr.net