始める
次の内容をwrangler.tomlファイルに追加して、Workers Analytics Engineデータセットへのバインディングを作成します。データセットはSQLのテーブルのようなもので、行と列は一貫した意味を持つ必要があります。
[[analytics_engine_datasets]]binding = "<BINDING_NAME>"dataset = "<DATASET_NAME>"作成したバインディングで公開されているwriteDataPoint()メソッドを呼び出すことで、Workerにデータポイントを書き込むことができます。
async fetch(request, env) { env.WEATHER.writeDataPoint({ 'blobs': ["シアトル", "アメリカ", "pro_sensor_9000"], // 市、州 'doubles': [25, 0.5], 'indexes': ["a3cd45"] }); return new Response("OK!");}データポイントは、次の要素で構成される構造化イベントです:
- Blobs (文字列) — グループ化およびフィルタリングに使用される次元。別のメトリクスシステムではラベルと呼ばれることもあります。
- Doubles (数値) — データポイントに記録したい数値の値。
- Indexes — (文字列) — サンプリングキーとして使用されます。
上記の例では、空気質サンプルを収集していると仮定します。書き込まれた各データポイントは、天候センサーからの読み取りを表します。blobsは市、州、センサーのモデルを定義し、後でクエリをフィルタリングできる次元です。doublesは数値の温度と気圧の読み取りを定義します。そして、indexは顧客のIDです。追加のデータをデータポイントに加えるために、ジオロケーションなどの受信リクエストに関するコンテキストを含めることを検討してください。
現在、writeDataPoint() APIは順序付きの値の配列を受け入れます。これは、フィールドを一貫した順序で提供する必要があることを意味します。indexesフィールドは配列を受け入れますが、現在は単一のインデックスのみを提供する必要があります。複数のインデックスを提供しようとすると、データポイントは記録されません。
書き込んだデータを2つの方法でクエリできます:
- SQL API — 独自のクエリを作成し、Grafanaなどの外部ツールと統合するのに最適です。
- GraphQL API — Cloudflareダッシュボードを支える同じAPIです。
この例では、SQL APIを使用します。
Account Analytics Read権限を持つAPIトークン ↗を作成します。
次のクエリは、温度がゼロを超えたときに最も高い平均湿度の読み取りを持つ上位10都市を返します:
SELECT blob1 AS city, SUM(_sample_interval * double2) / SUM(_sample_interval) AS avg_humidityFROM WEATHERWHERE double1 > 0GROUP BY cityORDER BY avg_humidity DESCLIMIT 10このクエリは、SQL APIにHTTPリクエストを送信することで実行できます:
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/analytics_engine/sql" \--header "Authorization: Bearer <API_TOKEN>" \--data "SELECT blob1 AS city, SUM(_sample_interval * double2) / SUM(_sample_interval) AS avg_humidity FROM WEATHER WHERE double1 > 0 GROUP BY city ORDER BY avg_humidity DESC LIMIT 10"サポートされているSQL機能の完全なリストについては、Workers Analytics Engine SQLリファレンスを参照してください。
Workers Analytics Engineは、Grafanaなどのツールを使用して視覚化できる時系列分析を強化するために最適化されています。ランタイムから書き込まれたすべてのイベントには、自動的にtimestampフィールドが追加されます。ほとんどの時系列は丸められ、その後GROUP BYでtimestampを使用することが期待されます。例えば:
SELECT intDiv(toUInt32(timestamp), 300) * 300 AS t, blob1 AS city, SUM(_sample_interval * double2) / SUM(_sample_interval) AS avg_humidityFROM WEATHERWHERE timestamp >= NOW() - INTERVAL '1' DAY AND double1 > 0GROUP BY t, cityORDER BY t, avg_humidity DESCこのクエリは、最初にtimestampフィールドを最も近い5分に丸めます。次に、そのフィールドと市でグループ化し、5分間の各市の平均湿度を計算します。
Workers Analytics Engineに対して効率的なGrafanaクエリを作成する方法の詳細については、GrafanaからWorkers Analytics Engineをクエリするを参照してください。