Google Analytics Reporting APIでの発生したリクエスト数を確認する

Google APIには、リクエスト数の制限があります。

Google アナリティクスは数多くのサイトで使用されています。Google では、処理能力を超える負荷がシステムにかからないようにすること、システム リソースが均等に配分されるようにすることを目的に、API リクエストに制限と割り当てを設けています。この制限と割り当ては変更されることがあります。

API リクエストの制限と割り当て - Google Developers

Analytics Reporting APIもタダで使えますが、リクエスト数に制限があるので制限を超えるとエラーコードが返却されるようになります。

Google Cloud Platformのプロジェクトでは「割り当て(1 日あたりの API リクエスト数など)」というものが設定できます。 割り当ての詳細は、割り当ての操作  |  ドキュメント  |  Google Cloudを参照してください。

f:id:ponsuke_tarou:20210325143452p:plain
プロジェクト全体の割り当ては[IAMと管理]画面で確認できます
f:id:ponsuke_tarou:20210325143653p:plain
APIの割り当ては[APIとサービス]画面で確認できます

Analytics Reporting APIのリクエスト数制限

API リクエストの制限と割り当て - Google Developersと上記割り当て(割り当ては初期値のまま)ではリクエスト数の単位がバラバラしていてわかりにくかったのでそれぞれの情報を表にして集めてみました。

単位 リクエスト数上限 参照元
プロジェクト 50,000件/日 [APIとサービス]の割り当て & API リクエストの制限と割り当て
プロジェクト 1,200件/分 [APIとサービス]の割り当て
プロジェクト 2,000件/100秒 API リクエストの制限と割り当て
ユーザー 1 人につきプロジェクトごとで 100件/100秒(1,000 件まで引き上げ可能)
10件/秒
API リクエストの制限と割り当て
ユーザー 600件/分 [APIとサービス]の割り当て
ビュー 10,000件/日(引き下げ不可) API リクエストの制限と割り当て
プロジェクトごとのリクエストの失敗(プロファイルあたり) 10件/時 かつ 50件/日 Reporting API のリクエスト エラーについて - API リクエストの制限と割り当て

表を見ていて気が付いたのは「1日単位の制限」を守っても「1秒や100秒単位の制限」を守らないとエラーになってしまうということでした。特定の時間にどっとリクエストがくるとエラーになる可能性があるのですね。

Google Analytics Reporting APIでの発生したリクエスト数を確認します。

リクエスト数に制限があるので、APIを使うアプリケーションを作る場合にどのくらいリクエスト数が発生するかを確認したいと思いました。

Google APIのリクエスト数は[APIとサービス]の[ダッシュボード]で確認できます。

API ダッシュボードを使用する

API 指標を表示する最も簡単な方法は、Google Cloud Console の API ダッシュボードを使用することです。すべての API の使用状況の概要を表示することも、特定の API の使用状況を詳細に調べることもできます。

API 使用状況のモニタリング - Google Cloud

  1. Google Cloud Platformにログインする
  2. 左上メニュー > [APIとサービス] > [ダッシュボード]で画面遷移する
    • f:id:ponsuke_tarou:20210325091840p:plain
  3. f:id:ponsuke_tarou:20210325092540p:plain
    表示したい期間を選択すると各Google APIでのリクエスト数が表示される

APIのリクエスト数を[割り当て]で詳しく確認します。

[ダッシュボード]ではAPI毎の「任意期間での合計リクエスト数」を確認できましたが、使っている特定APIのリクエスト数をもっと詳しく確認したい、そのんな時のことです。 例えば、今回はGoogle Analytics Reporting APIについて詳しく見てみます。

  1. [ダッシュボード]画面一覧表から[Analytics Reporting API]リンクで画面遷移する
    • f:id:ponsuke_tarou:20210325093715p:plain
  2. 左メニュー > [割り当て]で画面遷移する
    • f:id:ponsuke_tarou:20210325093911p:plain
  3. [Requests]の右にある「v」で詳細を表示 > プルダウンで[Requests1分あたり]を選択 > 表示期間を選択
    • f:id:ponsuke_tarou:20210325094402p:plain
  4. 表示される「平均」の期間は「表示期間」によって変わるようなので細かく見る場合は注意する
    • f:id:ponsuke_tarou:20210325100705p:plain
      「表示期間」が[1時間]の場合は「10秒での平均」
    • f:id:ponsuke_tarou:20210325100917p:plain
      「表示期間」が[30日]の場合は「3時間での平均」

各ユーザーのリクエスト数を[指標]で確認します。

[割り当て]画面の下には制限数の一覧表があります。 f:id:ponsuke_tarou:20210325095635p:plain

「Requests 1 分あたり /ユーザー」という行がとても気になります。

f:id:ponsuke_tarou:20210325103604p:plain
ユーザーごとのリクエスト数をみたいところですが[割り当て]では見られないようです

そこで探し回っていると、[割り当て]と同じくAnalytics Reporting APIの[指標]をから各ユーザーのリクエスト数が確認できました。

  1. [ダッシュボード]画面一覧表から[Analytics Reporting API]リンクで画面遷移する
  2. 左メニュー > [指標]で画面遷移する
  3. [Credentials]プルダウンで見たいユーザーを選択 > [OK]ボタン > 表示期間を選択
    • f:id:ponsuke_tarou:20210325121854p:plain
  4. f:id:ponsuke_tarou:20210325122418p:plain
    グラフの下にある[メソッド]の一覧にリクエスト数が表示される

1回のAPI呼出しにリクエストを複数指定してもリクエストは1回?

Analytics Reporting APIでは、1回のAPI呼出しにリクエストを5つまで含めることができます。

リクエストは最大で 5 つ送信できます。すべてのリクエストには、同じ dateRanges、viewId、segments、samplingLevel、および cohortGroup が含まれている必要があります。

メソッド: reports.batchGet  |  アナリティクス Reporting API v4  |  Google Developers

1回のAPI呼出しにリクエストを複数指定するとカウントアップされるリクエスト回数は何回なのでしょうか?

試しに1回のAPI呼出しに5リクエストを指定してみました。

f:id:ponsuke_tarou:20210330165458p:plain
実行前の[指標]ページ

  let dateRanges = [{startDate: '2021-03-29', endDate: '2021-03-30'}]
  const res = await client.reports.batchGet({
    requestBody: {
      reportRequests: [
        {
          viewId: VIEW_ID,
          dateRanges: dateRanges,
          dimensions: [{name: 'ga:pagePath'}],
          metrics: [{expression: 'ga:pageviews'}, {expression: 'ga:avgTimeOnPage'}],
        },
        {
          viewId: VIEW_ID,
          dateRanges: dateRanges,
          dimensions: [{name: 'ga:sourceMedium'}],
          metrics: [{expression: 'ga:bounceRate'}, {expression: 'ga:avgTimeOnPage'}],
        },
        {
          viewId: VIEW_ID,
          dateRanges: dateRanges,
          dimensions: [{name: 'ga:source'}],
          metrics: [{expression: 'ga:pageviews'}],
        },
        {
          viewId: VIEW_ID,
          dateRanges: dateRanges,
          dimensions: [{name: 'ga:browser'}],
          metrics: [{expression: 'ga:pageviews'}],
        },
        {
          viewId: VIEW_ID,
          dateRanges: dateRanges,
          dimensions: [{name: 'ga:country'}],
          metrics: [{expression: 'ga:pageviews'}],
        }
      ]
    }
  })

なんと1件しかカウントアップされませんでした。同じ期間などを条件にするのであればまとめてAPI呼出ししたほうがお得なのかもしれません。

f:id:ponsuke_tarou:20210330170215p:plain
実行後の[指標]ページ

とはいえGoogleのドキュメントにある以下の記載は気になるところです。

★注: バッチ処理で複数の Reporting API リクエストを 1 回のリクエストにまとめても、定められた割り当て量を超えるリクエストを実行することはできません。

Reporting API | API リクエストの制限と割り当て - Google Developers

バッチ処理」のリンク先がGoogle アナリティクス Management APIのGoogle アナリティクス API リクエストのバッチ処理になっているのでManagement APIを使った時のことなのかもしれませんが、実装の時には気をつけるポイントになりそうです。(Google アナリティクス Management APIを知らないのですが・・・)