From 9d1a0048f354a8f7faa1416f1b6d5cdf8b8f80e8 Mon Sep 17 00:00:00 2001 From: Dejmenek Date: Thu, 17 Sep 2026 21:52:29 +0200 Subject: [PATCH 1/3] feat: add Jaeger service to docker-compose Added Jaeger all-in-one service to docker-compose.yml, set container name, exposed port 16686, and updated volumes section to include Jaeger volume. --- docker-compose.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index d09c9ac..9c4433d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,9 @@ services: + jaeger: + image: jaegertracing/all-in-one:latest + container_name: jaeger + ports: + - 16686:16686 prometheus: image: prom/prometheus:latest container_name: prometheus @@ -33,4 +38,5 @@ services: volumes: prometheus: grafana: - loki: \ No newline at end of file + loki: + jaeger: \ No newline at end of file From 859f75ee7758273a3586ed3b5867dde99d9ba373 Mon Sep 17 00:00:00 2001 From: Dejmenek Date: Thu, 17 Sep 2026 21:53:43 +0200 Subject: [PATCH 2/3] feat: integrate OpenTelemetry Collector for telemetry export Centralize telemetry by routing traces, metrics, and logs through the otel-collector. Update exporters in TelemetryExtensions.cs and Program.cs to target the collector. Add otel-collector service and config to docker-compose, and configure Prometheus to scrape metrics from the collector. Improve observability and maintainability by consolidating telemetry pipelines. --- .../Extensions/TelemetryExtensions.cs | 8 +++-- TournamentAPI/Program.cs | 2 +- docker-compose.yml | 17 ++++++++- otel-collector/otel-collector-config.yml | 35 +++++++++++++++++++ prometheus/prometheus.yml | 9 ++++- 5 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 otel-collector/otel-collector-config.yml diff --git a/TournamentAPI/Configuration/Extensions/TelemetryExtensions.cs b/TournamentAPI/Configuration/Extensions/TelemetryExtensions.cs index c09a757..cad5d11 100644 --- a/TournamentAPI/Configuration/Extensions/TelemetryExtensions.cs +++ b/TournamentAPI/Configuration/Extensions/TelemetryExtensions.cs @@ -16,7 +16,11 @@ internal static IServiceCollection AddApplicationTelemetry(this IServiceCollecti tracing.AddHttpClientInstrumentation(); tracing.AddAspNetCoreInstrumentation(); tracing.AddHotChocolateInstrumentation(); - tracing.AddConsoleExporter(); + tracing.AddOtlpExporter(o => + { + o.Endpoint = new Uri("http://localhost:4318/v1/traces"); + o.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf; + }); }) .WithMetrics(metrics => { @@ -24,7 +28,7 @@ internal static IServiceCollection AddApplicationTelemetry(this IServiceCollecti metrics.AddAspNetCoreInstrumentation(); metrics.AddOtlpExporter(o => { - o.Endpoint = new Uri("http://localhost:5431/api/v1/otlp/v1/metrics"); + o.Endpoint = new Uri("http://localhost:4318/v1/metrics"); o.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf; }); }); diff --git a/TournamentAPI/Program.cs b/TournamentAPI/Program.cs index ec2295b..35470bd 100644 --- a/TournamentAPI/Program.cs +++ b/TournamentAPI/Program.cs @@ -49,7 +49,7 @@ .WriteTo.Console() .WriteTo.OpenTelemetry(opt => { - opt.Endpoint = new Uri("http://localhost:3100/otlp").ToString(); + opt.Endpoint = new Uri("http://localhost:4318").ToString(); opt.Protocol = OtlpProtocol.HttpProtobuf; opt.ResourceAttributes = new Dictionary { diff --git a/docker-compose.yml b/docker-compose.yml index 9c4433d..d9d4578 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,12 +4,27 @@ services: container_name: jaeger ports: - 16686:16686 + + otel-collector: + image: otel/opentelemetry-collector-contrib:latest + container_name: otel-collector + command: + - '--config=/etc/otel-collector-config.yml' + ports: + - 4317:4317 + - 4318:4318 + volumes: + - ./otel-collector/otel-collector-config.yml:/etc/otel-collector-config.yml + depends_on: + - jaeger + - loki + - prometheus + prometheus: image: prom/prometheus:latest container_name: prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - - '--web.enable-otlp-receiver' ports: - 5431:9090 volumes: diff --git a/otel-collector/otel-collector-config.yml b/otel-collector/otel-collector-config.yml new file mode 100644 index 0000000..64ae822 --- /dev/null +++ b/otel-collector/otel-collector-config.yml @@ -0,0 +1,35 @@ +receivers: + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + +processors: + batch: {} + +exporters: + otlp/jaeger: + endpoint: jaeger:4317 + tls: + insecure: true + otlphttp/loki: + endpoint: http://loki:3100/otlp + prometheus: + endpoint: 0.0.0.0:8889 + +service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlp/jaeger] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [prometheus] + logs: + receivers: [otlp] + processors: [batch] + exporters: [otlphttp/loki] diff --git a/prometheus/prometheus.yml b/prometheus/prometheus.yml index ca9e623..6408253 100644 --- a/prometheus/prometheus.yml +++ b/prometheus/prometheus.yml @@ -7,4 +7,11 @@ scrape_configs: scrape_interval: 10s scrape_timeout: 5s static_configs: - - targets: ['localhost:9090'] \ No newline at end of file + - targets: ['localhost:9090'] + + - job_name: 'otel-collector' + scheme: 'http' + scrape_interval: 10s + scrape_timeout: 5s + static_configs: + - targets: ['otel-collector:8889'] \ No newline at end of file From 79e38b5d12ca8e6e4b5fd62895238de8ece037d9 Mon Sep 17 00:00:00 2001 From: Dejmenek Date: Thu, 17 Sep 2026 22:11:11 +0200 Subject: [PATCH 3/3] feat: add Grafana provisioning volume and datasources config Updated docker-compose.yml to mount ./grafana/provisioning/ into the Grafana container for provisioning support. Added datasource.yml to define Prometheus, Loki, and Jaeger data sources for Grafana. --- docker-compose.yml | 1 + .../provisioning/datasources/datasource.yml | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 grafana/provisioning/datasources/datasource.yml diff --git a/docker-compose.yml b/docker-compose.yml index d9d4578..08b9519 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -49,6 +49,7 @@ services: - 3000:3000 volumes: - grafana:/var/lib/grafana + - ./grafana/provisioning/:/etc/grafana/provisioning/ volumes: prometheus: diff --git a/grafana/provisioning/datasources/datasource.yml b/grafana/provisioning/datasources/datasource.yml new file mode 100644 index 0000000..1fc9f35 --- /dev/null +++ b/grafana/provisioning/datasources/datasource.yml @@ -0,0 +1,23 @@ +apiVersion: 1 + +datasources: + - name: Prometheus + type: prometheus + access: proxy + url: http://prometheus:9090 + isDefault: true + editable: true + + - name: Loki + type: loki + access: proxy + url: http://loki:3100 + isDefault: false + editable: true + + - name: Jaeger + type: jaeger + access: proxy + url: http://jaeger:16686 + isDefault: false + editable: true \ No newline at end of file