Query Cloudflare Workers Observability Logs
Query the CF Workers Observability API to retrieve structured logs from any Workers, Durable Objects, Workflows, Queues, and Cron Triggers in your Cloudflare account.
Prerequisites
Set these environment variables (e.g. in your project's .env or shell profile):
- -
CF_OBSERVABILITY_ACCOUNT_ID — your Cloudflare account ID - INLINECODE2 — API token with Workers Observability read permission
API Endpoint
CODEBLOCK0
Request Body Format
CODEBLOCK1
Filter Operations
- - String:
eq, neq, includes, doesNotInclude, startsWith, regex, exists, INLINECODE10 - Number:
eq, neq, gt, gte, lt, lte, exists, INLINECODE18
Standard Fields
| Field | Type | Description |
|---|
| INLINECODE19 | string | Worker script name |
| INLINECODE20 |
string |
ok /
exception |
|
$workers.entrypoint | string | Entrypoint class (Worker, DO, Workflow) |
|
$workers.eventType | string |
fetch,
rpc,
queue,
scheduled,
alarm |
|
msg | string | Log message |
|
level | string | Log level (
log,
info,
warn,
error) |
|
error | string | Error message |
|
status | number | HTTP status code |
Any custom fields logged via console.log({ key: value }) are also queryable as top-level fields.
Full-text Search
Use needle.value for free-text search across all fields. Useful when you don't know which field contains the value.
How to Execute
Use Bash with curl to call the API. Do NOT use WebFetch (it processes through an AI model and loses structure).
Step 1: Read credentials
Read CF_OBSERVABILITY_ACCOUNT_ID and CF_OBSERVABILITY_API_TOKEN from environment variables. If not set in the shell, search for them in project .env files:
CODEBLOCK2
Step 2: Build and execute query
Construct the curl command based on the user's request. Default time range: last 1 hour. Default limit: 30.
Step 3: Format output
Parse the JSON response and format as a timeline:
CODEBLOCK3
Events are in result.events.events[]. Each event has:
- -
source: structured log fields (msg, level, plus any custom fields) - INLINECODE46 : Worker metadata (scriptName, outcome, eventType, entrypoint)
- INLINECODE47 : system metadata (timestamp, requestId)
- INLINECODE48 : event timestamp in unix ms
Sort events by timestamp ascending for chronological view.
Common Query Patterns
By Worker name
CODEBLOCK4
Errors only
CODEBLOCK5
By entrypoint (Durable Object / Workflow class)
CODEBLOCK6
By event type (alarm, queue, scheduled, etc.)
CODEBLOCK7
Exceptions (Worker crashed)
CODEBLOCK8
Custom field filter
CODEBLOCK9
Free-text search
CODEBLOCK10
Combine filters
CODEBLOCK11
Argument Parsing
When invoked as /cf-workers-logs, parse $ARGUMENTS for:
- -
worker=my-worker → filter by INLINECODE52 - INLINECODE53 → filter by level
- INLINECODE54 → filter by INLINECODE55
- INLINECODE56 → filter by INLINECODE57
- INLINECODE58 → needle search
- INLINECODE59 → filter by custom field
- INLINECODE60 /
last=30m / last=24h → time range (default: 1h) - INLINECODE63 → result limit (default: 30)
- No arguments → show recent errors across all Workers (last 1h, level=error)
Multiple arguments can be combined: INLINECODE64
查询Cloudflare Workers可观测性日志
通过CF Workers可观测性API,从Cloudflare账户中的任何Workers、Durable Objects、Workflows、Queues和Cron Triggers检索结构化日志。
前置条件
设置以下环境变量(例如在项目的.env文件或shell配置文件中):
- - CFOBSERVABILITYACCOUNTID — 你的Cloudflare账户ID
- CFOBSERVABILITYAPITOKEN — 具有Workers可观测性读取权限的API令牌
API端点
POST https://api.cloudflare.com/client/v4/accounts/{accountId}/workers/observability/telemetry/query
Authorization: Bearer {apiToken}
Content-Type: application/json
请求体格式
json
{
queryId: cc-{timestamp},
timeframe: {
from: msstart>,
to: msend>
},
view: events,
limit: 50,
parameters: {
filters: [
{key: , operation: , type: , value: }
],
filterCombination: and,
calculations: [],
groupBys: [],
needle: {value: , isRegex: false, matchCase: false},
limit: 50
}
}
过滤操作
- - 字符串:eq、neq、includes、doesNotInclude、startsWith、regex、exists、doesNotExist
- 数字:eq、neq、gt、gte、lt、lte、exists、doesNotExist
标准字段
| 字段 | 类型 | 描述 |
|---|
| $workers.scriptName | 字符串 | Worker脚本名称 |
| $workers.outcome |
字符串 | ok / exception |
| $workers.entrypoint | 字符串 | 入口点类(Worker、DO、Workflow) |
| $workers.eventType | 字符串 | fetch、rpc、queue、scheduled、alarm |
| msg | 字符串 | 日志消息 |
| level | 字符串 | 日志级别(log、info、warn、error) |
| error | 字符串 | 错误消息 |
| status | 数字 | HTTP状态码 |
通过console.log({ key: value })记录的任何自定义字段也可以作为顶级字段进行查询。
全文搜索
使用needle.value在所有字段中进行自由文本搜索。当你不确定哪个字段包含该值时非常有用。
如何执行
使用Bash配合curl调用API。不要使用WebFetch(它会通过AI模型处理并丢失结构)。
步骤1:读取凭证
从环境变量中读取CFOBSERVABILITYACCOUNTID和CFOBSERVABILITYAPITOKEN。如果在shell中未设置,则在项目.env文件中搜索:
bash
grep -r CFOBSERVABILITY --include=.env --include=.env.* . 2>/dev/null
步骤2:构建并执行查询
根据用户请求构建curl命令。默认时间范围:最近1小时。默认限制:30。
步骤3:格式化输出
解析JSON响应并格式化为时间线:
{timestamp} [{level}] [{scriptName}/{entrypoint}] {msg}
{extra fields if present: error=, status=, eventType=}
事件位于result.events.events[]中。每个事件包含:
- - source:结构化日志字段(msg、level以及任何自定义字段)
- $workers:Worker元数据(scriptName、outcome、eventType、entrypoint)
- $metadata:系统元数据(timestamp、requestId)
- timestamp:事件时间戳(Unix毫秒)
按时间戳升序排序事件以获得时间顺序视图。
常见查询模式
按Worker名称
json
{filters: [{key: $workers.scriptName, operation: eq, type: string, value: my-worker}]}
仅错误
json
{filters: [{key: level, operation: eq, type: string, value: error}]}
按入口点(Durable Object / Workflow类)
json
{filters: [{key: $workers.entrypoint, operation: eq, type: string, value: MyDurableObject}]}
按事件类型(alarm、queue、scheduled等)
json
{filters: [{key: $workers.eventType, operation: eq, type: string, value: alarm}]}
异常(Worker崩溃)
json
{filters: [{key: $workers.outcome, operation: eq, type: string, value: exception}]}
自定义字段过滤
json
{filters: [{key: userId, operation: eq, type: string, value: user_123}]}
自由文本搜索
json
{needle: {value: search text here, isRegex: false, matchCase: false}}
组合过滤
json
{
filters: [
{key: $workers.scriptName, operation: eq, type: string, value: my-worker},
{key: level, operation: eq, type: string, value: error}
],
filterCombination: and
}
参数解析
当调用/cf-workers-logs时,解析$ARGUMENTS:
- - worker=my-worker → 按$workers.scriptName过滤
- level=error → 按级别过滤
- entrypoint=MyDO → 按$workers.entrypoint过滤
- event=alarm → 按$workers.eventType过滤
- search=xxx → 针搜索
- = → 按自定义字段过滤
- last=1h / last=30m / last=24h → 时间范围(默认:1h)
- limit=N → 结果限制(默认:30)
- 无参数 → 显示所有Worker的最近错误(最近1小时,level=error)
多个参数可以组合:/cf-workers-logs worker=my-api level=error last=24h