Queues expose metrics which allow you to measure the queue backlog, consumer concurrency, and message operations.
The metrics displayed in the Cloudflare dashboard ↗ are queried from Cloudflare’s GraphQL Analytics API. You can access the metrics programmatically via GraphQL or HTTP client.
Queues export the below metrics within the queuesBacklogAdaptiveGroups dataset.
| Metric | GraphQL Field Name | Description |
|---|---|---|
| Backlog bytes | bytes |
Average size of the backlog, in bytes |
| Backlog messages | messages |
Average size of the backlog, in number of messages |
The queuesBacklogAdaptiveGroups dataset provides the following dimensions for filtering and grouping queries:
queueID- ID of the queuedatetime- Timestamp for when the message was sentdate- Timestamp for when the message was sent, truncated to the start of a daydatetimeHour- Timestamp for when the message was sent, truncated to the start of an hourdatetimeMinute- Timestamp for when the message was sent, truncated to the start of a minute
Queues export the below metrics within the queueConsumerMetricsAdaptiveGroups dataset.
| Metric | GraphQL Field Name | Description |
|---|---|---|
| Avg. Consumer Concurrency | concurrency |
Average number of concurrent consumers over the period |
The queueConsumerMetricsAdaptiveGroups dataset provides the following dimensions for filtering and grouping queries:
queueID- ID of the queuedatetime- Timestamp for the consumer metricsdate- Timestamp for the consumer metrics, truncated to the start of a daydatetimeHour- Timestamp for the consumer metrics, truncated to the start of an hourdatetimeMinute- Timestamp for the consumer metrics, truncated to the start of a minute
Queues export the below metrics within the queueMessageOperationsAdaptiveGroups dataset.
| Metric | GraphQL Field Name | Description |
|---|---|---|
| Total billable operations | billableOperations |
Sum of billable operations (writes, reads, and deletes) over the time period |
| Total Bytes | bytes |
Sum of bytes read, written, and deleted from the queue |
| Lag | lagTime |
Average lag time in milliseconds between when the message was written and the operation to consume the message. |
| Retries | retryCount |
Average number of retries per message |
| Message Size | messageSize |
Maximum message size over the specified period |
The queueMessageOperationsAdaptiveGroups dataset provides the following dimensions for filtering and grouping queries:
queueID- ID of the queueactionType- The type of message operation. Can beWriteMessage,ReadMessageorDeleteMessageconsumerType- The queue consumer type. Can beworkerorhttp. Only applicable forReadMessageandDeleteMessageaction typesoutcome- The outcome of the message operation. Only applicable forDeleteMessageaction types. Can besuccess,dlqorfail.datetime- Timestamp for the message operationdate- Timestamp for the message operation, truncated to the start of a daydatetimeHour- Timestamp for the message operation, truncated to the start of an hourdatetimeMinute- Timestamp for the message operation, truncated to the start of a minute
You can access realtime backlog metrics via the Queues REST API and JavaScript API. These metrics provide point-in-time values rather than aggregated data.
| Metric | Field Name | Description |
|---|---|---|
| Backlog count | backlog_count |
Number of messages currently in the queue |
| Backlog bytes | backlog_bytes |
Total size of messages in the queue, in bytes |
| Oldest message timestamp | oldest_message_timestamp_ms |
Timestamp (in milliseconds) of the oldest message in the queue |
To retrieve these metrics via the REST API, use the metrics endpoint (/accounts/{account_id}/queues/{queue_id}/metrics).
These fields are also included in metadata.metrics when calling send(), sendBatch(), or metrics() via the JavaScript API.
query QueueBacklog(
$accountTag: string!
$queueId: string!
$datetimeStart: Time!
$datetimeEnd: Time!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
queueBacklogAdaptiveGroups(
limit: 10000
filter: {
queueId: $queueId
datetime_geq: $datetimeStart
datetime_leq: $datetimeEnd
}
) {
avg {
messages
bytes
}
}
}
}
}query QueueConcurrencyByHour(
$accountTag: string!
$queueId: string!
$datetimeStart: Time!
$datetimeEnd: Time!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
queueConsumerMetricsAdaptiveGroups(
limit: 10000
filter: {
queueId: $queueId
datetime_geq: $datetimeStart
datetime_leq: $datetimeEnd
}
orderBy: [datetimeHour_DESC]
) {
avg {
concurrency
}
dimensions {
datetimeHour
}
}
}
}
}query QueueMessageOperationsByMinute(
$accountTag: string!
$queueId: string!
$datetimeStart: Date!
$datetimeEnd: Date!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
queueMessageOperationsAdaptiveGroups(
limit: 10000
filter: {
queueId: $queueId
datetime_geq: $datetimeStart
datetime_leq: $datetimeEnd
}
orderBy: [datetimeMinute_DESC]
) {
count
sum {
bytes
}
dimensions {
datetimeMinute
}
}
}
}
}