Cloudflare Workflows
Learn how to add Sentry instrumentation for Cloudflare Workflows.
(Available in version 9.32.0 and above)
You can use the instrumentWorkflowWithSentry
method to instrument Cloudflare Workflows.
Because workflows can be hibernated and lose all state, we use the workflows instanceId
to generate the Sentry trace_id
to link all steps together into a single trace. If instanceId
is a UUID (with or without dashes), it will be used directly as the trace_id
. If not, we SHA1 hash the instanceId
to generate a deterministic trace_id
.
We use the last 4 characters of the trace_id
for sampling to ensure all steps have the same sampling decision.
Because the instanceId
is used for both the trace_id
and for sampling decisions, you should ensure that the instanceId
is unique for each workflow instance. If you are using custom UUIDs, you should ensure the last 4 digits are sufficiently random to ensure a good distribution of sampling decisions.
import {
WorkflowEntrypoint,
WorkflowStep,
WorkflowEvent,
} from "cloudflare:workers";
import * as Sentry from "@sentry/cloudflare";
class MyWorkflowBase extends WorkflowEntrypoint<Env, Params> {
async run(event: WorkflowEvent<Params>, step: WorkflowStep) {
await step.do("fetch data", async () => {
//
});
await step.do("process data", async () => {
//
});
}
}
// Export your named class as defined in your wrangler config
export const MyWorkflow = Sentry.instrumentWorkflowWithSentry(
(env: Env) => ({
dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
tracesSampleRate: 1.0,
}),
MyWorkflowBase,
);
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").