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"]