diff --git a/examples/ioredis/README.md b/examples/ioredis/README.md new file mode 100644 index 0000000000..0f486e7faa --- /dev/null +++ b/examples/ioredis/README.md @@ -0,0 +1,39 @@ +# Overview + +OpenTelemetry IORedis Instrumentation allows the user to automatically collect trace data and export them to the backend(s) of choice (Jaeger in this example). + +## Tracing backend setup + +### Jaeger + +- Setup [Jaeger Tracing](https://www.jaegertracing.io/docs/latest/getting-started/#all-in-one) + +## Installation + +```sh +npm install +``` + +## Run the Application + +- Start redis via docker + + ```sh + npm run docker:start + ``` + +- Run the main program + + ```sh + npm run start + ``` + +- Cleanup docker + + ```sh + npm run docker:stop + ``` + +## LICENSE + +Apache License 2.0 diff --git a/examples/ioredis/index.js b/examples/ioredis/index.js new file mode 100644 index 0000000000..027d87e00f --- /dev/null +++ b/examples/ioredis/index.js @@ -0,0 +1,19 @@ +'use strict'; + +// Require tracer before any other modules +require('./tracer'); +const Redis = require('ioredis'); + +const redis = new Redis(); + +async function main() { + try { + await redis.set('test', 'data'); + process.exit(0); + } catch (error) { + console.error(error); + process.exit(1); + } +} + +main(); diff --git a/examples/ioredis/package.json b/examples/ioredis/package.json new file mode 100644 index 0000000000..b356bfd047 --- /dev/null +++ b/examples/ioredis/package.json @@ -0,0 +1,40 @@ +{ + "name": "ioredis-example", + "private": true, + "version": "0.3.3", + "description": "Example of HTTP integration with OpenTelemetry", + "main": "index.js", + "scripts": { + "docker:start": "docker run -d -p 6379:6379 --name otjsredis redis:alpine", + "docker:stop": "docker stop otjsredis && docker rm otjsredis", + "start": "node index.js" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/open-telemetry/opentelemetry-js.git" + }, + "keywords": [ + "opentelemetry", + "redis", + "ioredis", + "tracing" + ], + "engines": { + "node": ">=8" + }, + "author": "OpenTelemetry Authors", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/open-telemetry/opentelemetry-js/issues" + }, + "dependencies": { + "@opentelemetry/core": "^0.3.3", + "@opentelemetry/exporter-jaeger": "^0.3.3", + "@opentelemetry/node": "^0.3.3", + "@opentelemetry/plugin-ioredis": "^0.3.3", + "@opentelemetry/tracing": "^0.3.3", + "ioredis": "^4.14.1" + }, + "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", + "devDependencies": {} +} diff --git a/examples/ioredis/tracer.js b/examples/ioredis/tracer.js new file mode 100644 index 0000000000..f806749c7a --- /dev/null +++ b/examples/ioredis/tracer.js @@ -0,0 +1,17 @@ +'use strict'; + +const opentelemetry = require('@opentelemetry/core'); +const { NodeTracerRegistry } = require('@opentelemetry/node'); +const { SimpleSpanProcessor } = require('@opentelemetry/tracing'); +const { JaegerExporter } = require('@opentelemetry/exporter-jaeger'); + +const tracerRegistry = new NodeTracerRegistry(); + +const exporter = new JaegerExporter({ serviceName: 'ioredis-example' }); + +tracerRegistry.addSpanProcessor(new SimpleSpanProcessor(exporter)); + +// Initialize the OpenTelemetry APIs to use the BasicTracer bindings +opentelemetry.initGlobalTracerRegistry(tracerRegistry); + +module.exports = opentelemetry.getTracer();