lackolaxton 2 weeks ago committed by GitHub
commit 41b86f576b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -55,6 +55,12 @@
<PackageVersion Include="Moq" Version="4.18.4" />
<PackageVersion Include="NEbml" Version="0.11.0" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="OpenTelemetry" Version="1.8.1" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.8.1" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.8.1" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.8.1" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.8.0" />
<PackageVersion Include="PlaylistsNET" Version="1.4.1" />
<PackageVersion Include="prometheus-net.AspNetCore" Version="8.2.1" />
<PackageVersion Include="prometheus-net.DotNetRuntime" Version="4.4.0" />

@ -24,6 +24,7 @@ using Jellyfin.Server.Configuration;
using Jellyfin.Server.Filters;
using MediaBrowser.Common.Api;
using MediaBrowser.Common.Net;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Session;
using Microsoft.AspNetCore.Authentication;
@ -35,6 +36,9 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Models;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using Swashbuckle.AspNetCore.SwaggerGen;
using AuthenticationSchemes = Jellyfin.Api.Constants.AuthenticationSchemes;
@ -255,6 +259,48 @@ namespace Jellyfin.Server.Extensions
});
}
/// <summary>
/// Add Open Telemetry Services.
/// </summary>
/// <param name="serviceCollection">The Service Collection.</param>
/// <param name="config">Otel Config.</param>
/// <param name="appVersion">Application Version.</param>
/// <returns>Updated Service Collection.</returns>
public static IServiceCollection AddOTel(this IServiceCollection serviceCollection, OtelConfiguration config, string appVersion)
{
if (config.Enabled)
{
serviceCollection
.AddOpenTelemetry()
.ConfigureResource(resourceBuilder => resourceBuilder.AddService("JellyFin", appVersion))
.WithMetrics(metrics =>
{
metrics
.AddMeter(config.Meters)
.AddAspNetCoreInstrumentation()
.AddRuntimeInstrumentation()
.AddHttpClientInstrumentation();
metrics.AddOtlpExporter(exporter =>
{
exporter.Endpoint = new Uri(config.Endpoint);
});
})
.WithTracing(tracing =>
{
tracing
.AddSource(config.ActivitySources)
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation();
tracing.AddOtlpExporter(exporter =>
{
exporter.Endpoint = new Uri(config.Endpoint);
});
});
}
return serviceCollection;
}
private static void AddPolicy(this AuthorizationOptions authorizationOptions, string policyName, IAuthorizationRequirement authorizationRequirement)
{
authorizationOptions.AddPolicy(policyName, policy =>

@ -48,6 +48,12 @@
<PackageReference Include="Microsoft.Extensions.Configuration.Json" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" />
<PackageReference Include="OpenTelemetry" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" />
<PackageReference Include="prometheus-net" />
<PackageReference Include="prometheus-net.AspNetCore" />
<PackageReference Include="Serilog.AspNetCore" />

@ -127,6 +127,8 @@ namespace Jellyfin.Server
services.AddHlsPlaylistGenerator();
services.AddLiveTvServices();
services.AddOTel(_serverConfigurationManager.Configuration.OtelConfiguration, _serverApplicationHost.ApplicationVersionString);
services.AddHostedService<RecordingsHost>();
services.AddHostedService<AutoDiscoveryHost>();
services.AddHostedService<PortForwardingHost>();

@ -0,0 +1,27 @@
namespace MediaBrowser.Model.Configuration;
/// <summary>
/// Open Telemetry Configuration.
/// </summary>
public class OtelConfiguration
{
/// <summary>
/// Gets or Sets a value indicating whether to enable otlp.
/// </summary>
public bool Enabled { get; set; }
/// <summary>
/// Gets or Sets the endpoint to exporter to.
/// </summary>
public string Endpoint { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the meters to listen to.
/// </summary>
public string Meters { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the activity sources to listen to.
/// </summary>
public string ActivitySources { get; set; } = string.Empty;
}

@ -283,4 +283,9 @@ public class ServerConfiguration : BaseApplicationConfiguration
/// </summary>
/// <value>The trickplay options.</value>
public TrickplayOptions TrickplayOptions { get; set; } = new TrickplayOptions();
/// <summary>
/// Gets or sets the otel config.
/// </summary>
public OtelConfiguration OtelConfiguration { get; set; } = new OtelConfiguration();
}

Loading…
Cancel
Save