Skip to content

Commit

Permalink
Add tracing
Browse files Browse the repository at this point in the history
Signed-off-by: Romain Barissat <[email protected]>
  • Loading branch information
politician committed Oct 28, 2021
1 parent 72c1e22 commit 2ee9435
Show file tree
Hide file tree
Showing 8 changed files with 180 additions and 30 deletions.
3 changes: 3 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"printWidth": 100
}
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@
},
"dependencies": {
"@opentelemetry/api": "^1.0.3",
"@opentelemetry/instrumentation-dns": "^0.26.0",
"@opentelemetry/exporter-jaeger": "^1.0.0",
"@opentelemetry/instrumentation-express": "^0.26.0",
"@opentelemetry/instrumentation-http": "^0.26.0",
"@opentelemetry/instrumentation-net": "^0.26.0",
"@opentelemetry/instrumentation-pino": "^0.26.0",
"@opentelemetry/resources": "^1.0.0",
"@opentelemetry/sdk-node": "^0.26.0",
"@opentelemetry/sdk-trace-base": "^1.0.0",
"express": "^4.17.1",
"js-yaml": "^4.1.0",
"pino-http": "^5.8.0",
Expand All @@ -27,7 +28,7 @@
},
"scripts": {
"dev": "yarn dev:local",
"dev:local": "yarn nodemon --inspect src/index.js",
"dev:local": "yarn nodemon --inspect src/index.js | yarn pino-pretty -c -t",
"dev:docker": "yarn docker:cleanup & yarn docker:build:dev && yarn docker:start:dev",
"dev:k8s": "yarn k8s:start:dev",
"docker:build:dev": "docker build --target dev --build-arg node_env=development -t my-app .",
Expand Down
3 changes: 2 additions & 1 deletion src/config/settings.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
general:
defaultPort: 3000
welcomeName: "world"
welcomeName: world
serviceName: my-app
5 changes: 2 additions & 3 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require("./observability/tracer");

const { settings } = require("./settings");
const express = require("express");
const expressMeter = require("./observability/meter");
Expand All @@ -12,9 +14,6 @@ try {

app.get("/", (req, res) => {
req.log.info("Visited homepage");
req.log.error("Example error");
req.log.debug("Example debug");
req.log.trace("Example trace");
res.send(`Hello ${settings.general.welcomeName}!`);
});

Expand Down
29 changes: 29 additions & 0 deletions src/observability/tracer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
const { settings } = require("../settings");
const opentelemetry = require("@opentelemetry/api");
const { registerInstrumentations } = require("@opentelemetry/instrumentation");
const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
const { Resource } = require("@opentelemetry/resources");
const { SemanticResourceAttributes } = require("@opentelemetry/semantic-conventions");
const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http");
const { ExpressInstrumentation } = require("@opentelemetry/instrumentation-express");
const { PinoInstrumentation } = require("@opentelemetry/instrumentation-pino");
const { JaegerExporter } = require("@opentelemetry/exporter-jaeger");
const { SimpleSpanProcessor, BatchSpanProcessor } = require("@opentelemetry/sdk-trace-base");

const provider = new NodeTracerProvider({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]:
process.env.SERVICE_NAME || settings.general.serviceName || "my-app",
}),
});

registerInstrumentations({
instrumentations: [
new HttpInstrumentation(),
new ExpressInstrumentation(),
new PinoInstrumentation(),
],
});

provider.addSpanProcessor(new BatchSpanProcessor(new JaegerExporter()));
provider.register();
26 changes: 26 additions & 0 deletions src/observability/tracer.sdk.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const { settings } = require("../settings");
const opentelemetry = require("@opentelemetry/sdk-node");
const { Resource } = require("@opentelemetry/resources");
const { SemanticResourceAttributes } = require("@opentelemetry/semantic-conventions");
const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http");
const { ExpressInstrumentation } = require("@opentelemetry/instrumentation-express");
const { PinoInstrumentation } = require("@opentelemetry/instrumentation-pino");
const { JaegerExporter } = require("@opentelemetry/exporter-jaeger");
const { SimpleSpanProcessor, BatchSpanProcessor } = require("@opentelemetry/sdk-trace-base");

const sdk = new opentelemetry.NodeSDK({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]:
process.env.SERVICE_NAME || settings.general.serviceName || "my-app",
}),
instrumentations: [
new HttpInstrumentation(),
new ExpressInstrumentation(),
new PinoInstrumentation(),
],
traceExporter: new JaegerExporter(),
// spanProcessor: new BatchSpanProcessor(new JaegerExporter(), { scheduledDelayMillis: 100 }),
// spanProcessor: new SimpleSpanProcessor(new JaegerExporter()),
});

sdk.start();
8 changes: 3 additions & 5 deletions src/settings.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
const fs = require("fs");
const path = require("path");
const yaml = require("js-yaml");
const { logger } = require("./observability/logger");
// const { logger } = require("./observability/logger");

try {
const settings = yaml.load(
fs.readFileSync(path.join(__dirname, "config/settings.yaml"), "utf8")
);
const settings = yaml.load(fs.readFileSync(path.join(__dirname, "config/settings.yaml"), "utf8"));
exports.settings = settings;
} catch (e) {
logger.error(e);
console.error(e);
}
129 changes: 111 additions & 18 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,15 @@
"@opentelemetry/semantic-conventions" "1.0.0"
semver "^7.3.5"

"@opentelemetry/instrumentation-dns@^0.26.0":
version "0.26.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.26.0.tgz#9cb1a227462d9c707e0d1994dcc58e1c4b4def61"
integrity sha512-5vGxDiivMIsl74rHMPOtQb+5aYvXcscDXV7Ny8bkGINN7Bb4i4mgr9lugyZK9ihnK7oQjC7VhPWmqyQbRBQ7+Q==
"@opentelemetry/exporter-jaeger@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-jaeger/-/exporter-jaeger-1.0.0.tgz#04d7be79de68f1386b4903a0ffe6d5454047c83a"
integrity sha512-tnZVY52t88bwXEdQDTmwrSP/b9JQnKYIOhusCE1u0WRKIkgVdJ+4FLlFs66LuQoOXw+OoUavTN4XE/pW16JHrg==
dependencies:
"@opentelemetry/instrumentation" "^0.26.0"
"@opentelemetry/semantic-conventions" "^1.0.0"
semver "^7.3.2"
"@opentelemetry/core" "1.0.0"
"@opentelemetry/sdk-trace-base" "1.0.0"
"@opentelemetry/semantic-conventions" "1.0.0"
jaeger-client "^3.15.0"

"@opentelemetry/instrumentation-express@^0.26.0":
version "0.26.0"
Expand All @@ -62,14 +63,6 @@
"@opentelemetry/semantic-conventions" "1.0.0"
semver "^7.3.5"

"@opentelemetry/instrumentation-net@^0.26.0":
version "0.26.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-net/-/instrumentation-net-0.26.0.tgz#22640cea8877d741d91f25cdc073affc1012652e"
integrity sha512-T/1Lo87vgQwiOS0CYnh5kX+RQ3eIJQZxCHFkXUs8e972ffH3nj6IIQB/EZ96UiJ8Jm8oCiIOtWu+itOgVaVWBw==
dependencies:
"@opentelemetry/instrumentation" "^0.26.0"
"@opentelemetry/semantic-conventions" "^1.0.0"

"@opentelemetry/instrumentation-pino@^0.26.0":
version "0.26.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.26.0.tgz#5955e205bcc45d8664626404159fd9b907c7ed27"
Expand Down Expand Up @@ -130,7 +123,7 @@
"@opentelemetry/core" "0.24.0"
"@opentelemetry/semantic-conventions" "0.24.0"

"@opentelemetry/[email protected]":
"@opentelemetry/[email protected]", "@opentelemetry/resources@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.0.0.tgz#6fb83d39d8305ea75cb3e120583d125670b3d6ac"
integrity sha512-ORP8F2LLcJEm5M3H24RmdlMdiDc70ySPushpkrAW34KZGdZXwkrFoFXZhhs5MUxPT+fLrTuBafXxZVr8eHtFuQ==
Expand Down Expand Up @@ -163,7 +156,7 @@
"@opentelemetry/sdk-trace-base" "1.0.0"
"@opentelemetry/sdk-trace-node" "1.0.0"

"@opentelemetry/[email protected]":
"@opentelemetry/[email protected]", "@opentelemetry/sdk-trace-base@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.0.0.tgz#f025d517fa2386ed2ccd534dfafa894ae323dc2e"
integrity sha512-/rXoyQlDlJTJ4SOVAbP0Gpj89B8oZ2hJApYG2Dq5klkgFAtDifN8271TIzwtM8/ET8HUhgx9eyoUJi42LhIesg==
Expand Down Expand Up @@ -337,6 +330,11 @@ ansi-align@^3.0.0:
dependencies:
string-width "^4.1.0"

ansi-color@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/ansi-color/-/ansi-color-0.2.1.tgz#3e75c037475217544ed763a8db5709fa9ae5bf9a"
integrity sha1-PnXAN0dSF1RO12Oo21cJ+prlv5o=

ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
Expand Down Expand Up @@ -454,6 +452,16 @@ braces@~3.0.2:
dependencies:
fill-range "^7.0.1"

bufrw@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/bufrw/-/bufrw-1.3.0.tgz#28d6cfdaf34300376836310f5c31d57eeb40c8fa"
integrity sha512-jzQnSbdJqhIltU9O5KUiTtljP9ccw2u5ix59McQy4pV2xGhVLhRZIndY8GIrgh5HjXa6+QJ9AQhOd2QWQizJFQ==
dependencies:
ansi-color "^0.2.1"
error "^7.0.0"
hexer "^1.5.0"
xtend "^4.0.0"

[email protected]:
version "3.1.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
Expand Down Expand Up @@ -701,6 +709,21 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1:
dependencies:
once "^1.4.0"

[email protected]:
version "7.0.2"
resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02"
integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=
dependencies:
string-template "~0.2.1"
xtend "~4.0.0"

error@^7.0.0:
version "7.2.1"
resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894"
integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==
dependencies:
string-template "~0.2.1"

escape-goat@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
Expand Down Expand Up @@ -925,6 +948,16 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"

hexer@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/hexer/-/hexer-1.5.0.tgz#b86ce808598e8a9d1892c571f3cedd86fc9f0653"
integrity sha1-uGzoCFmOip0YksVx887dhvyfBlM=
dependencies:
ansi-color "^0.2.1"
minimist "^1.1.0"
process "^0.10.0"
xtend "^4.0.0"

http-cache-semantics@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
Expand Down Expand Up @@ -1088,6 +1121,17 @@ is-yarn-global@^0.3.0:
resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==

jaeger-client@^3.15.0:
version "3.18.1"
resolved "https://registry.yarnpkg.com/jaeger-client/-/jaeger-client-3.18.1.tgz#a8c7a778244ba117f4fb8775eb6aa5508703564e"
integrity sha512-eZLM2U6rJvYo0XbzQYFeMYfp29gQix7SKlmDReorp9hJkUwXZtTyxW81AcKdmFCjLHO5tFysTX+394BnjEnUZg==
dependencies:
node-int64 "^0.4.0"
opentracing "^0.14.4"
thriftrw "^3.5.0"
uuid "^3.2.1"
xorshift "^0.2.0"

joycon@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.0.1.tgz#9074c9b08ccf37a6726ff74a18485f85efcaddaf"
Expand Down Expand Up @@ -1136,6 +1180,11 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==

long@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/long/-/long-2.4.0.tgz#9fa180bb1d9500cdc29c4156766a1995e1f4524f"
integrity sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8=

lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
Expand Down Expand Up @@ -1204,7 +1253,7 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"

minimist@^1.2.0:
minimist@^1.1.0, minimist@^1.2.0:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
Expand Down Expand Up @@ -1251,6 +1300,11 @@ node-fetch@^2.6.1:
dependencies:
whatwg-url "^5.0.0"

node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=

nodemon@^2.0.14:
version "2.0.14"
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.14.tgz#287c7a2f6cd8a18b07e94cd776ecb6a82e4ba439"
Expand Down Expand Up @@ -1298,6 +1352,11 @@ once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"

opentracing@^0.14.4:
version "0.14.5"
resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.5.tgz#891fa92cd90a24e64f99bc964370227310926c85"
integrity sha512-XLKtEfHxqrWyF1fzxznsv78w3csW41ucHnjiKnfzZLD5FN8UBDZZL1i4q0FR29zjxXhm+2Hop+5Vr/b8tKIvEg==

p-cancelable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
Expand Down Expand Up @@ -1396,6 +1455,11 @@ prepend-http@^2.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=

process@^0.10.0:
version "0.10.1"
resolved "https://registry.yarnpkg.com/process/-/process-0.10.1.tgz#842457cc51cfed72dc775afeeafb8c6034372725"
integrity sha1-hCRXzFHP7XLcd1r+6vuMYDQ3JyU=

prom-client@^14.0.0:
version "14.0.0"
resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-14.0.0.tgz#7af5a0f8f544743f0dee4447c06ac9bb0d052719"
Expand Down Expand Up @@ -1650,6 +1714,11 @@ stream-shift@^1.0.0:
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==

string-template@~0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add"
integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=

string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
Expand Down Expand Up @@ -1704,6 +1773,15 @@ tdigest@^0.1.1:
dependencies:
bintrees "1.0.1"

thriftrw@^3.5.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/thriftrw/-/thriftrw-3.12.0.tgz#30857847755e7f036b2e0a79d11c9f55075539d9"
integrity sha512-4YZvR4DPEI41n4Opwr4jmrLGG4hndxr7387kzRFIIzxHQjarPusH4lGXrugvgb7TtPrfZVTpZCVe44/xUxowEw==
dependencies:
bufrw "^1.3.0"
error "7.0.2"
long "^2.4.0"

to-readable-stream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
Expand Down Expand Up @@ -1807,6 +1885,11 @@ [email protected]:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=

uuid@^3.2.1:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==

vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
Expand Down Expand Up @@ -1861,6 +1944,16 @@ xdg-basedir@^4.0.0:
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==

xorshift@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/xorshift/-/xorshift-0.2.1.tgz#fcd82267e9351c13f0fb9c73307f25331d29c63a"
integrity sha1-/NgiZ+k1HBPw+5xzMH8lMx0pxjo=

xtend@^4.0.0, xtend@~4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==

yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
Expand Down

0 comments on commit 2ee9435

Please sign in to comment.