@smthrs/observability 0.35.0 → 1.0.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/LICENSE +1 -1
- package/README.md +84 -0
- package/dist/cjs/BrowserOtel.d.ts +37 -0
- package/dist/cjs/BrowserOtel.d.ts.map +1 -0
- package/dist/cjs/BrowserOtel.js +47 -0
- package/dist/cjs/BrowserOtel.js.map +7 -0
- package/dist/cjs/Endpoint.d.ts +70 -0
- package/dist/cjs/Endpoint.d.ts.map +1 -0
- package/dist/cjs/Endpoint.js +85 -0
- package/dist/cjs/Endpoint.js.map +7 -0
- package/dist/cjs/JournalLogger.d.ts +232 -0
- package/dist/cjs/JournalLogger.d.ts.map +1 -0
- package/dist/cjs/JournalLogger.js +388 -0
- package/dist/cjs/JournalLogger.js.map +7 -0
- package/dist/cjs/Logger.d.ts +55 -0
- package/dist/cjs/Logger.d.ts.map +1 -0
- package/dist/cjs/Logger.js +72 -0
- package/dist/cjs/Logger.js.map +7 -0
- package/dist/cjs/Metric.d.ts +67 -0
- package/dist/cjs/Metric.d.ts.map +1 -0
- package/dist/cjs/Metric.js +68 -0
- package/dist/cjs/Metric.js.map +7 -0
- package/dist/cjs/NodeOtel.d.ts +42 -0
- package/dist/cjs/NodeOtel.d.ts.map +1 -0
- package/dist/cjs/NodeOtel.js +78 -0
- package/dist/cjs/NodeOtel.js.map +7 -0
- package/dist/cjs/Otel.d.ts +62 -0
- package/dist/cjs/Otel.d.ts.map +1 -0
- package/dist/cjs/Otel.js +75 -0
- package/dist/cjs/Otel.js.map +7 -0
- package/dist/cjs/Otlp.d.ts +200 -0
- package/dist/cjs/Otlp.d.ts.map +1 -0
- package/dist/cjs/Otlp.js +235 -0
- package/dist/cjs/Otlp.js.map +7 -0
- package/dist/cjs/Resource.d.ts +162 -0
- package/dist/cjs/Resource.d.ts.map +1 -0
- package/dist/cjs/Resource.js +186 -0
- package/dist/cjs/Resource.js.map +7 -0
- package/dist/cjs/index.d.ts +61 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +47 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/schemaIssuePath.d.ts +31 -0
- package/dist/cjs/internal/schemaIssuePath.d.ts.map +1 -0
- package/dist/cjs/internal/schemaIssuePath.js +49 -0
- package/dist/cjs/internal/schemaIssuePath.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/BrowserOtel.d.ts +37 -0
- package/dist/esm/BrowserOtel.d.ts.map +1 -0
- package/dist/esm/BrowserOtel.js +24 -0
- package/dist/esm/BrowserOtel.js.map +1 -0
- package/dist/esm/Endpoint.d.ts +70 -0
- package/dist/esm/Endpoint.d.ts.map +1 -0
- package/dist/esm/Endpoint.js +110 -0
- package/dist/esm/Endpoint.js.map +1 -0
- package/dist/esm/JournalLogger.d.ts +232 -0
- package/dist/esm/JournalLogger.d.ts.map +1 -0
- package/dist/esm/JournalLogger.js +482 -0
- package/dist/esm/JournalLogger.js.map +1 -0
- package/dist/esm/Logger.d.ts +55 -0
- package/dist/esm/Logger.d.ts.map +1 -0
- package/dist/esm/Logger.js +60 -0
- package/dist/esm/Logger.js.map +1 -0
- package/dist/esm/Metric.d.ts +67 -0
- package/dist/esm/Metric.d.ts.map +1 -0
- package/dist/esm/Metric.js +80 -0
- package/dist/esm/Metric.js.map +1 -0
- package/dist/esm/NodeOtel.d.ts +42 -0
- package/dist/esm/NodeOtel.d.ts.map +1 -0
- package/dist/esm/NodeOtel.js +56 -0
- package/dist/esm/NodeOtel.js.map +1 -0
- package/dist/esm/Otel.d.ts +62 -0
- package/dist/esm/Otel.d.ts.map +1 -0
- package/dist/esm/Otel.js +51 -0
- package/dist/esm/Otel.js.map +1 -0
- package/dist/esm/Otlp.d.ts +200 -0
- package/dist/esm/Otlp.d.ts.map +1 -0
- package/dist/esm/Otlp.js +350 -0
- package/dist/esm/Otlp.js.map +1 -0
- package/dist/esm/Resource.d.ts +162 -0
- package/dist/esm/Resource.d.ts.map +1 -0
- package/dist/esm/Resource.js +237 -0
- package/dist/esm/Resource.js.map +1 -0
- package/dist/esm/index.d.ts +61 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +61 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/schemaIssuePath.d.ts +31 -0
- package/dist/esm/internal/schemaIssuePath.d.ts.map +1 -0
- package/dist/esm/internal/schemaIssuePath.js +59 -0
- package/dist/esm/internal/schemaIssuePath.js.map +1 -0
- package/docs/README.md +162 -0
- package/docs/api.md +768 -0
- package/docs/concepts/instrumentation-and-export.md +68 -0
- package/docs/concepts/layer-map.md +72 -0
- package/docs/concepts/validated-acquisition.md +105 -0
- package/docs/guides/export-to-a-collector.md +167 -0
- package/docs/guides/forward-logs-to-the-journal.md +226 -0
- package/docs/guides/install-a-logger.md +111 -0
- package/docs/guides/read-runtime-metrics.md +83 -0
- package/docs/guides/testing.md +134 -0
- package/docs/guides/wire-an-opentelemetry-sdk.md +220 -0
- package/docs/installation.md +98 -0
- package/docs/quickstart.md +145 -0
- package/docs/troubleshooting.md +168 -0
- package/package.json +221 -32
- package/src/BrowserOtel.ts +51 -0
- package/src/Endpoint.ts +131 -0
- package/src/JournalLogger.ts +596 -0
- package/src/Logger.ts +106 -0
- package/src/Metric.ts +88 -0
- package/src/NodeOtel.ts +90 -0
- package/src/Otel.ts +117 -0
- package/src/Otlp.ts +477 -0
- package/src/Resource.ts +324 -0
- package/src/index.ts +67 -0
- package/src/internal/schemaIssuePath.ts +65 -0
- package/docker-compose.otel.yml +0 -104
- package/grafana/dashboards/smithers-dashboard.json +0 -453
- package/grafana/provisioning/dashboards/dashboards.yml +0 -12
- package/grafana/provisioning/datasources/datasources.yml +0 -49
- package/loki/loki-config.yaml +0 -35
- package/otel-collector-config.yml +0 -38
- package/prometheus/prometheus.yml +0 -8
- package/src/MetricName.ts +0 -1
- package/src/MetricsServiceLive.js +0 -9
- package/src/README.md +0 -28
- package/src/ResolvedSmithersObservabilityOptions.ts +0 -12
- package/src/SmithersEvent.ts +0 -843
- package/src/SmithersLogFormat.ts +0 -1
- package/src/SmithersMetricDefinition.ts +0 -15
- package/src/SmithersMetricType.ts +0 -1
- package/src/SmithersMetricUnit.ts +0 -1
- package/src/SmithersObservability.js +0 -15
- package/src/SmithersObservabilityOptions.ts +0 -12
- package/src/SmithersObservabilityService.ts +0 -13
- package/src/_coreCorrelation/CorrelationContext.ts +0 -10
- package/src/_coreCorrelation/CorrelationContextLive.js +0 -11
- package/src/_coreCorrelation/CorrelationContextService.js +0 -15
- package/src/_coreCorrelation/CorrelationContextServiceShape.ts +0 -12
- package/src/_coreCorrelation/CorrelationPatch.ts +0 -3
- package/src/_coreCorrelation/README.md +0 -20
- package/src/_coreCorrelation/_correlationStorage.js +0 -4
- package/src/_coreCorrelation/correlationContextFiberRef.js +0 -5
- package/src/_coreCorrelation/correlationContextToLogAnnotations.js +0 -18
- package/src/_coreCorrelation/getCurrentCorrelationContext.js +0 -9
- package/src/_coreCorrelation/getCurrentCorrelationContextEffect.js +0 -11
- package/src/_coreCorrelation/index.js +0 -14
- package/src/_coreCorrelation/mergeCorrelationContext.js +0 -51
- package/src/_coreCorrelation/runWithCorrelationContext.js +0 -14
- package/src/_coreCorrelation/updateCurrentCorrelationContext.js +0 -17
- package/src/_coreCorrelation/withCorrelationContext.js +0 -38
- package/src/_coreCorrelation/withCurrentCorrelationContext.js +0 -11
- package/src/_coreMetrics.js +0 -14
- package/src/_coreMetricsShape.ts +0 -44
- package/src/_corePrometheus.js +0 -91
- package/src/_corePrometheusShape.ts +0 -11
- package/src/_coreTracing.js +0 -132
- package/src/_coreTracingShape.ts +0 -17
- package/src/_otelLogBuilders.js +0 -102
- package/src/_sessionFileResolvers.js +0 -164
- package/src/_smithersSpanAttributeAliases.js +0 -19
- package/src/_smithersTraceSpanStorage.js +0 -3
- package/src/_traceEventNormalizers.js +0 -499
- package/src/_traceRedaction.js +0 -162
- package/src/agentSessionEventToOtelLogRecord.js +0 -55
- package/src/agentTrace.ts +0 -144
- package/src/agentTraceCapabilities.js +0 -151
- package/src/annotateSmithersTrace.js +0 -11
- package/src/canonicalTraceEventToOtelLogRecord.js +0 -55
- package/src/correlation.js +0 -56
- package/src/createSmithersObservabilityLayer.js +0 -59
- package/src/createSmithersOtelLayer.js +0 -23
- package/src/createSmithersRuntimeLayer.js +0 -2
- package/src/detectAgentFamily.js +0 -26
- package/src/detectCaptureMode.js +0 -29
- package/src/emitOtelLogRecord.js +0 -19
- package/src/getCurrentSmithersTraceAnnotations.js +0 -14
- package/src/getCurrentSmithersTraceSpan.js +0 -7
- package/src/index.d.ts +0 -1392
- package/src/index.js +0 -137
- package/src/kindPhase.js +0 -17
- package/src/logging.js +0 -264
- package/src/makeSmithersSpanAttributes.js +0 -20
- package/src/metrics/README.md +0 -22
- package/src/metrics/SmithersMetricDefinition.ts +0 -17
- package/src/metrics/SmithersMetricType.ts +0 -1
- package/src/metrics/SmithersMetricUnit.ts +0 -1
- package/src/metrics/_asyncExternalWaitCounts.js +0 -4
- package/src/metrics/_buckets.js +0 -37
- package/src/metrics/_incrementGauge.js +0 -11
- package/src/metrics/_processStartMs.js +0 -1
- package/src/metrics/activeNodes.js +0 -2
- package/src/metrics/activeRuns.js +0 -2
- package/src/metrics/agentActionsTotal.js +0 -2
- package/src/metrics/agentDurationMs.js +0 -3
- package/src/metrics/agentErrorsTotal.js +0 -2
- package/src/metrics/agentEventsTotal.js +0 -2
- package/src/metrics/agentInvocationsTotal.js +0 -2
- package/src/metrics/agentRetriesTotal.js +0 -2
- package/src/metrics/agentSessionsTotal.js +0 -2
- package/src/metrics/agentTokensTotal.js +0 -2
- package/src/metrics/alertDeliveriesAttempted.js +0 -2
- package/src/metrics/alertDeliveriesSuppressed.js +0 -2
- package/src/metrics/alertsAcknowledgedTotal.js +0 -2
- package/src/metrics/alertsActive.js +0 -2
- package/src/metrics/alertsEscalatedTotal.js +0 -2
- package/src/metrics/alertsFiredTotal.js +0 -2
- package/src/metrics/alertsReopenedTotal.js +0 -2
- package/src/metrics/alertsResolvedTotal.js +0 -2
- package/src/metrics/alertsSilencedTotal.js +0 -2
- package/src/metrics/approvalPending.js +0 -2
- package/src/metrics/approvalWaitDuration.js +0 -5
- package/src/metrics/approvalsDenied.js +0 -2
- package/src/metrics/approvalsGranted.js +0 -2
- package/src/metrics/approvalsRequested.js +0 -2
- package/src/metrics/attemptDuration.js +0 -3
- package/src/metrics/attentionBacklog.js +0 -2
- package/src/metrics/cacheHits.js +0 -2
- package/src/metrics/cacheMisses.js +0 -2
- package/src/metrics/dbQueryDuration.js +0 -3
- package/src/metrics/dbRetries.js +0 -2
- package/src/metrics/dbTransactionDuration.js +0 -3
- package/src/metrics/dbTransactionRetries.js +0 -2
- package/src/metrics/dbTransactionRollbacks.js +0 -2
- package/src/metrics/devtoolsActiveSubscribers.js +0 -2
- package/src/metrics/devtoolsBackpressureDisconnectTotal.js +0 -2
- package/src/metrics/devtoolsDeltaBuildMs.js +0 -3
- package/src/metrics/devtoolsEventBytes.js +0 -3
- package/src/metrics/devtoolsEventTotal.js +0 -2
- package/src/metrics/devtoolsSnapshotBuildMs.js +0 -5
- package/src/metrics/devtoolsSubscribeTotal.js +0 -2
- package/src/metrics/errorsTotal.js +0 -2
- package/src/metrics/eventsEmittedTotal.js +0 -2
- package/src/metrics/externalWaitAsyncPending.js +0 -2
- package/src/metrics/gatewayApprovalDecisionsTotal.js +0 -2
- package/src/metrics/gatewayAuthEventsTotal.js +0 -2
- package/src/metrics/gatewayConnectionsActive.js +0 -2
- package/src/metrics/gatewayConnectionsClosedTotal.js +0 -2
- package/src/metrics/gatewayConnectionsTotal.js +0 -2
- package/src/metrics/gatewayCronTriggersTotal.js +0 -2
- package/src/metrics/gatewayErrorsTotal.js +0 -2
- package/src/metrics/gatewayHeartbeatTicksTotal.js +0 -2
- package/src/metrics/gatewayMessagesReceivedTotal.js +0 -2
- package/src/metrics/gatewayMessagesSentTotal.js +0 -2
- package/src/metrics/gatewayRpcCallsTotal.js +0 -2
- package/src/metrics/gatewayRpcDuration.js +0 -3
- package/src/metrics/gatewayRunEventBackpressureDisconnectTotal.js +0 -4
- package/src/metrics/gatewayRunsCompletedTotal.js +0 -2
- package/src/metrics/gatewayRunsStartedTotal.js +0 -2
- package/src/metrics/gatewaySignalsTotal.js +0 -2
- package/src/metrics/gatewayWebhooksReceivedTotal.js +0 -2
- package/src/metrics/gatewayWebhooksRejectedTotal.js +0 -2
- package/src/metrics/gatewayWebhooksVerifiedTotal.js +0 -2
- package/src/metrics/heartbeatDataSizeBytes.js +0 -5
- package/src/metrics/heartbeatIntervalMs.js +0 -3
- package/src/metrics/hotReloadDuration.js +0 -3
- package/src/metrics/hotReloadFailures.js +0 -2
- package/src/metrics/hotReloads.js +0 -2
- package/src/metrics/httpRequestDuration.js +0 -3
- package/src/metrics/httpRequests.js +0 -2
- package/src/metrics/index.d.ts +0 -1222
- package/src/metrics/index.js +0 -168
- package/src/metrics/memoryFactReads.js +0 -3
- package/src/metrics/memoryFactWrites.js +0 -3
- package/src/metrics/memoryMessageSaves.js +0 -3
- package/src/metrics/memoryRecallDuration.js +0 -11
- package/src/metrics/memoryRecallQueries.js +0 -3
- package/src/metrics/metricsServiceAdapter.js +0 -181
- package/src/metrics/nodeDuration.js +0 -3
- package/src/metrics/nodeRetriesTotal.js +0 -2
- package/src/metrics/nodesFailed.js +0 -2
- package/src/metrics/nodesFinished.js +0 -2
- package/src/metrics/nodesStarted.js +0 -2
- package/src/metrics/openApiToolCallErrorsTotal.js +0 -3
- package/src/metrics/openApiToolCallsTotal.js +0 -3
- package/src/metrics/openApiToolDuration.js +0 -9
- package/src/metrics/processHeapUsedBytes.js +0 -2
- package/src/metrics/processMemoryRssBytes.js +0 -2
- package/src/metrics/processUptimeSeconds.js +0 -2
- package/src/metrics/promptSizeBytes.js +0 -3
- package/src/metrics/replaysStarted.js +0 -3
- package/src/metrics/responseSizeBytes.js +0 -3
- package/src/metrics/rewindDurationMs.js +0 -3
- package/src/metrics/rewindFramesDeleted.js +0 -3
- package/src/metrics/rewindRollbackTotal.js +0 -2
- package/src/metrics/rewindSandboxesReverted.js +0 -3
- package/src/metrics/rewindTotal.js +0 -2
- package/src/metrics/runDuration.js +0 -3
- package/src/metrics/runForksCreated.js +0 -3
- package/src/metrics/runsAncestryDepth.js +0 -3
- package/src/metrics/runsCancelledTotal.js +0 -2
- package/src/metrics/runsCarriedStateBytes.js +0 -5
- package/src/metrics/runsContinuedTotal.js +0 -2
- package/src/metrics/runsFailedTotal.js +0 -2
- package/src/metrics/runsFinishedTotal.js +0 -2
- package/src/metrics/runsResumedTotal.js +0 -2
- package/src/metrics/runsTotal.js +0 -2
- package/src/metrics/sandboxActive.js +0 -2
- package/src/metrics/sandboxBundleSizeBytes.js +0 -5
- package/src/metrics/sandboxCompletedTotal.js +0 -2
- package/src/metrics/sandboxCreatedTotal.js +0 -2
- package/src/metrics/sandboxDurationMs.js +0 -3
- package/src/metrics/sandboxPatchCount.js +0 -3
- package/src/metrics/sandboxTransportDurationMs.js +0 -5
- package/src/metrics/schedulerConcurrencyUtilization.js +0 -2
- package/src/metrics/schedulerQueueDepth.js +0 -2
- package/src/metrics/schedulerWaitDuration.js +0 -5
- package/src/metrics/scorerDuration.js +0 -9
- package/src/metrics/scorerEventsFailed.js +0 -2
- package/src/metrics/scorerEventsFinished.js +0 -2
- package/src/metrics/scorerEventsStarted.js +0 -2
- package/src/metrics/scorersFailed.js +0 -3
- package/src/metrics/scorersFinished.js +0 -3
- package/src/metrics/scorersStarted.js +0 -3
- package/src/metrics/smithersMetricCatalog.js +0 -893
- package/src/metrics/smithersMetricCatalogByKey.js +0 -2
- package/src/metrics/smithersMetricCatalogByName.js +0 -2
- package/src/metrics/smithersMetricCatalogByPrometheusName.js +0 -4
- package/src/metrics/snapshotDuration.js +0 -9
- package/src/metrics/snapshotsCaptured.js +0 -3
- package/src/metrics/supervisorPollDuration.js +0 -5
- package/src/metrics/supervisorPollsTotal.js +0 -2
- package/src/metrics/supervisorResumeLag.js +0 -5
- package/src/metrics/supervisorResumedTotal.js +0 -2
- package/src/metrics/supervisorSkippedTotal.js +0 -2
- package/src/metrics/supervisorStaleDetected.js +0 -2
- package/src/metrics/taskHeartbeatTimeoutTotal.js +0 -2
- package/src/metrics/taskHeartbeatsTotal.js +0 -2
- package/src/metrics/timerDelayDuration.js +0 -3
- package/src/metrics/timersCancelled.js +0 -2
- package/src/metrics/timersCreated.js +0 -2
- package/src/metrics/timersFired.js +0 -2
- package/src/metrics/timersPending.js +0 -2
- package/src/metrics/toPrometheusMetricName.js +0 -8
- package/src/metrics/tokensCacheReadTotal.js +0 -2
- package/src/metrics/tokensCacheWriteTotal.js +0 -2
- package/src/metrics/tokensContextWindowBucketTotal.js +0 -2
- package/src/metrics/tokensContextWindowPerCall.js +0 -5
- package/src/metrics/tokensInputPerCall.js +0 -3
- package/src/metrics/tokensInputTotal.js +0 -2
- package/src/metrics/tokensOutputPerCall.js +0 -3
- package/src/metrics/tokensOutputTotal.js +0 -2
- package/src/metrics/tokensReasoningTotal.js +0 -2
- package/src/metrics/toolCallErrorsTotal.js +0 -2
- package/src/metrics/toolCallsTotal.js +0 -2
- package/src/metrics/toolDuration.js +0 -3
- package/src/metrics/toolOutputTruncatedTotal.js +0 -2
- package/src/metrics/trackEvent.js +0 -608
- package/src/metrics/updateAsyncExternalWaitPending.js +0 -18
- package/src/metrics/updateProcessMetrics.js +0 -20
- package/src/metrics/vcsDuration.js +0 -3
- package/src/normalizeStructuredEvent.js +0 -15
- package/src/prometheusContentType.js +0 -1
- package/src/renderPrometheusMetrics.js +0 -212
- package/src/resolveAgentTraceCapabilities.js +0 -59
- package/src/resolveSmithersObservabilityOptions.js +0 -109
- package/src/smithersMetrics.js +0 -2
- package/src/smithersSpanNames.js +0 -6
- package/src/unsupportedKindsForCapabilities.js +0 -32
- package/src/withSmithersSpan.js +0 -17
- package/tempo/tempo.yml +0 -17
package/src/Metric.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effect metric registry for flows runtime signals.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as Metric from "effect/Metric"
|
|
8
|
+
|
|
9
|
+
const prefix = "flows_"
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Counts flow runs that reached a terminal state.
|
|
13
|
+
*
|
|
14
|
+
* @category metrics
|
|
15
|
+
* @since 0.1.0
|
|
16
|
+
*/
|
|
17
|
+
export const runThroughput = Metric.counter(`${prefix}run_throughput`, {
|
|
18
|
+
description: "Completed flow runs"
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The number of execution seats currently held.
|
|
23
|
+
*
|
|
24
|
+
* @category metrics
|
|
25
|
+
* @since 0.1.0
|
|
26
|
+
*/
|
|
27
|
+
export const activeSeats = Metric.gauge(`${prefix}seat_active`, {
|
|
28
|
+
description: "Currently active execution seats"
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Counts runs parked because a quota was exhausted.
|
|
33
|
+
*
|
|
34
|
+
* @category metrics
|
|
35
|
+
* @since 0.1.0
|
|
36
|
+
*/
|
|
37
|
+
export const quotaParks = Metric.counter(`${prefix}quota_park`, {
|
|
38
|
+
description: "Runs parked by quota enforcement"
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Counts agent answers refused by their declared output schema.
|
|
43
|
+
*
|
|
44
|
+
* @category metrics
|
|
45
|
+
* @since 1.0.0-rc.1
|
|
46
|
+
*/
|
|
47
|
+
export const structuredOutputRejections = Metric.counter(`${prefix}agent_structured_output_rejections`, {
|
|
48
|
+
description: "Agent answers refused by their declared output schema"
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Counts agent steps that failed after spending every output correction.
|
|
53
|
+
*
|
|
54
|
+
* @category metrics
|
|
55
|
+
* @since 1.0.0-rc.1
|
|
56
|
+
*/
|
|
57
|
+
export const structuredOutputExhausted = Metric.counter(`${prefix}agent_structured_output_exhausted`, {
|
|
58
|
+
description: "Agent steps whose output corrections were exhausted"
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Counts operational log records lost before durable delivery.
|
|
63
|
+
*
|
|
64
|
+
* Advances once per record dropped by a saturated forwarding queue, once per
|
|
65
|
+
* journal delivery failure, and once per defect the forwarding worker recovers
|
|
66
|
+
* from, so telemetry loss is distinguishable from an idle logger.
|
|
67
|
+
*
|
|
68
|
+
* @category metrics
|
|
69
|
+
* @since 1.0.0-rc.0
|
|
70
|
+
*/
|
|
71
|
+
export const droppedLogRecords = Metric.counter(`${prefix}observability_log_dropped`, {
|
|
72
|
+
description: "Operational log records dropped before durable delivery"
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* All metrics declared by this package.
|
|
77
|
+
*
|
|
78
|
+
* @category registry
|
|
79
|
+
* @since 0.1.0
|
|
80
|
+
*/
|
|
81
|
+
export const registry = {
|
|
82
|
+
runThroughput,
|
|
83
|
+
activeSeats,
|
|
84
|
+
quotaParks,
|
|
85
|
+
structuredOutputRejections,
|
|
86
|
+
structuredOutputExhausted,
|
|
87
|
+
droppedLogRecords
|
|
88
|
+
} as const
|
package/src/NodeOtel.ts
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node-only OTLP/HTTP OpenTelemetry setup.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as NodeSdk from "@effect/opentelemetry/NodeSdk"
|
|
8
|
+
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"
|
|
9
|
+
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http"
|
|
10
|
+
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"
|
|
11
|
+
import { BatchLogRecordProcessor } from "@opentelemetry/sdk-logs"
|
|
12
|
+
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics"
|
|
13
|
+
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base"
|
|
14
|
+
import * as ConfigProvider from "effect/ConfigProvider"
|
|
15
|
+
import type * as Duration from "effect/Duration"
|
|
16
|
+
import * as Effect from "effect/Effect"
|
|
17
|
+
import * as Layer from "effect/Layer"
|
|
18
|
+
import * as Endpoint from "./Endpoint.ts"
|
|
19
|
+
import * as Resource from "./Resource.ts"
|
|
20
|
+
import type { Configuration as ResourceConfiguration } from "./Resource.ts"
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Node OTLP/HTTP layer options.
|
|
24
|
+
*
|
|
25
|
+
* @category models
|
|
26
|
+
* @since 0.1.0
|
|
27
|
+
*/
|
|
28
|
+
export interface Options {
|
|
29
|
+
/**
|
|
30
|
+
* The collector base URL. It must be an absolute `http:` or `https:` URL
|
|
31
|
+
* without credentials and free of spaces and control characters; anything
|
|
32
|
+
* else fails layer acquisition with
|
|
33
|
+
* {@link Endpoint.InvalidExporterEndpoint}.
|
|
34
|
+
*/
|
|
35
|
+
readonly endpoint: string
|
|
36
|
+
readonly resource: ResourceConfiguration
|
|
37
|
+
readonly shutdownTimeout?: Duration.Input | undefined
|
|
38
|
+
readonly exportIntervalMillis?: number | undefined
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Builds a scoped Node OTLP/HTTP layer for all three telemetry signals.
|
|
43
|
+
* Exporter objects are created only when this layer is built.
|
|
44
|
+
* Resource metadata is explicit: ambient OTEL resource configuration cannot
|
|
45
|
+
* enlarge it after validation. The OpenTelemetry exporters still read the
|
|
46
|
+
* standard `OTEL_EXPORTER_OTLP_*` transport variables (headers, timeout,
|
|
47
|
+
* compression, TLS files) from the process environment and send them to the
|
|
48
|
+
* explicit endpoint, which always wins over `OTEL_EXPORTER_OTLP_ENDPOINT`.
|
|
49
|
+
*
|
|
50
|
+
* @category layers
|
|
51
|
+
* @since 0.1.0
|
|
52
|
+
*/
|
|
53
|
+
export const layerOtel = (
|
|
54
|
+
options: Options
|
|
55
|
+
): Layer.Layer<never, Resource.InvalidResourceConfiguration | Endpoint.InvalidExporterEndpoint> =>
|
|
56
|
+
Layer.unwrap(
|
|
57
|
+
Effect.map(
|
|
58
|
+
Effect.all([Resource.decode(options.resource), Endpoint.decode(options.endpoint, "endpoint")]),
|
|
59
|
+
([decoded, endpoint]) =>
|
|
60
|
+
NodeSdk.layer(() => {
|
|
61
|
+
const resource = Resource.toOpenTelemetryConfiguration(decoded)
|
|
62
|
+
const spanProcessor = new BatchSpanProcessor(
|
|
63
|
+
new OTLPTraceExporter({ url: Endpoint.signalUrl(endpoint, "traces") })
|
|
64
|
+
)
|
|
65
|
+
const logRecordProcessor = new BatchLogRecordProcessor({
|
|
66
|
+
exporter: new OTLPLogExporter({ url: Endpoint.signalUrl(endpoint, "logs") })
|
|
67
|
+
})
|
|
68
|
+
const metricReader = options.exportIntervalMillis === undefined
|
|
69
|
+
? new PeriodicExportingMetricReader({
|
|
70
|
+
exporter: new OTLPMetricExporter({ url: Endpoint.signalUrl(endpoint, "metrics") })
|
|
71
|
+
})
|
|
72
|
+
: new PeriodicExportingMetricReader({
|
|
73
|
+
exporter: new OTLPMetricExporter({ url: Endpoint.signalUrl(endpoint, "metrics") }),
|
|
74
|
+
exportIntervalMillis: options.exportIntervalMillis
|
|
75
|
+
})
|
|
76
|
+
return {
|
|
77
|
+
resource,
|
|
78
|
+
spanProcessor,
|
|
79
|
+
logRecordProcessor,
|
|
80
|
+
metricReader,
|
|
81
|
+
shutdownTimeout: options.shutdownTimeout
|
|
82
|
+
}
|
|
83
|
+
}).pipe(
|
|
84
|
+
// NodeSdk merges Resource.layerFromEnv after our admission check.
|
|
85
|
+
// Isolate that lookup so only the validated explicit resource and
|
|
86
|
+
// the SDK metadata already included in its budget reach exporters.
|
|
87
|
+
Layer.provide(ConfigProvider.layer(ConfigProvider.fromUnknown({})))
|
|
88
|
+
)
|
|
89
|
+
)
|
|
90
|
+
)
|
package/src/Otel.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral composition for injected OpenTelemetry providers.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as OtelLogger from "@effect/opentelemetry/OtelLogger"
|
|
8
|
+
import * as OtelMetrics from "@effect/opentelemetry/OtelMetrics"
|
|
9
|
+
import * as OtelTracer from "@effect/opentelemetry/OtelTracer"
|
|
10
|
+
import type * as Api from "@opentelemetry/api"
|
|
11
|
+
import type { LoggerProvider } from "@opentelemetry/sdk-logs"
|
|
12
|
+
import type { MetricReader } from "@opentelemetry/sdk-metrics"
|
|
13
|
+
import * as Effect from "effect/Effect"
|
|
14
|
+
import * as Layer from "effect/Layer"
|
|
15
|
+
import {
|
|
16
|
+
type Configuration as ResourceConfiguration,
|
|
17
|
+
type InvalidResourceConfiguration,
|
|
18
|
+
layer as resourceLayer,
|
|
19
|
+
Resource
|
|
20
|
+
} from "./Resource.ts"
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Injected providers used by the provider-neutral OTEL layer.
|
|
24
|
+
*
|
|
25
|
+
* @category models
|
|
26
|
+
* @since 0.1.0
|
|
27
|
+
*/
|
|
28
|
+
export interface Options {
|
|
29
|
+
/** Validated resource for metrics, tracer scope, and provider factories. */
|
|
30
|
+
readonly resource: ResourceConfiguration
|
|
31
|
+
/**
|
|
32
|
+
* Borrowed: the layer bridges onto this provider and never flushes or shuts
|
|
33
|
+
* it down, including a provider a factory returns. Existing providers retain
|
|
34
|
+
* their resource. Factories must pass the supplied resource to the SDK.
|
|
35
|
+
*/
|
|
36
|
+
readonly tracerProvider?:
|
|
37
|
+
| Api.TracerProvider
|
|
38
|
+
| ((resource: typeof Resource.Service) => Api.TracerProvider)
|
|
39
|
+
| undefined
|
|
40
|
+
/** Borrowed on the same terms as `tracerProvider`. */
|
|
41
|
+
readonly loggerProvider?:
|
|
42
|
+
| LoggerProvider
|
|
43
|
+
| ((resource: typeof Resource.Service) => LoggerProvider)
|
|
44
|
+
| undefined
|
|
45
|
+
/**
|
|
46
|
+
* Owned: the factory runs once during layer acquisition, after resource
|
|
47
|
+
* validation, and every reader it returns is shut down when the scope
|
|
48
|
+
* closes. Build the readers inside the factory rather than returning one a
|
|
49
|
+
* longer-lived composition still exports through, which that shutdown would
|
|
50
|
+
* disable. An empty array registers no reader at all.
|
|
51
|
+
*/
|
|
52
|
+
readonly metricReader?: (() => MetricReader | ReadonlyArray<MetricReader>) | undefined
|
|
53
|
+
readonly loggerMergeWithExisting?: boolean | undefined
|
|
54
|
+
readonly metricTemporality?: OtelMetrics.TemporalityPreference | undefined
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Composes Effect tracer, logger, and metric bridges from already-created
|
|
59
|
+
* OpenTelemetry providers or provider factories, and from metric readers this
|
|
60
|
+
* layer acquires. Factories run during layer acquisition after resource
|
|
61
|
+
* validation, and the provider factories receive the metric resource.
|
|
62
|
+
* Already-created providers keep the resource captured at construction; the
|
|
63
|
+
* resource option only sets metrics and tracer instrumentation scope for them.
|
|
64
|
+
* Ownership splits: callers own provider flushing and shutdown, including
|
|
65
|
+
* factory-built providers, while the layer scope shuts down every reader the
|
|
66
|
+
* `metricReader` factory returned. No exporter is allocated by this module.
|
|
67
|
+
*
|
|
68
|
+
* @category layers
|
|
69
|
+
* @since 0.1.0
|
|
70
|
+
*/
|
|
71
|
+
export const layerOtel = (options: Options): Layer.Layer<never, InvalidResourceConfiguration> => {
|
|
72
|
+
const resource = resourceLayer(options.resource)
|
|
73
|
+
const tracerProvider = options.tracerProvider
|
|
74
|
+
const loggerProvider = options.loggerProvider
|
|
75
|
+
const tracer = tracerProvider === undefined
|
|
76
|
+
? Layer.empty
|
|
77
|
+
: Layer.provide(
|
|
78
|
+
OtelTracer.layer,
|
|
79
|
+
Layer.effect(
|
|
80
|
+
OtelTracer.OtelTracerProvider,
|
|
81
|
+
Effect.map(
|
|
82
|
+
Resource,
|
|
83
|
+
(resource) => typeof tracerProvider === "function" ? tracerProvider(resource) : tracerProvider
|
|
84
|
+
)
|
|
85
|
+
)
|
|
86
|
+
)
|
|
87
|
+
const logger = loggerProvider === undefined
|
|
88
|
+
? Layer.empty
|
|
89
|
+
: Layer.provide(
|
|
90
|
+
OtelLogger.layer({ mergeWithExisting: options.loggerMergeWithExisting }),
|
|
91
|
+
Layer.effect(
|
|
92
|
+
OtelLogger.OtelLoggerProvider,
|
|
93
|
+
Effect.map(
|
|
94
|
+
Resource,
|
|
95
|
+
(resource) => typeof loggerProvider === "function" ? loggerProvider(resource) : loggerProvider
|
|
96
|
+
)
|
|
97
|
+
)
|
|
98
|
+
)
|
|
99
|
+
const acquireMetricReader = options.metricReader
|
|
100
|
+
const metrics = acquireMetricReader === undefined
|
|
101
|
+
? Layer.empty
|
|
102
|
+
: OtelMetrics.layer(
|
|
103
|
+
() => acquireMetricReader() as unknown as MetricReader | readonly [MetricReader, ...Array<MetricReader>],
|
|
104
|
+
{
|
|
105
|
+
temporality: options.metricTemporality
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
return Layer.mergeAll(tracer, logger, metrics).pipe(Layer.provideMerge(resource))
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* A no-op OTEL layer for callers that want an explicit optional slot.
|
|
113
|
+
*
|
|
114
|
+
* @category layers
|
|
115
|
+
* @since 0.1.0
|
|
116
|
+
*/
|
|
117
|
+
export const layerNoop: Layer.Layer<never> = Layer.empty
|