From 8560e4e94ac86bc6914c77b919e5300b6542f144 Mon Sep 17 00:00:00 2001 From: Pavol Loffay Date: Sun, 5 Nov 2023 08:04:39 +0100 Subject: [PATCH] Send data to local p8s Signed-off-by: Pavol Loffay --- 03-app-instrumentation.md | 2 +- app/frontend/index.js | 1 + app/frontend/instrument.js | 12 +- app/frontend/package-lock.json | 262 +++++++++++++++++++++++++++++++-- app/frontend/package.json | 1 + app/prometheus-docker.yaml | 6 +- 6 files changed, 268 insertions(+), 16 deletions(-) diff --git a/03-app-instrumentation.md b/03-app-instrumentation.md index b25873b..1589caa 100644 --- a/03-app-instrumentation.md +++ b/03-app-instrumentation.md @@ -123,7 +123,7 @@ Now replace the `ConsoleSpanExporter` with an `OTLPTraceExporter` as outlined in The metrics can be reported to the Prometheus server running locally: ```bash -docker run --rm -it -p 9090:9090 -p 4317:4317 --name=p8s -v ./app/prometheus-docker.yaml:/tmp/prometheus-docker.yaml:z prom/prometheus --config.file=/tmp/prometheus-docker.yaml --enable-feature=otlp-write-receiver +docker run --rm -it -p 9090:9090 --name=p8s -v ./app/prometheus-docker.yaml:/tmp/prometheus-docker.yaml:z prom/prometheus --config.file=/tmp/prometheus-docker.yaml --enable-feature=otlp-write-receiver ``` Alternatively, you can run the OpenTelemetry collector locally with debug exporter: diff --git a/app/frontend/index.js b/app/frontend/index.js index 84f351e..e8bf38c 100644 --- a/app/frontend/index.js +++ b/app/frontend/index.js @@ -6,6 +6,7 @@ const http = require("http"); const app = require("express")(); const pino = require('pino-http')() +// not included by default //var otelsdkinit = require('./instrument.js'); app.use(pino) diff --git a/app/frontend/instrument.js b/app/frontend/instrument.js index 35462ed..79b5ff6 100644 --- a/app/frontend/instrument.js +++ b/app/frontend/instrument.js @@ -10,7 +10,8 @@ const opentelemetry = require("@opentelemetry/sdk-node"); const { getNodeAutoInstrumentations } = require("@opentelemetry/auto-instrumentations-node"); const { OTLPTraceExporter } = require("@opentelemetry/exporter-trace-otlp-grpc"); -const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc'); +const otlpGrpc = require('@opentelemetry/exporter-metrics-otlp-grpc'); +const otlpHttp = require('@opentelemetry/exporter-metrics-otlp-http'); const { PeriodicExportingMetricReader, MeterProvider, ConsoleMetricExporter } = require('@opentelemetry/sdk-metrics') @@ -25,8 +26,13 @@ const sdk = new opentelemetry.NodeSDK({ }), traceExporter: new OTLPTraceExporter(), metricReader: new PeriodicExportingMetricReader({ - exporter: new OTLPMetricExporter(), -// exporter: new ConsoleMetricExporter() +// exporter: new ConsoleMetricExporter() + // by default send data to OTLP via gRPC + exporter: new otlpGrpc.OTLPMetricExporter(), + // for sending data to Prometheus +// exporter: new otlpHttp.OTLPMetricExporter({ +// url: "http://localhost:9090/api/v1/otlp/v1/metrics", // p8s expose /v1/metrics under /api/v1/otlp +// }), }), instrumentations: [getNodeAutoInstrumentations()] }); diff --git a/app/frontend/package-lock.json b/app/frontend/package-lock.json index c11e004..4996f09 100644 --- a/app/frontend/package-lock.json +++ b/app/frontend/package-lock.json @@ -8,6 +8,7 @@ "@opentelemetry/api": "^1.4.1", "@opentelemetry/auto-instrumentations-node": "^0.39.4", "@opentelemetry/exporter-metrics-otlp-grpc": "^0.44.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.43.0", "@opentelemetry/exporter-prometheus": "^0.44.0", "@opentelemetry/exporter-trace-otlp-grpc": "^0.44.0", "@opentelemetry/sdk-metrics": "^1.17.1", @@ -267,7 +268,7 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http": { + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc/node_modules/@opentelemetry/exporter-metrics-otlp-http": { "version": "0.44.0", "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.44.0.tgz", "integrity": "sha512-OiEkP9XWbh5ufjnP+xe8EQ2LShMY5f1NYBm9W/BgLaHPtlMNZnR7JB1t6Ut4gaZ7LA/yFnyrB0TnZcxntpBZ3Q==", @@ -285,6 +286,153 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.43.0.tgz", + "integrity": "sha512-k0KHKLS/xEWI4e5xrsnHpRk7Adj7JSFbFeKF4ti1d9soek3y85ZC2fTzDQC+ysUYo/lccoAXGR/gjcYgQOe7pg==", + "dependencies": { + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/api-logs": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.43.0.tgz", + "integrity": "sha512-0CXMOYPXgAdLM2OzVkiUfAL6QQwWVhnMfUXCqLsITY42FZ9TxAhZIHkoc4mfVxvPuXsBnRYGR8UQZX86p87z4A==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/core": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.17.0.tgz", + "integrity": "sha512-tfnl3h+UefCgx1aeN2xtrmr6BmdWGKXypk0pflQR0urFS40aE88trnkOMc2HTJZbMrqEEl4HsaBeFhwLVXsrJg==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.17.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.7.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.43.0.tgz", + "integrity": "sha512-LXNtRFVuPRXB9q0qdvrLikQ3NtT9Jmv255Idryz3RJPhOh/Fa03sBASQoj3D55OH3xazmA90KFHfhJ/d8D8y4A==", + "dependencies": { + "@opentelemetry/core": "1.17.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/otlp-transformer": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.43.0.tgz", + "integrity": "sha512-KXYmgzWdVBOD5NvPmGW1nEMJjyQ8gK3N8r6pi4HvmEhTp0v4T13qDSax4q0HfsqmbPJR355oqQSJUnu1dHNutw==", + "dependencies": { + "@opentelemetry/api-logs": "0.43.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-logs": "0.43.0", + "@opentelemetry/sdk-metrics": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.7.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/resources": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.17.0.tgz", + "integrity": "sha512-+u0ciVnj8lhuL/qGRBPeVYvk7fL+H/vOddfvmOeJaA1KC+5/3UED1c9KoZQlRsNT5Kw1FaK8LkY2NVLYfOVZQw==", + "dependencies": { + "@opentelemetry/core": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.7.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-logs": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.43.0.tgz", + "integrity": "sha512-JyJ2BBRKm37Mc4cSEhFmsMl5ASQn1dkGhEWzAAMSlhPtLRTv5PfvJwhR+Mboaic/eDLAlciwsgijq8IFlf6IgQ==", + "dependencies": { + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.7.0", + "@opentelemetry/api-logs": ">=0.39.1" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.17.0.tgz", + "integrity": "sha512-HlWM27yGmYuwCoVRe3yg2PqKnIsq0kEF0HQgvkeDWz2NYkq9fFaSspR6kvjxUTbghAlZrabiqbgyKoYpYaXS3w==", + "dependencies": { + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.7.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.17.0.tgz", + "integrity": "sha512-2T5HA1/1iE36Q9eg6D4zYlC4Y4GcycI1J6NsHPKZY9oWfAxWsoYnRlkPfUqyY5XVtocCo/xHpnJvGNHwzT70oQ==", + "dependencies": { + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.7.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.17.0.tgz", + "integrity": "sha512-+fguCd2d8d2qruk0H0DsCEy2CTK3t0Tugg7MhZ/UQMvmewbZLNnJ6heSYyzIZWG5IPfAXzoj4f4F/qpM7l4VBA==", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/exporter-prometheus": { "version": "0.44.0", "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.44.0.tgz", @@ -3383,18 +3531,114 @@ "@opentelemetry/otlp-transformer": "0.44.0", "@opentelemetry/resources": "1.17.1", "@opentelemetry/sdk-metrics": "1.17.1" + }, + "dependencies": { + "@opentelemetry/exporter-metrics-otlp-http": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.44.0.tgz", + "integrity": "sha512-OiEkP9XWbh5ufjnP+xe8EQ2LShMY5f1NYBm9W/BgLaHPtlMNZnR7JB1t6Ut4gaZ7LA/yFnyrB0TnZcxntpBZ3Q==", + "requires": { + "@opentelemetry/core": "1.17.1", + "@opentelemetry/otlp-exporter-base": "0.44.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-metrics": "1.17.1" + } + } } }, "@opentelemetry/exporter-metrics-otlp-http": { - "version": "0.44.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.44.0.tgz", - "integrity": "sha512-OiEkP9XWbh5ufjnP+xe8EQ2LShMY5f1NYBm9W/BgLaHPtlMNZnR7JB1t6Ut4gaZ7LA/yFnyrB0TnZcxntpBZ3Q==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.43.0.tgz", + "integrity": "sha512-k0KHKLS/xEWI4e5xrsnHpRk7Adj7JSFbFeKF4ti1d9soek3y85ZC2fTzDQC+ysUYo/lccoAXGR/gjcYgQOe7pg==", "requires": { - "@opentelemetry/core": "1.17.1", - "@opentelemetry/otlp-exporter-base": "0.44.0", - "@opentelemetry/otlp-transformer": "0.44.0", - "@opentelemetry/resources": "1.17.1", - "@opentelemetry/sdk-metrics": "1.17.1" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0" + }, + "dependencies": { + "@opentelemetry/api-logs": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.43.0.tgz", + "integrity": "sha512-0CXMOYPXgAdLM2OzVkiUfAL6QQwWVhnMfUXCqLsITY42FZ9TxAhZIHkoc4mfVxvPuXsBnRYGR8UQZX86p87z4A==", + "requires": { + "@opentelemetry/api": "^1.0.0" + } + }, + "@opentelemetry/core": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.17.0.tgz", + "integrity": "sha512-tfnl3h+UefCgx1aeN2xtrmr6BmdWGKXypk0pflQR0urFS40aE88trnkOMc2HTJZbMrqEEl4HsaBeFhwLVXsrJg==", + "requires": { + "@opentelemetry/semantic-conventions": "1.17.0" + } + }, + "@opentelemetry/otlp-exporter-base": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.43.0.tgz", + "integrity": "sha512-LXNtRFVuPRXB9q0qdvrLikQ3NtT9Jmv255Idryz3RJPhOh/Fa03sBASQoj3D55OH3xazmA90KFHfhJ/d8D8y4A==", + "requires": { + "@opentelemetry/core": "1.17.0" + } + }, + "@opentelemetry/otlp-transformer": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.43.0.tgz", + "integrity": "sha512-KXYmgzWdVBOD5NvPmGW1nEMJjyQ8gK3N8r6pi4HvmEhTp0v4T13qDSax4q0HfsqmbPJR355oqQSJUnu1dHNutw==", + "requires": { + "@opentelemetry/api-logs": "0.43.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-logs": "0.43.0", + "@opentelemetry/sdk-metrics": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0" + } + }, + "@opentelemetry/resources": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.17.0.tgz", + "integrity": "sha512-+u0ciVnj8lhuL/qGRBPeVYvk7fL+H/vOddfvmOeJaA1KC+5/3UED1c9KoZQlRsNT5Kw1FaK8LkY2NVLYfOVZQw==", + "requires": { + "@opentelemetry/core": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" + } + }, + "@opentelemetry/sdk-logs": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.43.0.tgz", + "integrity": "sha512-JyJ2BBRKm37Mc4cSEhFmsMl5ASQn1dkGhEWzAAMSlhPtLRTv5PfvJwhR+Mboaic/eDLAlciwsgijq8IFlf6IgQ==", + "requires": { + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0" + } + }, + "@opentelemetry/sdk-metrics": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.17.0.tgz", + "integrity": "sha512-HlWM27yGmYuwCoVRe3yg2PqKnIsq0kEF0HQgvkeDWz2NYkq9fFaSspR6kvjxUTbghAlZrabiqbgyKoYpYaXS3w==", + "requires": { + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "lodash.merge": "^4.6.2" + } + }, + "@opentelemetry/sdk-trace-base": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.17.0.tgz", + "integrity": "sha512-2T5HA1/1iE36Q9eg6D4zYlC4Y4GcycI1J6NsHPKZY9oWfAxWsoYnRlkPfUqyY5XVtocCo/xHpnJvGNHwzT70oQ==", + "requires": { + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.17.0.tgz", + "integrity": "sha512-+fguCd2d8d2qruk0H0DsCEy2CTK3t0Tugg7MhZ/UQMvmewbZLNnJ6heSYyzIZWG5IPfAXzoj4f4F/qpM7l4VBA==" + } } }, "@opentelemetry/exporter-prometheus": { diff --git a/app/frontend/package.json b/app/frontend/package.json index 51ad963..5d13274 100644 --- a/app/frontend/package.json +++ b/app/frontend/package.json @@ -3,6 +3,7 @@ "@opentelemetry/api": "^1.4.1", "@opentelemetry/auto-instrumentations-node": "^0.39.4", "@opentelemetry/exporter-metrics-otlp-grpc": "^0.44.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.43.0", "@opentelemetry/exporter-prometheus": "^0.44.0", "@opentelemetry/exporter-trace-otlp-grpc": "^0.44.0", "@opentelemetry/sdk-metrics": "^1.17.1", diff --git a/app/prometheus-docker.yaml b/app/prometheus-docker.yaml index 259ed62..36023cb 100644 --- a/app/prometheus-docker.yaml +++ b/app/prometheus-docker.yaml @@ -10,6 +10,6 @@ rule_files: # - "first_rules.yml" # - "second_rules.yml" scrape_configs: - - job_name: "prometheus" - static_configs: - - targets: ["localhost:9090"] +# - job_name: "prometheus" +# static_configs: +# - targets: ["localhost:9090"]