Skip to content

Commit 1553dec

Browse files
juliusmarmingecodex
andcommitted
Use a dedicated Axiom traces dataset for relay HTTP spans
Co-authored-by: codex <codex@users.noreply.github.com>
1 parent cbb0af4 commit 1553dec

2 files changed

Lines changed: 19 additions & 19 deletions

File tree

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import * as Axiom from "alchemy/Axiom";
2-
import * as Output from "alchemy/Output";
32
import * as Effect from "effect/Effect";
43

54
export const RELAY_OBSERVABILITY_SERVICE_NAME = "t3-code-relay-worker";
65
export const RELAY_OBSERVABILITY_EXPORT_INTERVAL = "1 second";
7-
export const RELAY_AXIOM_TRACE_DATASET = "t3-code-relay-events";
6+
export const RELAY_AXIOM_TRACE_DATASET = "t3-code-relay-traces";
87

98
export const relayTraceQuery = (query: string, dataset: string = RELAY_AXIOM_TRACE_DATASET) =>
109
`['${dataset}']\n${query}`;
@@ -22,9 +21,9 @@ export const relayAxiomQueryDatasetCapabilities = (
2221
});
2322

2423
export const provisionRelayObservability = Effect.gen(function* () {
25-
const events = yield* Axiom.Dataset("RelayEventsDataset", {
24+
const traces = yield* Axiom.Dataset("RelayTracesDataset", {
2625
name: RELAY_AXIOM_TRACE_DATASET,
27-
kind: "axiom:events:v1",
26+
kind: "otel:traces:v1",
2827
description: "T3 Code relay Worker HTTP request spans.",
2928
retentionDays: 30,
3029
useRetentionPeriod: true,
@@ -33,25 +32,22 @@ export const provisionRelayObservability = Effect.gen(function* () {
3332
const ingestToken = yield* Axiom.ApiToken("RelayAxiomIngestToken", {
3433
name: "t3-code-relay-otel-ingest",
3534
description: "Owned by Alchemy. Scoped OTLP ingest token for relay HTTP spans.",
36-
datasetCapabilities: Output.map(events.name, relayAxiomIngestDatasetCapabilities),
35+
datasetCapabilities: relayAxiomIngestDatasetCapabilities(),
3736
});
3837
const queryToken = yield* Axiom.ApiToken("RelayAxiomQueryToken", {
3938
name: "t3-code-relay-readonly-query",
4039
description: "Owned by Alchemy. Read-only query token for relay HTTP span diagnostics.",
41-
datasetCapabilities: Output.map(events.name, relayAxiomQueryDatasetCapabilities),
40+
datasetCapabilities: relayAxiomQueryDatasetCapabilities(),
4241
});
4342

4443
yield* Axiom.View("RelayRecentSpansView", {
4544
name: "t3-code-relay-recent-spans",
4645
description: "Recent relay HTTP request spans.",
47-
datasets: [events.name],
48-
aplQuery: Output.map(events.name, (dataset) =>
49-
relayTraceQuery(
50-
"| where isnotnull(span_id) or isnotnull(trace_id)\n| project _time, name, trace_id, span_id, duration, ['http.request.method'], ['url.path'], ['http.response.status_code'], ['relay.endpoint']\n| order by _time desc\n| limit 200",
51-
dataset,
52-
),
46+
datasets: [RELAY_AXIOM_TRACE_DATASET],
47+
aplQuery: relayTraceQuery(
48+
"| where isnotnull(span_id) or isnotnull(trace_id)\n| project _time, name, trace_id, span_id, duration, ['http.request.method'], ['url.path'], ['http.response.status_code'], ['relay.endpoint']\n| order by _time desc\n| limit 200",
5349
),
5450
});
5551

56-
return { events, ingestToken, queryToken } as const;
52+
return { traces, ingestToken, queryToken } as const;
5753
});

infra/relay/src/worker.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import {
3838
managedEndpointProvisionerTokenPolicies,
3939
} from "./infra/ManagedEndpointStackConfig.ts";
4040
import {
41+
RELAY_AXIOM_TRACE_DATASET,
4142
RELAY_OBSERVABILITY_EXPORT_INTERVAL,
4243
RELAY_OBSERVABILITY_SERVICE_NAME,
4344
provisionRelayObservability,
@@ -82,7 +83,7 @@ const makeAxiomHeaders = (input: {
8283

8384
const makeRelayTraceLayer = (input: {
8485
readonly tracesEndpoint: string;
85-
readonly eventsDatasetName: string;
86+
readonly tracesDatasetName: string;
8687
readonly ingestToken: Redacted.Redacted<string>;
8788
}) =>
8889
OtlpTracer.layer({
@@ -96,7 +97,7 @@ const makeRelayTraceLayer = (input: {
9697
},
9798
headers: makeAxiomHeaders({
9899
token: input.ingestToken,
99-
dataset: input.eventsDatasetName,
100+
dataset: input.tracesDatasetName,
100101
}),
101102
exportInterval: RELAY_OBSERVABILITY_EXPORT_INTERVAL,
102103
}).pipe(Layer.provide(OtlpSerialization.layerJson), Layer.provide(FetchHttpClient.layer));
@@ -138,13 +139,16 @@ export default class Api extends Cloudflare.Worker<Api>()(
138139
const apnsPrivateKey = yield* Config.redacted("APNS_PRIVATE_KEY");
139140
const relayObservability = yield* provisionRelayObservability;
140141
const axiomIngestToken = yield* relayObservability.ingestToken.token;
141-
const axiomTracesEndpoint = yield* relayObservability.events.otelTracesEndpoint;
142-
const axiomEventsDatasetName = yield* relayObservability.events.name;
142+
const axiomTracesEndpoint = yield* relayObservability.traces.otelTracesEndpoint;
143143
const relayTraceLayer = Effect.all({
144144
tracesEndpoint: axiomTracesEndpoint,
145-
eventsDatasetName: axiomEventsDatasetName,
146145
ingestToken: axiomIngestToken,
147-
}).pipe(Effect.map(makeRelayTraceLayer), Layer.unwrap);
146+
}).pipe(
147+
Effect.map((input) =>
148+
makeRelayTraceLayer({ ...input, tracesDatasetName: RELAY_AXIOM_TRACE_DATASET }),
149+
),
150+
Layer.unwrap,
151+
);
148152
const randomApnsDeliveryJobSigningSecret = yield* Alchemy.Random(
149153
"ApnsDeliveryJobSigningSecret",
150154
{ bytes: 32 },

0 commit comments

Comments
 (0)