← Cloudflare Workers / workers / examples
Запись в Analytics Engine
Workers Analytics Engine обеспечивает масштабируемую аналитику временных рядов. Используйте её для отслеживания собственных метрик, построения биллинга на основе использования или оценки состояния сервиса в разрезе отдельных клиентов.
В отличие от логов, Analytics Engine предназначен для агрегированных запросов по данным с высокой кардинальностью. Запись данных неблокирующая и не влияет на задержку запросов.
Настройка привязки
Добавьте привязку набора данных Analytics Engine в файл конфигурации Wrangler. Набор данных создается автоматически при первой записи в него.
{
"analytics_engine_datasets": [
{
"binding": "ANALYTICS",
"dataset": "my_dataset",
},
],
}[[analytics_engine_datasets]]
binding = "ANALYTICS"
dataset = "my_dataset"Записывайте точки данных
export default {
async fetch(request, env) {
const url = new URL(request.url);
// Write a page view event
env.ANALYTICS.writeDataPoint({
blobs: [
url.pathname,
request.headers.get("cf-connecting-country") ?? "unknown",
],
doubles: [1], // Count
indexes: [url.hostname], // Sampling key
});
// Write a response timing event
const start = Date.now();
const response = await fetch(request);
const duration = Date.now() - start;
env.ANALYTICS.writeDataPoint({
blobs: [url.pathname, response.status.toString()],
doubles: [duration],
indexes: [url.hostname],
});
// Writes are non-blocking - no need to await or use waitUntil()
return response;
},
};interface Env {
ANALYTICS: AnalyticsEngineDataset;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
// Write a page view event
env.ANALYTICS.writeDataPoint({
blobs: [
url.pathname,
request.headers.get("cf-connecting-country") ?? "unknown",
],
doubles: [1], // Count
indexes: [url.hostname], // Sampling key
});
// Write a response timing event
const start = Date.now();
const response = await fetch(request);
const duration = Date.now() - start;
env.ANALYTICS.writeDataPoint({
blobs: [url.pathname, response.status.toString()],
doubles: [duration],
indexes: [url.hostname],
});
// Writes are non-blocking - no need to await or use waitUntil()
return response;
},
};Структура точки данных
Каждая точка данных состоит из:
- blobs (строки) - измерения для группировки и фильтрации. Используйте для путей, регионов, кодов состояния или идентификаторов клиентов.
- doubles (числа) - числовые значения для записи, такие как количество, длительность или размер.
- индексы (строки) - одна строка, используемая как ключ сэмплирования. Группируйте связанные события под одним и тем же индексом.
Запрос ваших данных
Запрашивайте данные с помощью SQL API:
curl "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/analytics_engine/sql" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--data "SELECT blob1 AS path, SUM(_sample_interval) AS views FROM my_dataset WHERE timestamp > NOW() - INTERVAL '1' HOUR GROUP BY path ORDER BY views DESC LIMIT 10"Дополнительные материалы
- документация Analytics Engine - Полный справочник по Workers Analytics Engine.
- Справочник по SQL API - Синтаксис запросов и доступные функции.
- Интеграция с Grafana - Визуализируйте данные Analytics Engine в Grafana.