Google Cloud Platformの課金データをBigQueryにエクスポートする

GCPは従量課金なので、こまめに課金額を確認してあげるといいですね！
この記事は、そんな課金額の確認に便利な方法をご紹介します。

# BigQueryとは？

GCPの中のサービスの1つで、ビッグデータに対してSQLを書いてクエリを実行し、分析を行うことができるサービスです。
料金体系は大雑把に見るとデータ保存容量のストレージと、クエリ実行時に読み込んだデータ量に対する課金です。
TBを超えるデータを分析するにも便利なBigQueryですが、マシンの管理運用の手間がまったくないため100MB程度のスモールデータを適当に分析するのにも便利です。

# 課金データをBigQueryにエクスポートする設定

課金データをBigQueryにエクスポートするには、Cloud Console上で設定を行います。

メインメニュー -> お支払 -> 課金データのエクスポート

<img width="743" alt="Screen Shot 2017-02-10 at 10.41.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/15640/0de85d9e-32e6-1412-3d09-05bd62af63a4.png">

課金アカウントごとに、エクスポート先のGCPプロジェクトとBigQueryのDatasetを設定します。
BigQueryのDatasetとは、Tableを束ねておくための容れ物です。

## Datasetの作成

Datasetを設定するためには、まずDatasetを作成する必要があるので、BigQueryのコンソールに移動します。

メインメニュー -> BigQuery

いずれかのプロダクトが利用しているGCP Projectに作成するとややこしくなるので、課金管理専用のGCPプロジェクトを作って、そこに作成してもよいかもしれません。

### Create new datasetを選択

<img width="642" alt="create_dataset.png" src="https://qiita-image-store.s3.amazonaws.com/0/15640/81ec3616-3f77-dca6-c5e0-cdc83d0a5c58.png">

### Create Dataset

DatasetIDはGCPプロジェクトの中で一意になっていれば、良いので適当なわかり易い名前でよいです。

<img width="877" alt="create_dataset2.png" src="https://qiita-image-store.s3.amazonaws.com/0/15640/02ed61d4-0d63-b7d1-1af2-3f208bf9777b.png">

## BigQueryにエクスポートする設定を登録

Datasetができたので、 `課金データのエクスポート` に戻って、BigQueryにエクスポートする設定を登録します。
作成したDatasetをプルダウンで選択して、 `BigQueryエクスポートを有効化` ボタンを押せば、設定完了です！

<img width="543" alt="billing_export_save.png" src="https://qiita-image-store.s3.amazonaws.com/0/15640/fe292170-f19d-05bc-a1e9-cb4bdca6a46f.png">

# エクスポートされた課金データにクエリを実行する

課金データは1日毎に出力されます。
エクスポート設定を行った後、1日経つと `gcp_billing_export_{Billing Account ID}` のテーブルが作成され課金データが追加されます。

Tableが作られたら適当に見たい内容をクエリしましょう。
例えば以下は `gcp-ug` の "App Engine" の課金額を日毎に見るクエリです。

``` sql
SELECT
  project.id,
  product,
  resource_type,
  start_time,
  cost,
  usage.amount,
  usage.unit,
  credits.name,
  credits.amount
FROM
  [your table]
WHERE
  project.id = "gcp-ug"
  AND product = "App Engine"
ORDER BY
  1,
  2,
  3,
  4
```

BigQuery Consoleで `QUERY COMPOSE` ボタンを押して表示されたQuery画面にクエリを書いて、 `RUN QUERY` ボタンを押せばクエリが実行され、結果が表示されます。

<img width="1287" alt="Screen Shot 2017-02-10 at 11.50.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/15640/82b84fbf-e3de-cfac-7d44-9f12a9d92e14.png">

集計をしたい場合などは、GROUP BYと集計関数を使って、集計してあげればよいです。
課金アカウントに紐付いているGCP Projectの課金情報を日毎にまとめて見ることができるのも便利です。

## スキーマの概要 (おまけ)

* billing_account_id : 課金アカウントID
* product : "App Engine", "Compute Engine" のようなリソースのプロダクト名
* resource_type : "Frontend Instances", "Datastore Read Ops" のようなリソース名
* start_time : 期間開始日時
* end_time : 期間終了日時
* project.id : GCPプロジェクトID
* project.name : GCPプロジェクト名
* project.labels.key : GCPプロジェクトに紐付けているLabel Key
* project.labels.value : GCPプロジェクトに紐付けているLabel Value
* labels.key : リソースに紐付けているLabel Key
* labels.value : リソースに紐付けているLabel Value
* cost : 料金
* currency costの通貨 (米ドル)
* currency_conversion_rate : 為替レート (全部1っぽい)
* usage.amount : リソース使用量
* usage.unit : リソース使用量単位
* credits.name : 割引名 (Compute EngineだとSustained Usage Discountなどが入る)
* credits.amount : 割引金額

リソースのLabelが出力されているので、Compute EngineのインスタンスにLabel付けておけば、Labelごとに料金集計とかもできるのかも。

# Next Step

BigQueryに出力したデータを[Google Data Stuio](https://datastudio.google.com)を利用してグラフにしてみましょう！
[BigQueryにエクスポートしたGCPの課金データを可視化してみる](http://qiita.com/tora470/items/0a3879426d6acc9f0d14)