npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@fastly/compute-js-opentelemetry

v0.4.1

Published

OpenTelemetry SDK for Fastly Compute

Downloads

39

Readme

OpenTelemetry for JavaScript on Fastly Compute

An implementation of the OpenTelemetry JavaScript API for Fastly Compute.

Generate traces like this one to follow activity and time in your Compute applications:

Sample Trace

index.js:

/// <reference types="@fastly/js-compute" />

import './telemetry.js'
import { context, trace } from "@opentelemetry/api";

addEventListener("fetch", (event) => event.respondWith(handleRequest(event)));
async function handleRequest(event) {
  const tracer = trace.getTracerProvider()
    .getTracer('my-tracer');

  const mySpan = tracer.startSpan('my-task');
  context.with(trace.setSpan(context.active(), mySpan), () => {
    doTask();
  });
  mySpan.end();

  return new Response('OK', {
    status: 200,
    headers: new Headers({"Content-Type": "text/plain"}),
  });
}

telemetry.js:

import { context, trace } from "@opentelemetry/api";
import { Resource } from "@opentelemetry/resources";
import { SEMRESATTRS_SERVICE_NAME } from "@opentelemetry/semantic-conventions";

import { FastlySDK } from "@fastly/compute-js-opentelemetry/sdk-fastly";
import { OTLPTraceExporter } from "@fastly/compute-js-opentelemetry/exporter-trace-otlp-fastly-backend";
import { getComputeJsAutoInstrumentations } from "@fastly/compute-js-opentelemetry/auto-instrumentations-compute-js";

const sdk = new FastlySDK({
  traceExporter: new OTLPTraceExporter({ backend: 'otlp-collector' }),
  instrumentations: [ getComputeJsAutoInstrumentations(), ],
  resource: new Resource({ [SEMRESATTRS_SERVICE_NAME]: 'readme-demo', }),
});
await sdk.start();

This implementation extends the standard interfaces and objects provided by the OpenTelemetry JavaScript API and SDK, adapting them for use on the Fastly Compute platform.

New!

As of v0.3.0, @fastly/compute-js-opentelemetry no longer requires Webpack.

Additionally, if you're using the FastlySDK module, you will need @fastly/js-compute v3.11.0 or newer and enable Top Level Await. Find where you call the binary js-compute-runtime and add the flag like so js-compute-runtime --experimental-enable-top-level-await (This is usually in either package.json or fastly.toml).

Look at the demos included in this package for working examples.

Modules

Whereas opentelemetry-js would separate each concern into its own npm package, we provide our components as a single package with multiple exports.

| Module (links to documentation) | Export Name | Description | |--------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Fastly OpenTelemetry SDK | @fastly/compute-js-opentelemetry/opentelemetry-sdk-fastly | A utility library that simplifies the initialization and coordination of OpenTelemetry components in use with a Compute JavaScript application. | | Fastly Compute JavaScript Lifecycle instrumentation | @fastly/compute-js-opentelemetry/opentelemetry-instrumentation-fastly-compute-js | An instrumentation library that generates traces for the Compute application lifecycle. | | Fastly Backend Fetch instrumentation | @fastly/compute-js-opentelemetry/opentelemetry-instrumentation-fastly-backend-fetch | An instrumentation library that generates traces for fetch() calls to Fastly backends. | | Fastly Compute JavaScript auto-instrumentations | @fastly/compute-js-opentelemetry/auto-instrumentations-compute-js | A meta package that automatically loads instrumentations for Compute JavaScript. | | Trace SDK for Fastly | @fastly/compute-js-opentelemetry/opentelemetry-sdk-trace-fastly | Provides Span Processor, Tracer Provider, and Context Manager implementations for use with a Compute JavaScript application. | | Trace Exporter for Fastly backend | @fastly/compute-js-opentelemetry/exporter-trace-otlp-fastly-backend | A Span Exporter implementation that exports traces using the OTLP/HTTP JSON format over a Fastly backend. | | Trace Exporter for Fastly named log provider | @fastly/compute-js-opentelemetry/exporter-trace-otlp-fastly-logger | A Span Exporter implementation that exports traces using the OTLP/HTTP JSON format over a Fastly named log provider. | | Metrics SDK for Fastly | @fastly/compute-js-opentelemetry/opentelemetry-sdk-metrics-fastly | Provides a Metric Reader implementation for use with a Compute JavaScript application. | | Metrics Exporter for Fastly backend | @fastly/compute-js-opentelemetry/exporter-metrics-otlp-fastly-backend | A Metric Exporter implementation that exports metrics using the OTLP/HTTP JSON format over a Fastly backend. | | Metrics Exporter for Fastly named log provider | @fastly/compute-js-opentelemetry/exporter-metrics-otlp-fastly-logger | A Metric Exporter implementation that exports metrics using the OTLP/HTTP JSON format over a Fastly named log provider. | | Exporter Base Classes | @fastly/compute-js-opentelemetry/otlp-exporter-fastly-base | Base classes for exporters, containing common code used by the exporter classes listed above. | | Diagnostic Logger for Fastly named log provider | @fastly/compute-js-opentelemetry/diag-fastly-logger | A DiagLogger implementation that logs to a Fastly named log provider. | | Core Utilities (Internal Use) | (Not exported) | Utilities intended to be used internally by the library and not from user code. |

Examples

See the examples in the /examples directory.

| Example Directory | Description | |-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------| | readme-demo | Example demo from the beginning of this README | | readme-demo-ts | Example demo from the beginning of this README, ported to TypeScript | | basic-tracing-example | Basic Tracing Example | | basic-tracing-example-ts | Basic Tracing Example in TypeScript | | basic-metrics-example | Basic Metrics Example | | otel-demo | Example that demonstrates OpenTelemetry traces that start at the Edge and nest into an operation at the backend. | | otel-http-proxy | A sample application designed to collect traces as an HTTPS log endpoint for a Fastly service, sending them to an OpenTelemetry collector. |

Use with TypeScript

This library is designed to work with both JavaScript and TypeScript applications written for Fastly Compute.

Check out readme-demo-ts and basic-tracing-example-ts in the examples directory for working sample programs using TypeScript.

Notes

Environment Variables

OpenTelemetry defines a well-documented set of environment variables that are designed to allow you to configure defaults for its libraries. However, JavaScript applications built to run on Fastly's Compute platform perform their upfront initialization at build time ("build-time initialization") rather than during each invocation (that's how they start up so fast). This means that the platform cannot provide a way to read from the environment during build-time initialization, when most OpenTelemetry libraries are initializing.

Therefore, when using this library, the getEnv() function will always return the default values defined by OpenTelemetry. Any changes you require to these defaults need to be made programmatically.

Compatibility

Some opentelemetry-js modules are not currently compatible with Fastly Compute. The table below is a non-comprehensive list of such components.

| Component | Package | Reason / Workaround | |-------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | OTLPTraceExporter | @opentelemetry/exporter-trace-otlp-http | Relies on XmlHttpRequest and navigator.beacon, which are not available in Compute. Use OTLPTraceExporter from @fastly/compute-js-opentelemetry/exporter-trace-otlp-fastly-backend or @fastly/compute-js-opentelemetry/exporter-trace-otlp-fastly-logger instead. | | OTLPMetricExporter | @opentelemetry/exporter-metrics-otlp-http | Relies on XmlHttpRequest and navigator.beacon, which are not available in Compute. Use OTLPTraceExporter from @fastly/compute-js-opentelemetry/exporter-metrics-otlp-fastly-backend or @fastly/compute-js-opentelemetry/exporter-metrics-otlp-fastly-logger instead. | | ZoneContextManager | @opentelemetry/context-zone@opentelemetry/context-zone-peer-dep | Relies on zone.js, which is incompatible with Compute. Use FastlyStackContextManager. | | AsyncHooksContextManagerAsyncLocalStorageContextManager | @opentelemetry/context-async-hooks | Relies on async_hooks, which is not available in Compute. Use FastlyStackContextManager. | | NodeSDK | @opentelemetry/sdk-node | This SDK is for Node, which is not compatible with Compute. Use FastlySDK. | | Instrumentations included in opentelemetry-js | @opentelemetry/instrumentation-*@opentelemetry/auto-instrumentations-node@opentelemetry/auto-instrumentations-web | These rely on other frameworks and modules that are not compatible with Compute. Use FastlyComputeJsInstrumentation and FastlyBackendFetchInstrumentation. |

Issues

If you encounter any non-security-related bug or unexpected behavior, please file an issue using the bug report template.

Security issues

Please see our SECURITY.md for guidance on reporting security-related issues.

License

MIT.