|
7 | 7 | using GameFrameX.SuperSocket.Server.Host; |
8 | 8 | using GameFrameX.Utility; |
9 | 9 | using GameFrameX.Utility.Setting; |
| 10 | +using Grafana.OpenTelemetry; |
10 | 11 | using Microsoft.AspNetCore.Builder; |
11 | 12 | using Microsoft.AspNetCore.Diagnostics; |
12 | 13 | using Microsoft.AspNetCore.Hosting; |
|
15 | 16 | using Microsoft.Extensions.Hosting; |
16 | 17 | using Microsoft.Extensions.Logging; |
17 | 18 | using Microsoft.OpenApi.Models; |
| 19 | +using OpenTelemetry.Metrics; |
18 | 20 | using OpenTelemetry.Resources; |
19 | 21 | using OpenTelemetry.Trace; |
20 | 22 | using Serilog; |
@@ -200,37 +202,73 @@ private async Task StartHttpServer(List<BaseHttpHandler> baseHandler, Func<strin |
200 | 202 | } |
201 | 203 |
|
202 | 204 | // 配置Web主机 |
203 | | - builder.WebHost.UseKestrel(options => |
204 | | - { |
205 | | - options.ListenAnyIP(Setting.HttpPort); |
206 | | - |
207 | | - if (Setting.HttpsPort > 0 && NetHelper.PortIsAvailable(Setting.HttpsPort)) |
208 | | - { |
209 | | - throw new NotImplementedException("HTTPS 未实现,请取消HTTPS端口配置"); |
210 | | - } |
211 | | - }) |
212 | | - .ConfigureLogging(logging => |
213 | | - { |
214 | | - logging.ClearProviders(); |
215 | | - logging.AddSerilog(Log.Logger); |
216 | | - logging.SetMinimumLevel(minimumLevelLogLevel); |
217 | | - }) |
218 | | - // 配置OpenTelemetry服务 |
219 | | - .ConfigureServices(services => |
220 | | - { |
221 | | - services.AddOpenTelemetry() |
222 | | - .ConfigureResource(configure => |
223 | | - { |
224 | | - configure.AddService("HTTP:" + Setting.ServerName + "-" + Setting.TagName, "GameFrameX.HTTP") |
225 | | - .AddTelemetrySdk(); |
226 | | - }) |
227 | | - .WithTracing(configure => |
228 | | - { |
229 | | - configure.AddAspNetCoreInstrumentation(); |
230 | | - configure.AddConsoleExporter(); |
231 | | - }); |
232 | | - }); |
| 205 | + var hostBuilder = builder.WebHost.UseKestrel(options => |
| 206 | + { |
| 207 | + options.ListenAnyIP(Setting.HttpPort); |
| 208 | + |
| 209 | + if (Setting.HttpsPort > 0 && NetHelper.PortIsAvailable(Setting.HttpsPort)) |
| 210 | + { |
| 211 | + throw new NotImplementedException("HTTPS 未实现,请取消HTTPS端口配置"); |
| 212 | + } |
| 213 | + }); |
233 | 214 |
|
| 215 | + if (Setting.IsOpenTelemetry) |
| 216 | + { |
| 217 | + // 配置OpenTelemetry服务 |
| 218 | + hostBuilder.ConfigureServices(services => |
| 219 | + { |
| 220 | + var openTelemetryBuilder = services.AddOpenTelemetry() |
| 221 | + .ConfigureResource(configure => |
| 222 | + { |
| 223 | + configure.AddService("HTTP:" + Setting.ServerName + "-" + Setting.TagName, "GameFrameX.HTTP") |
| 224 | + .AddTelemetrySdk(); |
| 225 | + }); |
| 226 | + if (Setting.IsOpenTelemetryMetrics) |
| 227 | + { |
| 228 | + openTelemetryBuilder.WithMetrics(configure => |
| 229 | + { |
| 230 | + configure.AddAspNetCoreInstrumentation(); |
| 231 | + if (EnvironmentHelper.IsDevelopment()) |
| 232 | + { |
| 233 | + configure.AddConsoleExporter(); |
| 234 | + } |
| 235 | + |
| 236 | + // Metrics provides by ASP.NET Core in .NET 8 |
| 237 | + configure.AddMeter("Microsoft.AspNetCore.Hosting"); |
| 238 | + configure.AddMeter("Microsoft.AspNetCore.Server.Kestrel"); |
| 239 | + // Metrics provided by System.Net libraries |
| 240 | + configure.AddMeter("System.Net.Http"); |
| 241 | + configure.AddMeter("System.Net.NameResolution"); |
| 242 | + configure.AddPrometheusExporter(); |
| 243 | + }); |
| 244 | + } |
| 245 | + |
| 246 | + if (Setting.IsOpenTelemetryTracing) |
| 247 | + { |
| 248 | + openTelemetryBuilder.WithTracing(configure => |
| 249 | + { |
| 250 | + configure.AddAspNetCoreInstrumentation(); |
| 251 | + configure.AddHttpClientInstrumentation(); |
| 252 | + configure.AddSource("HTTP:GameFrameX." + Setting.ServerName + "." + Setting.TagName); |
| 253 | + if (EnvironmentHelper.IsDevelopment()) |
| 254 | + { |
| 255 | + configure.AddConsoleExporter(); |
| 256 | + } |
| 257 | + }); |
| 258 | + } |
| 259 | + }); |
| 260 | + } |
| 261 | + |
| 262 | + hostBuilder.ConfigureLogging(logging => |
| 263 | + { |
| 264 | + logging.ClearProviders(); |
| 265 | + logging.AddSerilog(Log.Logger); |
| 266 | + logging.SetMinimumLevel(minimumLevelLogLevel); |
| 267 | + if (Setting.IsOpenTelemetry) |
| 268 | + { |
| 269 | + logging.AddOpenTelemetry(configure => { configure.UseGrafana(); }); |
| 270 | + } |
| 271 | + }); |
234 | 272 | var app = builder.Build(); |
235 | 273 |
|
236 | 274 | // 开发环境下的Swagger UI配置 |
|
0 commit comments