From 8d1f78044ca6eb9995001d3ab83be62460e043a6 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 27 Feb 2023 13:53:54 +0100 Subject: Add ability to disable http duration OTEL metrics --- config/default.yaml | 4 ++++ config/production.yaml.example | 4 ++++ server/initializers/checker-before-init.ts | 1 + server/initializers/config.ts | 4 ++++ server/lib/opentelemetry/metrics.ts | 4 +++- server/tests/api/check-params/users-emails.ts | 3 --- server/tests/api/server/open-telemetry.ts | 27 ++++++++++++++++++++++++++ server/tests/shared/mock-servers/mock-email.ts | 2 +- 8 files changed, 44 insertions(+), 5 deletions(-) diff --git a/config/default.yaml b/config/default.yaml index 7ce345e2d..db014cc87 100644 --- a/config/default.yaml +++ b/config/default.yaml @@ -222,6 +222,10 @@ open_telemetry: metrics: enabled: false + http_request_duration: + # You can disable HTTP request duration metric that can have a high tag cardinality + enabled: true + # Create a prometheus exporter server on this port so prometheus server can scrape PeerTube metrics prometheus_exporter: hostname: '127.0.0.1' diff --git a/config/production.yaml.example b/config/production.yaml.example index 877d77e01..a169c6c0e 100644 --- a/config/production.yaml.example +++ b/config/production.yaml.example @@ -220,6 +220,10 @@ open_telemetry: metrics: enabled: false + http_request_duration: + # You can disable HTTP request duration metric that can have a high tag cardinality + enabled: true + # Create a prometheus exporter server on this port so prometheus server can scrape PeerTube metrics prometheus_exporter: hostname: '127.0.0.1' diff --git a/server/initializers/checker-before-init.ts b/server/initializers/checker-before-init.ts index 74fed251c..1351749a6 100644 --- a/server/initializers/checker-before-init.ts +++ b/server/initializers/checker-before-init.ts @@ -23,6 +23,7 @@ function checkMissedConfig () { 'log.log_ping_requests', 'log.log_tracker_unknown_infohash', 'log.prettify_sql', 'log.accept_client_log', 'open_telemetry.metrics.enabled', 'open_telemetry.metrics.prometheus_exporter.hostname', 'open_telemetry.metrics.prometheus_exporter.port', 'open_telemetry.tracing.enabled', 'open_telemetry.tracing.jaeger_exporter.endpoint', + 'open_telemetry.metrics.http_request_duration.enabled', 'user.video_quota', 'user.video_quota_daily', 'video_channels.max_per_user', 'csp.enabled', 'csp.report_only', 'csp.report_uri', diff --git a/server/initializers/config.ts b/server/initializers/config.ts index 7ad258f7a..eb9d0079c 100644 --- a/server/initializers/config.ts +++ b/server/initializers/config.ts @@ -195,6 +195,10 @@ const CONFIG = { METRICS: { ENABLED: config.get('open_telemetry.metrics.enabled'), + HTTP_REQUEST_DURATION: { + ENABLED: config.get('open_telemetry.metrics.http_request_duration.enabled') + }, + PROMETHEUS_EXPORTER: { HOSTNAME: config.get('open_telemetry.metrics.prometheus_exporter.hostname'), PORT: config.get('open_telemetry.metrics.prometheus_exporter.port') diff --git a/server/lib/opentelemetry/metrics.ts b/server/lib/opentelemetry/metrics.ts index 9cc067e4a..bffe00840 100644 --- a/server/lib/opentelemetry/metrics.ts +++ b/server/lib/opentelemetry/metrics.ts @@ -62,7 +62,9 @@ class OpenTelemetryMetrics { this.meter = metrics.getMeter('default') - this.buildRequestObserver() + if (CONFIG.OPEN_TELEMETRY.METRICS.HTTP_REQUEST_DURATION.ENABLED === true) { + this.buildRequestObserver() + } this.playbackMetrics = new PlaybackMetrics(this.meter) this.playbackMetrics.buildCounters() diff --git a/server/tests/api/check-params/users-emails.ts b/server/tests/api/check-params/users-emails.ts index 8cfb1d15f..6ebcc8ffe 100644 --- a/server/tests/api/check-params/users-emails.ts +++ b/server/tests/api/check-params/users-emails.ts @@ -1,5 +1,4 @@ /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ -import { MockSmtpServer } from '@server/tests/shared' import { HttpStatusCode, UserRole } from '@shared/models' import { cleanupTests, createSingleServer, makePostBodyRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands' @@ -112,8 +111,6 @@ describe('Test users API validators', function () { }) after(async function () { - MockSmtpServer.Instance.kill() - await cleanupTests([ server ]) }) }) diff --git a/server/tests/api/server/open-telemetry.ts b/server/tests/api/server/open-telemetry.ts index db76a3d7f..49f3b520b 100644 --- a/server/tests/api/server/open-telemetry.ts +++ b/server/tests/api/server/open-telemetry.ts @@ -29,6 +29,8 @@ describe('Open Telemetry', function () { }) it('Should enable open telemetry metrics', async function () { + this.timeout(120000) + server = await createSingleServer(1, { open_telemetry: { metrics: { @@ -37,8 +39,12 @@ describe('Open Telemetry', function () { } }) + // Simulate a HTTP request + await server.videos.list() + const res = await makeRawRequest({ url: metricsUrl, expectedStatus: HttpStatusCode.OK_200 }) expect(res.text).to.contain('peertube_job_queue_total{') + expect(res.text).to.contain('http_request_duration_ms_bucket{') }) it('Should have playback metrics', async function () { @@ -64,6 +70,27 @@ describe('Open Telemetry', function () { expect(res.text).to.contain('peertube_playback_http_downloaded_bytes_total{') }) + it('Should disable http request duration metrics', async function () { + await server.kill() + + server = await createSingleServer(1, { + open_telemetry: { + metrics: { + enabled: true, + http_request_duration: { + enabled: false + } + } + } + }) + + // Simulate a HTTP request + await server.videos.list() + + const res = await makeRawRequest({ url: metricsUrl, expectedStatus: HttpStatusCode.OK_200 }) + expect(res.text).to.not.contain('http_request_duration_ms_bucket{') + }) + after(async function () { await server.kill() }) diff --git a/server/tests/shared/mock-servers/mock-email.ts b/server/tests/shared/mock-servers/mock-email.ts index 79bc22d58..5f37f6ae0 100644 --- a/server/tests/shared/mock-servers/mock-email.ts +++ b/server/tests/shared/mock-servers/mock-email.ts @@ -43,7 +43,7 @@ class MockSmtpServer { kill () { if (!this.maildev) return - this.maildev.shutdown() + this.maildev.close() this.maildev = null MockSmtpServer.instance = null -- cgit v1.2.3