diff options
author | Chocobozzz <me@florianbigard.com> | 2022-08-12 16:41:29 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2022-08-16 10:33:27 +0200 |
commit | fd3c2e87051f5029cdec39d877b576a62f48e219 (patch) | |
tree | a3c657f178702a3363af680ed8ffb7cd038243b8 /server/lib/opentelemetry/metrics.ts | |
parent | 0e6cd1c00f71554fe7375a96db693a6983951ba6 (diff) | |
download | PeerTube-fd3c2e87051f5029cdec39d877b576a62f48e219.tar.gz PeerTube-fd3c2e87051f5029cdec39d877b576a62f48e219.tar.zst PeerTube-fd3c2e87051f5029cdec39d877b576a62f48e219.zip |
Add playback metric endpoint sent to OTEL
Diffstat (limited to 'server/lib/opentelemetry/metrics.ts')
-rw-r--r-- | server/lib/opentelemetry/metrics.ts | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/server/lib/opentelemetry/metrics.ts b/server/lib/opentelemetry/metrics.ts index ffe493670..ba33c9505 100644 --- a/server/lib/opentelemetry/metrics.ts +++ b/server/lib/opentelemetry/metrics.ts | |||
@@ -4,10 +4,13 @@ import { PrometheusExporter } from '@opentelemetry/exporter-prometheus' | |||
4 | import { MeterProvider } from '@opentelemetry/sdk-metrics-base' | 4 | import { MeterProvider } from '@opentelemetry/sdk-metrics-base' |
5 | import { logger } from '@server/helpers/logger' | 5 | import { logger } from '@server/helpers/logger' |
6 | import { CONFIG } from '@server/initializers/config' | 6 | import { CONFIG } from '@server/initializers/config' |
7 | import { MVideoImmutable } from '@server/types/models' | ||
8 | import { PlaybackMetricCreate } from '@shared/models' | ||
7 | import { | 9 | import { |
8 | JobQueueObserversBuilder, | 10 | JobQueueObserversBuilder, |
9 | LivesObserversBuilder, | 11 | LivesObserversBuilder, |
10 | NodeJSObserversBuilder, | 12 | NodeJSObserversBuilder, |
13 | PlaybackMetrics, | ||
11 | StatsObserversBuilder, | 14 | StatsObserversBuilder, |
12 | ViewersObserversBuilder | 15 | ViewersObserversBuilder |
13 | } from './metric-helpers' | 16 | } from './metric-helpers' |
@@ -20,6 +23,8 @@ class OpenTelemetryMetrics { | |||
20 | 23 | ||
21 | private onRequestDuration: (req: Request, res: Response) => void | 24 | private onRequestDuration: (req: Request, res: Response) => void |
22 | 25 | ||
26 | private playbackMetrics: PlaybackMetrics | ||
27 | |||
23 | private constructor () {} | 28 | private constructor () {} |
24 | 29 | ||
25 | init (app: Application) { | 30 | init (app: Application) { |
@@ -41,7 +46,11 @@ class OpenTelemetryMetrics { | |||
41 | 46 | ||
42 | logger.info('Registering Open Telemetry metrics') | 47 | logger.info('Registering Open Telemetry metrics') |
43 | 48 | ||
44 | const provider = new MeterProvider() | 49 | const provider = new MeterProvider({ |
50 | views: [ | ||
51 | ...NodeJSObserversBuilder.getViews() | ||
52 | ] | ||
53 | }) | ||
45 | 54 | ||
46 | provider.addMetricReader(new PrometheusExporter({ port: CONFIG.OPEN_TELEMETRY.METRICS.PROMETHEUS_EXPORTER.PORT })) | 55 | provider.addMetricReader(new PrometheusExporter({ port: CONFIG.OPEN_TELEMETRY.METRICS.PROMETHEUS_EXPORTER.PORT })) |
47 | 56 | ||
@@ -51,7 +60,10 @@ class OpenTelemetryMetrics { | |||
51 | 60 | ||
52 | this.buildRequestObserver() | 61 | this.buildRequestObserver() |
53 | 62 | ||
54 | const nodeJSObserversBuilder = new NodeJSObserversBuilder(this.meter, provider) | 63 | this.playbackMetrics = new PlaybackMetrics(this.meter) |
64 | this.playbackMetrics.buildCounters() | ||
65 | |||
66 | const nodeJSObserversBuilder = new NodeJSObserversBuilder(this.meter) | ||
55 | nodeJSObserversBuilder.buildObservers() | 67 | nodeJSObserversBuilder.buildObservers() |
56 | 68 | ||
57 | const jobQueueObserversBuilder = new JobQueueObserversBuilder(this.meter) | 69 | const jobQueueObserversBuilder = new JobQueueObserversBuilder(this.meter) |
@@ -67,6 +79,10 @@ class OpenTelemetryMetrics { | |||
67 | viewersObserversBuilder.buildObservers() | 79 | viewersObserversBuilder.buildObservers() |
68 | } | 80 | } |
69 | 81 | ||
82 | observePlaybackMetric (video: MVideoImmutable, metrics: PlaybackMetricCreate) { | ||
83 | this.playbackMetrics.observe(video, metrics) | ||
84 | } | ||
85 | |||
70 | private buildRequestObserver () { | 86 | private buildRequestObserver () { |
71 | const requestDuration = this.meter.createHistogram('http_request_duration_ms', { | 87 | const requestDuration = this.meter.createHistogram('http_request_duration_ms', { |
72 | unit: 'milliseconds', | 88 | unit: 'milliseconds', |