INTEGRITY Dokumentace

Fakturace podle využití

Řada zákazníků Cloudflare provozuje produkty SaaS (software jako služba) určené pro více vlastních zákazníků. Tyto firmy pak často řeší, jak stanovit náklady na jednotlivého zákazníka a jak lépe porozumět chování zákazníků obecně.

Uchovávat data o každém webovém požadavku zákazníka může být nákladné, stejně jako přiřazování zobrazení stránek jednotlivým zákazníkům. Cloudflare tento problém vyřešila pomocí vlastních interních technologií, které jsou nyní k dispozici i vám prostřednictvím Analytics Engine.

Záznam dat o využití

Analytics Engine je navržený pro použití s Cloudflare Workers. Pokud už Cloudflare Workers používáte k obsluze požadavků, můžete začít odesílat data do Analytics Engine pomocí několika řádků kódu:

  [...]

  // This examples assumes you give a unique ID to each of your SaaS customers, and the Worker has
  // assigned it to the variable named `customer_id`
  const { pathname } = new URL(request.url);
  env.USAGE_INDEXED_BY_CUSTOMER_ID.writeDataPoint({
    "indexes": [customer_id],
    "blobs": [pathname]
  });

Aktivita zákazníků SaaS se často řídí exponenciálním vzorcem: jeden zákazník může generovat 100 milionů požadavků za sekundu, zatímco jiný jen 100 požadavků denně. Pokud se všechna data vzorkují společně, může využití větších zákazníků způsobit, že data menších zákazníků budou vzorkována až na nulu. Analytics Engine tomu umožňuje předejít: ve výše uvedeném ukázkovém kódu jako index uvádíme jedinečné ID zákazníka, díky čemuž Analytics Engine vzorkuje aktivitu jednotlivých zákazníků zvlášť.

Zobrazení využití

Data zákazníků si můžete zobrazit buď pomocí Grafany (pro vizualizace), nebo ve formátu JSON (pro vlastní nástroje). Podrobněji se tomu věnují další části dokumentace Analytics Engine.

Podívejte se na využití jednotlivými zákazníky napříč všemi koncovými body:

SELECT
  index1 AS customer_id,
  sum(_sample_interval) AS count
FROM
  usage_indexed_by_customer_id
GROUP BY customer_id

Pokud tento dotaz spustíte v Grafaně, vrátí graf shrnující využití jednotlivých zákazníků. Výraz sum(_sample_interval) se týká vzorkování, další informace najdete v ostatní dokumentaci Analytics Engine. Tento dotaz vám odpoví na otázku "kteří zákazníci jsou nejaktivnější?"

Příklad writeDataPoint výše uvedené volání zapisuje název koncového bodu. Pokud to uděláte, můžete aktivitu zákazníka rozdělit podle koncového bodu:

SELECT
  index1 AS customer_id,
  blob1 AS request_endpoint,
  sum(_sample_interval) AS count
FROM
  usage_indexed_by_customer_id
GROUP BY customer_id, request_endpoint

To vám může poskytnout přehled o tom, jaké koncové body různí zákazníci používají. To může být užitečné jak pro obchodní účely (například pochopení potřeb zákazníků), tak pro vaše inženýry, kteří díky tomu vidí aktivitu a chování (observabilita).

Fakturační zákazníci

Analytics Engine můžete použít k fakturaci zákazníků na základě spolehlivého odhadu využití. Pro co nejpřesnější odhad doporučujeme při generování faktur spouštět jeden dotaz na každého zákazníka zvlášť. Díky tomu dochází k menšímu vzorkování než při dotazování na více zákazníků najednou.

SELECT
  index1 AS customer_id,
  blob1 AS request_endpoint,
  sum(_sample_interval) AS usage_count
FROM
  usage_indexed_by_customer_id
WHERE
  customer_id = 'substitute_customer_id_here'
  AND timestamp >= toDateTime('2023-03-01 00:00:00')
  AND timestamp < toDateTime('2023-04-01 00:00:00')
GROUP BY customer_id, request_endpoint

Spuštěním tohoto dotazu jednou za každého zákazníka na konci měsíce získáte data potřebná k vystavení faktury. Jde jen o příklad: pravděpodobně si ho budete chtít upravit podle způsobu, jakým chcete fakturovat.

Při vystavování faktury budete pravděpodobně chtít uvést i denní náklady. Následující dotaz rozděluje využití podle jednotlivých dnů:

SELECT
  index1 AS customer_id,
  toStartOfInterval(timestamp, INTERVAL '1' DAY) AS date,
  blob1 AS request_endpoint,
  sum(_sample_interval) AS request_count
FROM
  usage_indexed_by_customer_id
WHERE
  customer_id = 'x'
  AND timestamp >= toDateTime('2023-03-01 00:00:00')
  AND timestamp < toDateTime('2023-04-01 00:00:00')
GROUP BY customer_id, date, request_endpoint

Dotazy na využití uvedené výše byste měli upravit podle způsobu, jakým účtujete poplatky zákazníkům, a nastavit backendový systém, který tyto dotazy spustí a na základě vrácených dat vypočítá poplatky pro zákazníky.