Browse Source

Add prometheus exporters

sparky8251 5 years ago
parent
commit
233337256f

+ 3 - 0
Jellyfin.Server/Jellyfin.Server.csproj

@@ -43,6 +43,9 @@
     <PackageReference Include="CommandLineParser" Version="2.7.82" />
     <PackageReference Include="CommandLineParser" Version="2.7.82" />
     <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.1.3" />
     <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.1.3" />
     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
+    <PackageReference Include="prometheus-net" Version="3.5.0" />
+    <PackageReference Include="prometheus-net.AspNetCore" Version="3.5.0" />
+    <PackageReference Include="prometheus-net.DotNetRuntime" Version="3.3.1" />
     <PackageReference Include="Serilog.AspNetCore" Version="3.2.0" />
     <PackageReference Include="Serilog.AspNetCore" Version="3.2.0" />
     <PackageReference Include="Serilog.Enrichers.Thread" Version="3.1.0" />
     <PackageReference Include="Serilog.Enrichers.Thread" Version="3.1.0" />
     <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
     <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />

+ 4 - 0
Jellyfin.Server/Program.cs

@@ -28,6 +28,7 @@ using Microsoft.Extensions.DependencyInjection.Extensions;
 using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Logging.Abstractions;
 using Microsoft.Extensions.Logging.Abstractions;
+using Prometheus.DotNetRuntime;
 using Serilog;
 using Serilog;
 using Serilog.Extensions.Logging;
 using Serilog.Extensions.Logging;
 using SQLitePCL;
 using SQLitePCL;
@@ -161,6 +162,9 @@ namespace Jellyfin.Server
 
 
             ApplicationHost.LogEnvironmentInfo(_logger, appPaths);
             ApplicationHost.LogEnvironmentInfo(_logger, appPaths);
 
 
+            // Initialize runtime stat collection
+            IDisposable collector = DotNetRuntimeStatsBuilder.Default().StartCollecting();
+
             // Make sure we have all the code pages we can get
             // Make sure we have all the code pages we can get
             // Ref: https://docs.microsoft.com/en-us/dotnet/api/system.text.codepagesencodingprovider.instance?view=netcore-3.0#remarks
             // Ref: https://docs.microsoft.com/en-us/dotnet/api/system.text.codepagesencodingprovider.instance?view=netcore-3.0#remarks
             Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
             Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

+ 3 - 0
Jellyfin.Server/Startup.cs

@@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Hosting;
+using Prometheus;
 
 
 namespace Jellyfin.Server
 namespace Jellyfin.Server
 {
 {
@@ -69,9 +70,11 @@ namespace Jellyfin.Server
             app.UseJellyfinApiSwagger();
             app.UseJellyfinApiSwagger();
             app.UseRouting();
             app.UseRouting();
             app.UseAuthorization();
             app.UseAuthorization();
+            app.UseHttpMetrics(); // Must be registered after any middleware that could chagne HTTP response codes or the data will be bad
             app.UseEndpoints(endpoints =>
             app.UseEndpoints(endpoints =>
             {
             {
                 endpoints.MapControllers();
                 endpoints.MapControllers();
+                endpoints.MapMetrics();
             });
             });
 
 
             app.Use(serverApplicationHost.ExecuteHttpHandlerAsync);
             app.Use(serverApplicationHost.ExecuteHttpHandlerAsync);