]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Add ability to disable http duration OTEL metrics
authorChocobozzz <me@florianbigard.com>
Mon, 27 Feb 2023 12:53:54 +0000 (13:53 +0100)
committerChocobozzz <me@florianbigard.com>
Mon, 27 Feb 2023 12:53:54 +0000 (13:53 +0100)
config/default.yaml
config/production.yaml.example
server/initializers/checker-before-init.ts
server/initializers/config.ts
server/lib/opentelemetry/metrics.ts
server/tests/api/check-params/users-emails.ts
server/tests/api/server/open-telemetry.ts
server/tests/shared/mock-servers/mock-email.ts

index 7ce345e2daf7cdbcde4083b49bdb611082ddbd7a..db014cc87e54f2a39ecb0d7b109875cdba65b1e1 100644 (file)
@@ -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'
index 877d77e01874e8ae4266d58508a752ef5b5a7920..a169c6c0e74a54cf7cf9e48a055f87412fc79345 100644 (file)
@@ -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'
index 74fed251c7bf88a1c195c65e1ba9b80b88a305b7..1351749a646062e91ae5ed027ebcd3037ceb4005 100644 (file)
@@ -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',
index 7ad258f7a4c33e9fce1467e7bac1571c9b20d639..eb9d0079cabc9f6af3ce817981a1a7af26f724df 100644 (file)
@@ -195,6 +195,10 @@ const CONFIG = {
     METRICS: {
       ENABLED: config.get<boolean>('open_telemetry.metrics.enabled'),
 
+      HTTP_REQUEST_DURATION: {
+        ENABLED: config.get<boolean>('open_telemetry.metrics.http_request_duration.enabled')
+      },
+
       PROMETHEUS_EXPORTER: {
         HOSTNAME: config.get<string>('open_telemetry.metrics.prometheus_exporter.hostname'),
         PORT: config.get<number>('open_telemetry.metrics.prometheus_exporter.port')
index 9cc067e4ab047ec6cae54dfb017f794f355c3609..bffe0084080c2f7d8bde3abbdf80e97b7d92abcf 100644 (file)
@@ -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()
index 8cfb1d15fbfaeb5bc433efaa603d3e3c22087e53..6ebcc8ffe1c5cff149f71ce76fe7d8e331535fa3 100644 (file)
@@ -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 ])
   })
 })
index db76a3d7f1cf1ffe5d7f9489f08c0d6cc7b19f10..49f3b520bc5a7be6c7514bacdf64c7991b8e199e 100644 (file)
@@ -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()
     })
index 79bc22d585a9572081b1824a1047ca7122914572..5f37f6ae0be439a307704eb562a6af5d7d34ecb9 100644 (file)
@@ -43,7 +43,7 @@ class MockSmtpServer {
   kill () {
     if (!this.maildev) return
 
-    this.maildev.shutdown()
+    this.maildev.close()
 
     this.maildev = null
     MockSmtpServer.instance = null