Skip to content

Commit

Permalink
Merge branch 'main' into chore/add-stale-issue-gha
Browse files Browse the repository at this point in the history
  • Loading branch information
rauno56 authored Oct 22, 2021
2 parents 3752e9a + 44d21fe commit 608f082
Show file tree
Hide file tree
Showing 37 changed files with 1,647 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ import {
Resource,
ResourceDetectionConfig,
} from '@opentelemetry/resources';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import * as http from 'http';
import {
CloudProviderValues,
CloudPlatformValues,
} from '../semantic-conventions';
CloudProviderValues,
SemanticResourceAttributes,
} from '@opentelemetry/semantic-conventions';
import * as http from 'http';

/**
* The AlibabaCloudEcsDetector can be used to detect if a process is running in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import * as nock from 'nock';
import * as assert from 'assert';
import { Resource } from '@opentelemetry/resources';
import { CloudProviderValues } from '@opentelemetry/semantic-conventions';
import { alibabaCloudEcsDetector } from '../../src';
import {
assertCloudResource,
Expand Down Expand Up @@ -69,7 +70,7 @@ describe('alibabaCloudEcsDetector', () => {
assert.ok(resource);

assertCloudResource(resource, {
provider: 'alibaba_cloud',
provider: CloudProviderValues.ALIBABA_CLOUD,
accountId: 'my-owner-account-id',
region: 'my-region-id',
zone: 'my-zone-id',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const tracerProvider = new NodeTracerProvider({ resource });

## Available detectors

- `awsBeanstalkDetector`: Populates `service` for processes running on [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html)
- `awsBeanstalkDetector`: Populates `service` for processes running on [AWS Elastic Beanstalk](https://aws.amazon.com/elasticbeanstalk/)
- `awsEc2Detector`: Populates `cloud` and `host` for processes running on [Amazon EC2](https://aws.amazon.com/ec2/), including abstractions such as ECS on EC2. Notably, it does not populate anything on AWS Fargate
- `awsEcsDetector`: Populates `container` for containers running on [Amazon ECS](https://aws.amazon.com/ecs/)
- `awsEksDetector`: Populates `container` and `k8s.cluster_name` for containers running on [Amazon EKS](https://aws.amazon.com/eks/)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
},
"devDependencies": {
"@opentelemetry/api": "1.0.2",
"@opentelemetry/contrib-test-utils": "^0.25.0",
"@opentelemetry/contrib-test-utils": "^0.26.0",
"@types/mocha": "8.2.3",
"@types/node": "14.17.9",
"@types/sinon": "10.0.2",
Expand Down
3 changes: 2 additions & 1 deletion examples/connect/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

// eslint-disable-next-line import/order
const tracing = require('./tracing')('example-connect-client');
const tracer = tracing.tracer;

const { tracer } = tracing;
const api = require('@opentelemetry/api');
const axios = require('axios').default;

Expand Down
2 changes: 1 addition & 1 deletion examples/connect/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const axios = require('axios');
const app = connect();
const PORT = 8080;

// eslint-disable-next-line prefer-arrow-callback
app.use(function middleware1(req, res, next) {
next();
});
Expand All @@ -32,7 +33,6 @@ app.use('/run_test', async (req, res) => {
tracing.log('enabling connect');
tracing.connectInstrumentation.enable();
}

});

app.listen(PORT);
2 changes: 1 addition & 1 deletion examples/connect/tracing.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,5 @@ module.exports = (serviceName) => {
connectInstrumentation,
provider,
tracer: opentelemetry.trace.getTracer('connect-example'),
}
};
};
56 changes: 56 additions & 0 deletions examples/fastify/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Overview

OpenTelemetry Fastify Instrumentation allows the user to automatically collect trace data and export them to the backend of choice (Collector Exporter), to give observability to distributed systems.

This is a simple example that demonstrates tracing calls made to Fastify API. The example shows key aspects of tracing such as
- Root Span (on Client)
- Child Span (on Client)
- Span Events
- Span Attributes

## Installation

```sh
$ # from this directory
$ npm install
```

## Run the Application

### Collector - docker container

- Run docker container with collector

```sh
# from this directory
$ npm run docker:start
```

### Server

- Run the server

```sh
# from this directory
$ npm run server
```

- Run the client

```sh
# from this directory
npm run client
```

#### Zipkin UI
Go to Zipkin with your browser [http://localhost:9411/]()

<p align="center"><img src="images/trace1.png?raw=true"/></p>

## Useful links
- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>
- For more information on OpenTelemetry for Node.js, visit: <https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-node>

## LICENSE

Apache License 2.0
39 changes: 39 additions & 0 deletions examples/fastify/client.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
'use strict';

// eslint-disable-next-line import/order
const tracing = require('./tracing')('example-fastify-client');

const { tracer } = tracing;
const api = require('@opentelemetry/api');
const axios = require('axios').default;

function makeRequest() {
tracing.log('starting');
const span = tracer.startSpan('client.makeRequest()', {
kind: api.SpanKind.CLIENT,
});

api.context.with(api.trace.setSpan(api.ROOT_CONTEXT, span), async () => {
try {
const res = await axios.post('http://localhost:8080/run_test/1', {
// testing
// const res = await axios.post('http://localhost:8080/run_test2/1', {
headers: {
'Content-Type': 'application/json',
},
timeout: 3000,
});
tracing.log('status:', res.statusText);
span.setStatus({ code: api.SpanStatusCode.OK });
} catch (e) {
tracing.log('failed:', e.message);
span.setStatus({ code: api.SpanStatusCode.ERROR, message: e.message });
}
span.end();
tracing.log('forcing spans to be exported');
await tracing.provider.shutdown();
tracing.log('all spans exported successfully.');
});
}

makeRequest();
28 changes: 28 additions & 0 deletions examples/fastify/docker/collector-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
receivers:
otlp:
protocols:
grpc:
http:
cors_allowed_origins:
- http://*
- https://*

exporters:
zipkin:
endpoint: "http://zipkin-all-in-one:9411/api/v2/spans"
prometheus:
endpoint: "0.0.0.0:9464"

processors:
batch:

service:
pipelines:
traces:
receivers: [otlp]
exporters: [zipkin]
processors: [batch]
metrics:
receivers: [otlp]
exporters: [prometheus]
processors: [batch]
21 changes: 21 additions & 0 deletions examples/fastify/docker/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: "3"
services:
# Collector
collector:
image: otel/opentelemetry-collector:0.30.0
# image: otel/opentelemetry-collector:latest
command: ["--config=/conf/collector-config.yaml", "--log-level=DEBUG"]
volumes:
- ./collector-config.yaml:/conf/collector-config.yaml
ports:
- "9464:9464"
- "4317:4317"
- "55681:55681"
depends_on:
- zipkin-all-in-one

# Zipkin
zipkin-all-in-one:
image: openzipkin/zipkin:latest
ports:
- "9411:9411"
Binary file added examples/fastify/images/trace1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
59 changes: 59 additions & 0 deletions examples/fastify/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
{
"name": "example-fastify",
"private": true,
"version": "0.25.0",
"description": "Example of Fastify integration with OpenTelemetry",
"main": "index.js",
"scripts": {
"client": "node ./client.js",
"docker:start": "cd ./docker && docker-compose down && docker-compose up",
"docker:stop": "cd ./docker && docker-compose down",
"server": "node ./server.js"
},
"repository": {
"type": "git",
"url": "git+ssh://[email protected]/open-telemetry/opentelemetry-js.git"
},
"keywords": [
"opentelemetry",
"express",
"tracing"
],
"engines": {
"node": ">=8"
},
"files": [
"build/src/**/*.js",
"build/src/**/*.map",
"build/src/**/*.d.ts",
"doc",
"LICENSE",
"README.md"
],
"author": "OpenTelemetry Authors",
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/open-telemetry/opentelemetry-js/issues"
},
"dependencies": {
"@opentelemetry/api": "^1.0.2",
"@opentelemetry/exporter-jaeger": "^1.0.0",
"@opentelemetry/exporter-zipkin": "^1.0.0",
"@opentelemetry/exporter-collector": "^0.25.0",
"@opentelemetry/instrumentation": "^0.26.0",
"@opentelemetry/instrumentation-fastify": "^0.25.0",
"@opentelemetry/instrumentation-http": "^0.26.0",
"@opentelemetry/sdk-trace-node": "^1.0.0",
"@opentelemetry/resources": "^1.0.0",
"@opentelemetry/semantic-conventions": "^1.0.0",
"@opentelemetry/sdk-trace-base": "^1.0.0",
"axios": "^0.21.1",
"cross-env": "^7.0.3",
"fastify": "^3.19.2",
"fastify-cors": "^6.0.2",
"fastify-express": "^0.3.3",
"middie": "^5.3.0"
},
"homepage": "https://github.com/open-telemetry/opentelemetry-js#readme",
"devDependencies": {}
}
76 changes: 76 additions & 0 deletions examples/fastify/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
'use strict';

// eslint-disable-next-line
const tracing = require('./tracing')('example-fastify-server');
const opentelemetry = require('@opentelemetry/api');

const { context, trace } = opentelemetry;
const Fastify = require('fastify');
const axios = require('axios');

const PORT = 8080;
const app = Fastify({ logger: true });
app
.register(require('fastify-express'))
.register(subsystem);

async function subsystem(fastify) {
fastify.addHook('onRequest', async () => {
const span = trace.getSpan(context.active());
span.setAttribute('order', 2);
});

// eslint-disable-next-line prefer-arrow-callback
fastify.addHook('onRequest', async function onRequestHook() {
const span = trace.getSpan(context.active());
span.setAttribute('order', 3);

const newSpan = tracing.tracer.startSpan('foo');
newSpan.setAttribute('foo', 'bar');
newSpan.end();
});

fastify.use((req, res, next) => {
const span = trace.getSpan(context.active());
span.setAttribute('order', 1);
next();
});

fastify.post('/run_test2/:id', async (req, res) => {
const span = trace.getSpan(context.active());
span.setAttribute('order', 4);

const result = await axios.get('https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/main/package.json');
const result2 = await axios.get('https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/main/package.json');

tracing.log('sending response');
// throw Error('boom lala');
res.send(`OK ${result.data.version} ${result2.data.version}`);
});

fastify.addHook('onRequest', (req, reply, done) => {
const span = trace.getSpan(context.active());
console.log('first', span);
console.log('kuku1');
span.setAttribute('kuku1', 'lala');

setTimeout(() => {
console.log('kuku2');
span.setAttribute('kuku2', 'lala');
const newSpan = tracing.tracer.startSpan('tada');
newSpan.end();

reply.send('foo');
done();
}, 2000);
});

}

app.post('/run_test/:id', async (req, res) => {
const result = await axios.get('https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/main/package.json');
tracing.log('sending response');
res.send(`OK ${result.data.version}`);
});

app.listen(PORT);
Loading

0 comments on commit 608f082

Please sign in to comment.