Cloudflare Workers Analytics Engineを試してみる
Cloudflare Workers Analytics EngineはWorkersと連携して動作するデータ解析用サービスです。Workersの動作履歴を管理するものではなく、Workers経由で書き込まれたデータが蓄積されそれをSQLもしくはGraphQLで解析できます。
データスキーマ
Workers Analytics Engineのデータスキーマの考え方は少し特殊です。独自でスキーマを作成することは行えず、機能をオンにし、データが初めて書き込まれた時点で以下のスキーマが自動で作成されます。
このスキーマのうち、index,blob,doubleをどういう目的で使うかは開発者の自由です。逆にこれを変更、追加することはできませんのでご注意ください。JavaScriptからはそれぞれindexes
,blobs
,doubles
オブジェクトで値を挿入します。つまり、KV,D1や外部DBを使うことなくデータの蓄積および解析が簡単にできることが特徴です。
やってみる
まずアカウント管理者画面のWorkers&Pagesトップ画面右にあるAnalytics Engine
をクリックします。
はじめて利用する場合Enable Analytics Engine
のボタンを押してください。
すでに利用してデータが書き込まれている場合以下のようにデータ書き込み履歴が確認可能です。この例だと2つのデータ保存箇所ができています。
次にWorkersでバインドします。データスキーマは前述の通り自動で生成されますが、データセットは独自の名前で作成が可能です。
まずこの記事に従ってWorkersでHello Worldを作ります。
wrangler.toml
に以下を追記します。
analytics_engine_datasets = [
{ binding = "testanalytics" }
]
これによりPublish時点でtestanalytics
というデータセットが作成されます。
index.js
をいかに書き換えます。
export default {
async fetch(request, env, ctx) {
env.testanalytics.writeDataPoint({
'blobs': [
request.cf.colo,
request.cf.country,
request.cf.city,
request.cf.region,
request.cf.timezone
],
'doubles': [
request.cf.metroCode,
request.cf.longitude,
request.cf.latitude
],
'indexes': [
request.cf.postalCode
]
});
return new Response("Hello World!");
},
};
ここで使われているcfオブジェクトとはCloudflare Workersを呼び出した際に、呼び出し元(今回の例でいうとブラウザ)の情報がいろいろ含まれているオブジェクトです。つまりこのサンプルではWorkersの呼び出し元を記録するものになります。
wrangler publish
を行い、ブラウザでアクセスしてください。
これによりtestanalytics
にデータが蓄積されていきます。
トークン発行とSQLクエリ
ではこれより、SQLによりデータを呼び出していきますが、その前にトークンを作成します。管理者画面一番トップからMy Profiles
をクリックします。
API Tokens
をクリックします。
Create Token
をクリックします。
Custom token
のGet started
を押します。
適当な名前を付けて以下のようにAnalytics
にRead
権限を持つトークンを発行します。
アカウントIDおよびトークンを以下のSQLで置換し実行してみて下さい。
curl.exe -X POST "https://api.cloudflare.com/client/v4/accounts/<accountID>/analytics_engine/sql" -H "Authorization: Bearer <tokenID>" -d "SELECT blob1 FROM testanalytics"
blob1の値が出てくるはずです。
{
"meta":
[
{
"name": "blob1",
"type": "String"
}
],
"data":
[
{
"blob1": "NRT"
}
],
"rows": 1,
}
書き込まれているデータをフルで取り出すSQLは以下の通りです。
curl.exe -X POST "https://api.cloudflare.com/client/v4/accounts/<accountID>/analytics_engine/sql" -H "Authorization: Bearer <tokenID>" -d "SELECT blob1,blob2,blob3,blob4,blob5,double1,double2,double3,index1 FROM testanalytics"
SQLリファレンスはこちらにあります。
制限について
リクエスト内のすべての BLOB の合計サイズは 5120 バイトです。またインデックスは 32 バイトまでです。リクエストごとに 25 回の書き込みをサポートしています。
Discussion