← Cloudflare Workflows / workflows / observability
Метрики и аналитика
Workflows предоставляют метрики, которые позволяют отслеживать и измерять выполнение Workflow, частоту ошибок, шаги и общую длительность как по каждому Workflow в отдельности, так и по всем вместе.
Метрики, отображаемые в Панель управления Cloudflare ↗ графики запрашиваются из Cloudflare GraphQL Analytics API. Вы можете получить доступ к метрикам программно через GraphQL или HTTP-клиент.
Метрики
В настоящее время Workflows экспортируют указанные ниже метрики в рамках workflowsAdaptiveGroups набор данных GraphQL.
| Метрика | Имя поля GraphQL | Описание |
|---|---|---|
| Запросы на чтение (qps) | readQueries |
Количество запросов на чтение, выполненных к базе данных. Это необработанное количество запросов на чтение, оно не используется для тарификации. |
Метрики можно запрашивать (и они хранятся) за последние 31 день.
Метки и измерения
workflowsAdaptiveGroups набор данных предоставляет следующие измерения для фильтрации и группировки результатов запроса:
workflowName: имя Workflow, напримерmy-workflowinstanceId: ID экземпляраstepName: имя шагаeventType: тип события (см. типы событий)stepCount: номер шага в рамках данного экземпляраdate: дата запуска WorkflowdatetimeFifteenMinutes: дата и время, округлённые до пятнадцати минутdatetimeFiveMinutes: дата и время, округлённые до пяти минутdatetimeHour: дата и время, округлённые до часаdatetimeMinute: дата и время, округлённые до минуты
Типы событий
eventType метрика позволяет применять filter (или groupBy) к Workflows и шагам на основе их последнего зафиксированного статуса.
Возможные значения для eventType описаны ниже:
Метки статуса на уровне Workflows
WORKFLOW_QUEUED: Workflow поставлен в очередь, но пока не выполняется. Это может произойти, если вы достигли лимит параллелизма и новые экземпляры ожидают завершения уже выполняющихся экземпляров.WORKFLOW_START: Workflow запущен и выполняется.WORKFLOW_SUCCESS: Workflow завершился без ошибок.WORKFLOW_FAILURE: Workflow завершился с ошибкой (исчерпаны попытки повтора, возникли ошибки и так далее).WORKFLOW_TERMINATED: Workflow был явно завершён.ROLLBACK_START: Workflow начал выполнять зарегистрированные обработчики отката.ROLLBACK_COMPLETE: все запущенные обработчики отката завершились успешно.ROLLBACK_FAILED: обработчик отката завершился с ошибкой, и откат не завершился корректно.
Метки состояния на уровне шага
STEP_START: шаг запущен и выполняется.STEP_SUCCESS: шаг завершился без ошибок.STEP_FAILURE: шаг завершился с ошибкой.SLEEP_START: шаг находится в состоянии приостановки.SLEEP_COMPLETE: шаг последний раз завершил приостановку.ATTEMPT_START: шаг выполняет повторную попытку.ATTEMPT_SUCCESS: повторная попытка завершилась успешно.ATTEMPT_FAILURE: попытка повтора завершилась ошибкой.ROLLBACK_STEP_START: обработчик отката начал выполняться.ROLLBACK_STEP_SUCCESS: обработчик отката успешно завершился.ROLLBACK_STEP_FAILURE: обработчик отката завершился с ошибкой.ROLLBACK_ATTEMPT_START: попытка повтора отката началась.ROLLBACK_ATTEMPT_SUCCESS: попытка повтора отката завершилась успешно.ROLLBACK_ATTEMPT_FAILURE: попытка повтора отката завершилась ошибкой.
События отката позволяют отличать сбои прямого выполнения от сбоев компенсации при проверке состояния Workflow или отладке хронологии экземпляра.
Просмотр метрик в панели управления
Аналитика по каждому Workflow и по отдельным экземплярам доступна в панели управления Cloudflare. Чтобы просмотреть текущие и исторические показатели базы данных:
-
На панели управления Cloudflare перейдите к разделу Workflows страницу.
Перейдите в Workflows ↗ -
Выберите Workflow, чтобы просмотреть его метрики.
При необходимости можно выбрать временной интервал для запроса. По умолчанию используются последние 24 часа.
Запрос через GraphQL API
Получать аналитику по вашим Workflows программно можно через GraphQL Analytics API. Этот API запрашивает те же наборы данных, что и панель управления Cloudflare, и поддерживает GraphQL интроспекция.
Наборы данных Workflows GraphQL требуют accountTag фильтр с ID вашего аккаунта Cloudflare и включает workflowsAdaptiveGroups набор данных.
Примеры
Чтобы запросить количество (число вызовов Workflow) и сумму wallTime для заданного $workflowName между $datetimeStart и $datetimeEnd, группируя по date:
query WorkflowInvocationsExample(
$accountTag: string!
$datetimeStart: Time
$datetimeEnd: Time
$workflowName: string
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
wallTime: workflowsAdaptiveGroups(
limit: 10000
filter: {
datetimeHour_geq: $datetimeStart
datetimeHour_leq: $datetimeEnd
workflowName: $workflowName
}
orderBy: [count_DESC]
) {
count
sum {
wallTime
}
dimensions {
date: datetimeHour
}
}
}
}
}Здесь мы делаем то же самое для wallTime, instanceRuns и stepCount в одном и том же запросе:
query WorkflowInvocationsExample2(
$accountTag: string!
$datetimeStart: Time
$datetimeEnd: Time
$workflowName: string
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
instanceRuns: workflowsAdaptiveGroups(
limit: 10000
filter: {
datetimeHour_geq: $datetimeStart
datetimeHour_leq: $datetimeEnd
workflowName: $workflowName
eventType: "WORKFLOW_START"
}
orderBy: [count_DESC]
) {
count
dimensions {
date: datetimeHour
}
}
stepCount: workflowsAdaptiveGroups(
limit: 10000
filter: {
datetimeHour_geq: $datetimeStart
datetimeHour_leq: $datetimeEnd
workflowName: $workflowName
eventType: "WORKFLOW_START"
}
orderBy: [count_DESC]
) {
count
dimensions {
date: datetimeHour
}
}
wallTime: workflowsAdaptiveGroups(
limit: 10000
filter: {
datetimeHour_geq: $datetimeStart
datetimeHour_leq: $datetimeEnd
workflowName: $workflowName
}
orderBy: [count_DESC]
) {
count
sum {
wallTime
}
dimensions {
date: datetimeHour
}
}
}
}
}Здесь давайте выполним запрос к workflowsAdaptive для необработанных данных о $instanceId между $datetimeStart и $datetimeEnd:
query WorkflowsAdaptiveExample(
$accountTag: string!
$datetimeStart: Time
$datetimeEnd: Time
$instanceId: string
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
workflowsAdaptive(
limit: 100
filter: {
datetime_geq: $datetimeStart
datetime_leq: $datetimeEnd
instanceId: $instanceId
}
orderBy: [datetime_ASC]
) {
datetime
eventType
workflowName
instanceId
stepCount
wallTime
}
}
}
}Переменные запроса GraphQL
Примеры значений для переменных запроса:
{
"accountTag": "fedfa729a5b0ecfd623bca1f9000f0a22",
"datetimeStart": "2024-10-20T00:00:00Z",
"datetimeEnd": "2024-10-29T00:00:00Z",
"workflowName": "shoppingCart",
"instanceId": "ecc48200-11c4-22a3-b05f-88a3c1c1db81"
}