Skip to content

Commit

Permalink
chore: Update OpenTelemetry dependencies (#10941)
Browse files Browse the repository at this point in the history
Fixes #10937

## Description
Update OpenTelemetry dependencies and take advantage of the new functionality.

### Security Considerations
None known.

### Scaling Considerations


### Documentation Considerations
n/a

### Testing Considerations
Automated verification of Prometheus endpoint output will come later, but expected output was confirmed manually for now:
```
# HELP target_info Target metadata
# TYPE target_info gauge
target_info{service_name="agd-cosmos",telemetry_sdk_language="nodejs",telemetry_sdk_name="opentelemetry",telemetry_sdk_version="1.30.1",service_instance_id="0.38058012855521905"} 1
# HELP swingset_vat_startup Vat startup time (ms)
# TYPE swingset_vat_startup histogram
swingset_vat_startup_count 5 1738694524397
swingset_vat_startup_sum 2212 1738694524397
swingset_vat_startup_bucket{le="5"} 0 1738694524397
swingset_vat_startup_bucket{le="10"} 0 1738694524397
swingset_vat_startup_bucket{le="25"} 0 1738694524397
swingset_vat_startup_bucket{le="50"} 0 1738694524397
swingset_vat_startup_bucket{le="100"} 1 1738694524397
swingset_vat_startup_bucket{le="250"} 1 1738694524397
swingset_vat_startup_bucket{le="500"} 3 1738694524397
swingset_vat_startup_bucket{le="1000"} 5 1738694524397
swingset_vat_startup_bucket{le="2500"} 5 1738694524397
swingset_vat_startup_bucket{le="5000"} 5 1738694524397
swingset_vat_startup_bucket{le="10000"} 5 1738694524397
swingset_vat_startup_bucket{le="+Inf"} 5 1738694524397
# HELP swingset_all_syscall_total Total number of SwingSet kernel calls
# TYPE swingset_all_syscall_total counter
swingset_all_syscall_total 342 1738694524397
# HELP swingset_syscall_total Total number of SwingSet message send kernel calls
# TYPE swingset_syscall_total counter
swingset_syscall_total{syscall="send"} 1 1738694524397
swingset_syscall_total{syscall="callNow"} 0 1738694524397
swingset_syscall_total{syscall="subscribe"} 0 1738694524397
swingset_syscall_total{syscall="resolve"} 0 1738694524397
swingset_syscall_total{syscall="exit"} 0 1738694524397
swingset_syscall_total{syscall="vatstoreGet"} 136 1738694524397
swingset_syscall_total{syscall="vatstoreSet"} 183 1738694524397
swingset_syscall_total{syscall="vatstoreGetNext"} 22 1738694524397
swingset_syscall_total{syscall="vatstoreDelete"} 0 1738694524397
swingset_syscall_total{syscall="dropImports"} 0 1738694524397
```

### Upgrade Considerations
Changes should be unobservable outside of the cosmic-swingset Node.js process.
Verification in live networks should inspect Prometheus output[^1].

[^1]: as configured by environment variable `OTEL_EXPORTER_PROMETHEUS_PORT`.
  • Loading branch information
mergify[bot] authored Feb 6, 2025
2 parents 7b1656c + 2bea877 commit 9f48684
Show file tree
Hide file tree
Showing 9 changed files with 138 additions and 212 deletions.
4 changes: 2 additions & 2 deletions packages/cosmic-swingset/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@
"@endo/patterns": "^1.4.8",
"@endo/promise-kit": "^1.1.9",
"@iarna/toml": "^2.2.3",
"@opentelemetry/api": "~1.3.0",
"@opentelemetry/sdk-metrics": "~1.9.0",
"@opentelemetry/api": "~1.9.0",
"@opentelemetry/sdk-metrics": "~1.30.1",
"anylogger": "^0.21.0",
"deterministic-json": "^1.0.5",
"import-meta-resolve": "^2.2.1",
Expand Down
7 changes: 5 additions & 2 deletions packages/cosmic-swingset/src/chain-main.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@ import {
exportMailbox,
} from '@agoric/swingset-vat/src/devices/mailbox/mailbox.js';

import { makeSlogSender, tryFlushSlogSender } from '@agoric/telemetry';
import {
getTelemetryProviders,
makeSlogSender,
tryFlushSlogSender,
} from '@agoric/telemetry';

import {
makeChainStorageRoot,
Expand All @@ -44,7 +48,6 @@ import {
} from './helpers/bufferedStorage.js';
import stringify from './helpers/json-stable-stringify.js';
import { launch } from './launch-chain.js';
import { getTelemetryProviders } from './kernel-stats.js';
import { makeProcessValue } from './helpers/process-value.js';
import {
spawnSwingStoreExport,
Expand Down
40 changes: 5 additions & 35 deletions packages/cosmic-swingset/src/kernel-stats.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
// @ts-check
import {
ExplicitBucketHistogramAggregation,
MeterProvider,
View,
} from '@opentelemetry/sdk-metrics';
import { MeterProvider } from '@opentelemetry/sdk-metrics';

import { Fail } from '@endo/errors';
import { isNat } from '@endo/nat';
Expand All @@ -15,8 +11,6 @@ import {
KERNEL_STATS_UPDOWN_METRICS,
} from '@agoric/swingset-vat/src/kernel/metrics.js';

import { getTelemetryProviders as getTelemetryProvidersOriginal } from '@agoric/telemetry';

import v8 from 'node:v8';
import process from 'node:process';

Expand Down Expand Up @@ -132,42 +126,18 @@ const recordToKey = record =>
Object.entries(record).sort(([ka], [kb]) => (ka < kb ? -1 : 1)),
);

/**
* Return an array of Views defining explicit buckets for Histogram instruments
* to which we record measurements.
*/
export function getMetricsProviderViews() {
return Object.entries(HISTOGRAM_METRICS).map(
([instrumentName, { boundaries }]) =>
// TODO: Add `instrumentType: InstrumentType.HISTOGRAM` and `meterName`
// filters (the latter of which should be a parameter of the exported
// function).
new View({
instrumentName,
aggregation: new ExplicitBucketHistogramAggregation([...boundaries]),
}),
);
}

export function makeDefaultMeterProvider() {
return new MeterProvider({ views: getMetricsProviderViews() });
}

/** @param {Omit<NonNullable<Parameters<typeof getTelemetryProvidersOriginal>[0]>, 'views'>} [powers] */
export function getTelemetryProviders(powers = {}) {
return getTelemetryProvidersOriginal({
...powers,
views: getMetricsProviderViews(),
});
return new MeterProvider();
}

/**
* @param {OTelMeter} metricMeter
* @param {string} name
*/
function createHistogram(metricMeter, name) {
const { description } = HISTOGRAM_METRICS[name] || {};
return metricMeter.createHistogram(name, { description });
const { description, boundaries } = HISTOGRAM_METRICS[name] || {};
const advice = boundaries && { explicitBucketBoundaries: boundaries };
return metricMeter.createHistogram(name, { description, advice });
}

/**
Expand Down
3 changes: 1 addition & 2 deletions packages/cosmic-swingset/src/sim-chain.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@ import {

import anylogger from 'anylogger';

import { makeSlogSender } from '@agoric/telemetry';
import { getTelemetryProviders, makeSlogSender } from '@agoric/telemetry';

import { resolve as importMetaResolve } from 'import-meta-resolve';
import { makeWithQueue } from '@agoric/internal/src/queue.js';
import { makeBatchedDeliver } from '@agoric/internal/src/batched-deliver.js';
import stringify from './helpers/json-stable-stringify.js';
import { launch } from './launch-chain.js';
import { getTelemetryProviders } from './kernel-stats.js';
import { DEFAULT_SIM_SWINGSET_PARAMS, QueueInbound } from './sim-params.js';
import { parseQueueSizes } from './params.js';
import { makeKVStoreFromMap } from './helpers/bufferedStorage.js';
Expand Down
7 changes: 5 additions & 2 deletions packages/solo/src/start.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ import anylogger from 'anylogger';
// import djson from 'deterministic-json';

import { assert, Fail } from '@endo/errors';
import { makeSlogSender, tryFlushSlogSender } from '@agoric/telemetry';
import {
getTelemetryProviders,
makeSlogSender,
tryFlushSlogSender,
} from '@agoric/telemetry';
import {
loadSwingsetConfigFile,
buildCommand,
Expand All @@ -36,7 +40,6 @@ import { makeWithQueue } from '@agoric/internal/src/queue.js';
import { makeShutdown } from '@agoric/internal/src/node/shutdown.js';
import {
makeDefaultMeterProvider,
getTelemetryProviders,
makeSlogCallbacks,
exportKernelStats,
} from '@agoric/cosmic-swingset/src/kernel-stats.js';
Expand Down
20 changes: 10 additions & 10 deletions packages/telemetry/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@
"@endo/init": "^1.1.8",
"@endo/marshal": "^1.6.3",
"@endo/stream": "^1.2.9",
"@opentelemetry/api": "~1.3.0",
"@opentelemetry/api-logs": "0.53.0",
"@opentelemetry/exporter-prometheus": "~0.35.0",
"@opentelemetry/exporter-logs-otlp-http": "0.53.0",
"@opentelemetry/exporter-trace-otlp-http": "~0.35.0",
"@opentelemetry/resources": "~1.9.0",
"@opentelemetry/sdk-logs": "0.53.0",
"@opentelemetry/sdk-metrics": "~1.9.0",
"@opentelemetry/sdk-trace-base": "~1.9.0",
"@opentelemetry/semantic-conventions": "~1.27.0",
"@opentelemetry/api": "~1.9.0",
"@opentelemetry/api-logs": "0.57.1",
"@opentelemetry/exporter-prometheus": "~0.57.1",
"@opentelemetry/exporter-logs-otlp-http": "0.57.1",
"@opentelemetry/exporter-trace-otlp-http": "0.57.1",
"@opentelemetry/resources": "~1.30.1",
"@opentelemetry/sdk-logs": "0.57.1",
"@opentelemetry/sdk-metrics": "~1.30.1",
"@opentelemetry/sdk-trace-base": "~1.30.1",
"@opentelemetry/semantic-conventions": "~1.28.0",
"anylogger": "^0.21.0",
"better-sqlite3": "^9.1.1",
"tmp": "^0.2.1"
Expand Down
1 change: 1 addition & 0 deletions packages/telemetry/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ const getPrometheusMeterProvider = ({
const exporter = new PrometheusExporter(
{
port,
appendTimestamp: true,
},
() => {
console.warn(
Expand Down
12 changes: 11 additions & 1 deletion packages/telemetry/src/otel-trace.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,26 @@ export const SPAN_EXPORT_DELAY_MS = 1_000;
export const makeOtelTracingProvider = opts => {
const { env = process.env } = opts || {};

// https://opentelemetry.io/docs/concepts/signals/
// https://opentelemetry.io/docs/specs/otel/protocol/exporter/#endpoint-urls-for-otlphttp
// https://github.com/open-telemetry/opentelemetry-js/blob/experimental/v0.57.1/experimental/packages/exporter-trace-otlp-http/README.md#configuration-options-as-environment-variables
const { OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT } =
env;
if (!OTEL_EXPORTER_OTLP_ENDPOINT && !OTEL_EXPORTER_OTLP_TRACES_ENDPOINT) {
console.debug(
'Not enabling OTLP Traces Exporter; enable with OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=<target URL> or OTEL_EXPORTER_OTLP_ENDPOINT=<target URL prefix>',
);
return undefined;
}

const resource = new Resource(getResourceAttributes(opts));

const exporter = new OTLPTraceExporter();
console.info('Enabling OTLP Traces Exporter to', exporter.getDefaultUrl({}));
console.info(
'Enabling OTLP Traces Exporter to',
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ||
`${OTEL_EXPORTER_OTLP_ENDPOINT}/v1/traces`,
);

const provider = new BasicTracerProvider({ resource });
provider.addSpanProcessor(
Expand Down
Loading

0 comments on commit 9f48684

Please sign in to comment.