Help us understand the problem. What is going on with this article?

Fastly のサービスごとの配信容量を確認する

More than 1 year has passed since last update.

はじめに

Fastly のコントロールパネルでは、サービス単位、またはアカウント全体のリクエスト数や配信トラフィックの推移、キャッシュヒット率、エラー率、オリジンレイテンシーなど配信に関する様々な情報をグラフとして表示することが出来ます。

また、課金対象のトラフィックの情報を確認することも可能なのですが、こちらはアカウント配下のすべてのトラフィックが合算された形で表示されます。

場合によっては各サービスごとの課金対象となる配信容量を確認したい場合もあると思いますので、この記事では API を使って各サービスごとの配信容量を取得する手順を説明したいと思います。

API Keyの取得

API で情報を取得するためには、API Token が必要となります。API Token とはログインユーザーごとに管理される認証情報で、API を利用して Fastly のリソースにアクセスする際に必要となります。

API Token は、Fastly のコントロールパネルにアクセスして右上のメールアドレスをクリックすると表示されるメニューからAccountをクリックします。
Fastly.jpg

Company Setting ページが表示されるので、左側のメニューから Personal API Tokens をクリックし、Create Token をクリックすることで作成出来ます。

Fastly__Account.jpg

手順の詳細については英文になってしまうのですが、Using API tokens をご確認下さい。

Stats API へのアクセス

それでは取得したAPI Key を利用して、API経由で情報を取得してみます。月ごとの配信容量を取得する /stats/usage_by_month というAPI があるのでそれを利用します。

この API では、指定した月のサービスごとの各リージョンごとの利用トラフィックを返却します。また、billable_units オプションを利用することで、自動的に課金の単位であるGBと10,000リクエストの単位で情報を返却してくれます。APIの詳細は Stats API ドキュメントをご確認下さい。

以下が実際のAPIコールとレスポンスのサンプルです。結果はJSON形式で返却されるのですが、そのままでは見にくいの jq に渡すことで整形して表示されます。
jq の使い方等については色々な方がわかりやすい記事を書いてくれているので検索してみて下さい。

curl -H "Fastly-Key:<token>" "https://api.fastly.com/stats/usage_by_month?year=2017&month=7&billable_units=true" | jq

{
  "status": "success",
  "msg": null,
  "meta": {
    "from": "2017-07-01 00:00:00 +0000",
    "to": "2017-07-31 23:59:59 +0000",
    "by": "day",
    "region": "all"
  },
  "data": {
    "customer_id": "YOUR_CUSTOMER_ID",
    "services": {
      "SERVICE_ID": {
        "name": "SERVICE_NAME",
        "anzac": {
          "bandwidth": 28.815130509,
          "requests": 131.7256
        },
        "asia": {
          "bandwidth": 180.182470562,
          "requests": 965.4324
        },
        "europe": {
          "bandwidth": 1230.23131801,
          "requests": 6082.2894
        },
        "latam": {
          "bandwidth": 18.070301895,
          "requests": 93.7146
        },
        "south_africa": {
          "bandwidth": 8.77620445,
          "requests": 37.9704
        },
        "usa": {
          "bandwidth": 2330.717545144,
          "requests": 5524.7604
        }
      }
    },
    "total": {
      "anzac": {
        "bandwidth": 28.815130509,
        "requests": 131.7256
      },
      "asia": {
        "bandwidth": 180.182470562,
        "requests": 965.4324
      },
      "europe": {
        "bandwidth": 1230.23131801,
        "requests": 6082.2894
      },
      "latam": {
        "bandwidth": 18.070301895,
        "requests": 93.7146
      },
      "south_africa": {
        "bandwidth": 8.77620445,
        "requests": 37.9704
      },
      "usa": {
        "bandwidth": 2330.717545144,
        "requests": 5524.7604
      }
    }
  }
}

上記のようにサービスごとの地域別トラフィックの総量、リクエストの数が表示され、最後に全サービスでの合計の地域別のトラフィック情報が表示されます。

特定のサービスにしぼって情報を表示したい場合、以下のように jq で Service ID を指定することで指定した Service ID の情報のみ表示することが可能です。

curl -H "Fastly-Key: <token>" "https://api.fastly.com/stats/usage_by_month?month=11&year=2018&billable_units=true" | jq '.data.services."<service_id>"'

なお、全リージョンの配信量の総量はレスポンスには含まれていませんが地域別の情報を加算することで計算が可能です。以下のようにjq コマンドを利用して合計値を表示することも可能です。

レスポンスのJSONのフォーマットの関係で個別 Service ID の合計値を計算する場合と、全サービスの合計を取得する場合の指定方法が異なりますのでご注意下さい。

個別 Service ID 指定用
curl -H "Fastly-Key:<token>" "https://api.fastly.com/stats/usage_by_month?year=2017&month=7&billable_units=true" | jq '.data.services."<service_id>" | del(.name) | [.[].bandwidth] | add'

total(全サービス合計)用
curl -H "Fastly-Key:<token>" "https://api.fastly.com/stats/usage_by_month?year=2017&month=7&billable_units=true" | jq '[.data.total[].bandwidth]|add'

bandwidth の箇所を requests に変更することでリクエストの合計値を取得することも可能です。

今回の記事で利用した API は bandwidth と requests のみを返却しますが、他の Stats API を利用すると様々な分析情報を API で取得することが可能です。 Stats API の詳細、取得可能な情報については Historical Stats API fieldsもご確認下さい。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away