@@ -22,29 +22,34 @@ GameFrameX 是一个基于 C# .NET 8.0 开发的高性能游戏服务器框架
2222## ✨ 核心特性
2323
2424### 🚀 高性能架构
25+
2526- ** Actor 模型** :基于 TPL DataFlow 构建的高性能 Actor 系统
2627- ** 全异步编程** :采用 async/await 模式,代码清晰优雅
2728- ** 无锁设计** :通过 Actor 模型避免传统锁机制的性能损耗
2829- ** 内存优化** :自动回收不活跃数据,减少内存占用
2930
3031### 🔄 热更新支持
32+
3133- ** 不停服更新** :支持运行时热更新游戏逻辑
3234- ** 状态逻辑分离** :状态持久化,逻辑可热更
3335- ** 安全可靠** :更新失败可回滚,保证服务稳定性
3436- ** 增量更新** :只更新修改的部分,提高更新效率
3537
3638### 🌐 网络通信
39+
3740- ** 多协议支持** :TCP、UDP、WebSocket、HTTP
3841- ** 高并发** :基于 SuperSocket 的异步 I/O 模型
3942- ** 消息处理** :内置消息分包、粘包处理机制
4043- ** 安全传输** :支持 SSL/TLS 加密
4144
4245### 💾 数据持久化
46+
4347- ** 透明持久化** :自动序列化/反序列化,开发者无需关心数据库操作
4448- ** NoSQL 支持** :默认使用 MongoDB,支持其他 NoSQL 数据库
4549- ** 缓存机制** :智能缓存策略,提高数据访问性能
4650
4751### ⏰ 定时任务
52+
4853- ** 多种定时器** :一次性、周期性、计划任务
4954- ** 线程安全** :内置线程安全的 Timer 和 Scheduler
5055- ** 事件系统** :完整的事件驱动架构
@@ -106,8 +111,8 @@ GameFrameX 是一个基于 C# .NET 8.0 开发的高性能游戏服务器框架
106111 ```
107112
1081133 . ** 配置数据库**
109- - 启动 MongoDB 服务
110- - 修改配置文件中的数据库连接字符串
114+ - 启动 MongoDB 服务
115+ - 修改配置文件中的数据库连接字符串
111116
1121174 . ** 编译运行**
113118 ``` bash
@@ -116,9 +121,9 @@ GameFrameX 是一个基于 C# .NET 8.0 开发的高性能游戏服务器框架
116121 ```
117122
1181235 . ** 验证运行**
119- - 打开 Unity 工程
120- - 运行 Launcher 场景
121- - 查看控制台日志确认连接成功
124+ - 打开 Unity 工程
125+ - 运行 Launcher 场景
126+ - 查看控制台日志确认连接成功
122127
123128## 📁 项目结构
124129
@@ -241,6 +246,322 @@ docker build -t gameframex .
241246docker run -d -p 8080:8080 gameframex
242247```
243248
249+ # GameFrameX OpenTelemetry 指标配置文档
250+
251+ ## 概述
252+
253+ 本文档详细说明了 ` OpenTelemetryExtensions.cs ` 文件中配置的所有 OpenTelemetry 指标,包括指标的来源、用途和配置方式。
254+
255+ ## 配置的指标列表
256+
257+ ### 系统级指标
258+
259+ - ** Microsoft.AspNetCore.Hosting** : ASP.NET Core 主机指标
260+ - 请求处理时间
261+ - 请求计数
262+ - 错误率
263+ - 并发连接数
264+
265+ - ** System.Net.Http** : HTTP 客户端指标
266+ - HTTP 请求持续时间
267+ - HTTP 请求计数
268+ - HTTP 响应状态码分布
269+
270+ - ** System.Runtime** : .NET 运行时指标
271+ - GC 收集次数
272+ - 内存使用情况
273+ - 线程池状态
274+ - 异常计数
275+
276+ ### 数据库指标
277+
278+ - ** MongoDB.Driver.Core.Extensions.DiagnosticSources** : MongoDB 数据库指标
279+ - 数据库连接状态
280+ - 查询执行时间
281+ - 命令执行计数
282+ - 连接池状态
283+
284+ ### GameFrameX 自定义业务指标
285+
286+ - ** GameFrameX.Database** : 数据库相关指标
287+ - ` gameframex_database_query_total ` : 数据库查询总次数
288+ - ` gameframex_database_query_duration_seconds ` : 数据库查询持续时间
289+ - ` gameframex_database_connection_pool_size ` : 数据库连接池大小
290+ - ` gameframex_database_active_connections ` : 数据库活跃连接数
291+
292+ - ** GameFrameX.Network** : 网络相关指标
293+ - ` gameframex_network_connection_total ` : 网络连接总次数
294+ - ` gameframex_network_message_sent_total ` : 网络消息发送总数
295+ - ` gameframex_network_message_received_total ` : 网络消息接收总数
296+ - ` gameframex_network_bytes_sent_total ` : 网络字节发送总数
297+ - ` gameframex_network_bytes_received_total ` : 网络字节接收总数
298+ - ` gameframex_network_current_connections ` : 当前网络连接数
299+
300+ - ** GameFrameX.Session** : 会话相关指标
301+ - ` gameframex_session_created_total ` : 会话创建总数
302+ - ` gameframex_session_destroyed_total ` : 会话销毁总数
303+ - ` gameframex_session_duration_seconds ` : 会话持续时间
304+ - ` gameframex_session_active_count ` : 当前活跃会话数
305+
306+ - ** GameFrameX.Business** : 业务相关指标
307+ - ` gameframex_player_login_total ` : 玩家登录总数
308+ - ` gameframex_player_register_total ` : 玩家注册总数
309+ - ` gameframex_game_room_created_total ` : 游戏房间创建总数
310+ - ` gameframex_online_player_count ` : 当前在线玩家数
311+ - ` gameframex_active_game_room_count ` : 当前活跃游戏房间数
312+ - ` gameframex_http_api_request_total ` : HTTP API 请求总数
313+ - ` gameframex_http_api_request_duration_seconds ` : HTTP API 请求持续时间
314+
315+ ### 1. ASP.NET Core 内置指标
316+
317+ #### 1.1 Microsoft.AspNetCore.Hosting
318+
319+ - ** 配置方式** : ` configure.AddMeter("Microsoft.AspNetCore.Hosting") `
320+ - ** 指标类型** : ASP.NET Core 托管相关指标
321+ - ** 主要指标** :
322+ - ` http.server.request.duration ` - HTTP 服务器请求持续时间
323+ - ` http.server.active_requests ` - 当前活跃的 HTTP 请求数量
324+ - ** 用途** : 监控 Web 应用程序的 HTTP 请求性能和负载情况
325+ - ** 可用性** : .NET 8+
326+
327+ #### 1.2 Microsoft.AspNetCore.Server.Kestrel
328+
329+ - ** 配置方式** : ` configure.AddMeter("Microsoft.AspNetCore.Server.Kestrel") `
330+ - ** 指标类型** : Kestrel Web 服务器相关指标
331+ - ** 主要指标** :
332+ - ` kestrel.active_connections ` - 当前活跃连接数
333+ - ` kestrel.connection.duration ` - 连接持续时间
334+ - ` kestrel.rejected_connections ` - 被拒绝的连接数
335+ - ` kestrel.queued_connections ` - 排队等待的连接数
336+ - ` kestrel.queued_requests ` - 排队等待的请求数
337+ - ** 用途** : 监控 Kestrel 服务器的连接状态和性能
338+ - ** 可用性** : .NET 8+
339+
340+ ### 2. System.Net 网络库指标
341+
342+ #### 2.1 System.Net.Http
343+
344+ - ** 配置方式** : ` configure.AddMeter("System.Net.Http") `
345+ - ** 指标类型** : HTTP 客户端相关指标
346+ - ** 主要指标** :
347+ - ` http.client.request.duration ` - HTTP 客户端请求持续时间
348+ - ` http.client.active_requests ` - 当前活跃的客户端请求数
349+ - ` http.client.open_connections ` - 打开的 HTTP 连接数
350+ - ` http.client.connection.duration ` - HTTP 连接持续时间
351+ - ** 用途** : 监控应用程序发出的 HTTP 请求性能和连接状态
352+ - ** 可用性** : .NET 8+
353+
354+ #### 2.2 System.Net.NameResolution
355+
356+ - ** 配置方式** : ` configure.AddMeter("System.Net.NameResolution") `
357+ - ** 指标类型** : DNS 解析相关指标
358+ - ** 主要指标** :
359+ - ` dns.lookup.duration ` - DNS 查找持续时间
360+ - ** 用途** : 监控 DNS 解析性能,帮助诊断网络连接问题
361+ - ** 可用性** : .NET 8+
362+
363+ ### 3. .NET 运行时指标
364+
365+ #### 3.1 System.Runtime
366+
367+ - ** 配置方式** : ` configure.AddMeter("System.Runtime") `
368+ - ** 指标类型** : .NET 运行时性能指标
369+ - ** 主要指标** :
370+ - ` dotnet.process.cpu.time ` - 进程 CPU 使用时间
371+ - ` dotnet.process.memory.working_set ` - 进程工作集内存
372+ - ` dotnet.gc.collections ` - GC 收集次数
373+ - ` dotnet.gc.heap.total_allocated ` - 堆总分配内存
374+ - ` dotnet.gc.last_collection.memory.committed_size ` - 最后一次 GC 后提交的内存大小
375+ - ` dotnet.gc.last_collection.heap.size ` - 最后一次 GC 后堆大小
376+ - ` dotnet.gc.last_collection.heap.fragmentation.size ` - 最后一次 GC 后堆碎片大小
377+ - ` dotnet.thread_pool.thread.count ` - 线程池线程数量
378+ - ` dotnet.thread_pool.work_item.count ` - 线程池工作项数量
379+ - ` dotnet.thread_pool.queue.length ` - 线程池队列长度
380+ - ** 用途** : 监控 .NET 应用程序的运行时性能,包括内存使用、GC 行为和线程池状态
381+ - ** 可用性** : .NET 9+ (注意:在 .NET 8 中可能不会产生数据)
382+
383+ ### 4. ASP.NET Core Blazor 组件指标(可选)
384+
385+ #### 4.1 Microsoft.AspNetCore.Components
386+
387+ - ** 配置方式** : ` configure.AddMeter("Microsoft.AspNetCore.Components") ` (当前已注释)
388+ - ** 指标类型** : Blazor 组件相关指标
389+ - ** 用途** : 监控 Blazor 组件的性能和行为
390+ - ** 状态** : 已注释,仅在使用 Blazor 功能时启用
391+
392+ #### 4.2 Microsoft.AspNetCore.Components.Lifecycle
393+
394+ - ** 配置方式** : ` configure.AddMeter("Microsoft.AspNetCore.Components.Lifecycle") ` (当前已注释)
395+ - ** 指标类型** : Blazor 组件生命周期指标
396+ - ** 用途** : 监控 Blazor 组件的生命周期事件
397+ - ** 状态** : 已注释,仅在使用 Blazor 功能时启用
398+
399+ #### 4.3 Microsoft.AspNetCore.Components.Server.Circuits
400+
401+ - ** 配置方式** : ` configure.AddMeter("Microsoft.AspNetCore.Components.Server.Circuits") ` (当前已注释)
402+ - ** 指标类型** : Blazor Server 电路相关指标
403+ - ** 用途** : 监控 Blazor Server 应用程序的电路状态
404+ - ** 状态** : 已注释,仅在使用 Blazor Server 功能时启用
405+
406+ ## 配置结构
407+
408+ ### 主要配置方法
409+
410+ 1 . ** AddGameFrameXOpenTelemetry** : 主要的 OpenTelemetry 配置方法
411+ 2 . ** AddGameFrameXHealthChecks** : 添加健康检查服务配置
412+ 3 . ** UseGameFrameXHealthChecks** : 配置健康检查端点
413+ 4 . ** CreateMetricsServerAsync** : 创建独立的指标服务器
414+
415+ ### 配置特性
416+
417+ - ** 条件配置** : 通过 ` setting.IsOpenTelemetry ` 和 ` setting.IsOpenTelemetryMetrics ` 控制是否启用
418+ - ** 开发环境支持** : 在开发环境下启用控制台导出器
419+ - ** Prometheus 导出** : 配置 Prometheus 格式的指标导出
420+ - ** Grafana 集成** : 通过 ` UseGrafana() ` 集成 Grafana 监控
421+
422+ ### 导出器配置
423+
424+ - ** Prometheus 导出器** : ` configure.AddPrometheusExporter() `
425+ - ** 控制台导出器** : ` configure.AddConsoleExporter() ` (仅开发环境)
426+ - ** Grafana 集成** : ` builder.UseGrafana() `
427+
428+ ## 独立指标服务器
429+
430+ ### 功能特性
431+
432+ - ** 独立端口** : 在指定端口上运行独立的指标服务器
433+ - ** 健康检查** : 提供 ` /health ` 端点进行健康检查
434+ - ** Prometheus 端点** : 提供 ` /metrics ` 端点供 Prometheus 抓取
435+ - ** 端口检查** : 启动前检查端口可用性
436+
437+ ### 端点说明
438+
439+ - ** 指标端点** : ` http://{ip}:{port}/metrics `
440+ - ** 健康检查端点** : ` http://{ip}:{port}/health `
441+
442+ ## 使用建议
443+
444+ ### 1. 监控指标使用示例
445+
446+ ``` csharp
447+ // 在业务代码中使用自定义指标
448+ using GameFrameX .Monitor ;
449+
450+ // 记录数据库查询
451+ GameFrameXMetrics .DatabaseQueryCount .Add (1 , new KeyValuePair <string , object ?>(" operation" , " find" ));
452+
453+ // 记录网络消息
454+ GameFrameXMetrics .NetworkMessageSentCount .Add (1 , new KeyValuePair <string , object ?>(" message_type" , " login" ));
455+
456+ // 记录玩家登录
457+ GameFrameXMetrics .PlayerLoginCount .Add (1 , new KeyValuePair <string , object ?>(" login_type" , " normal" ));
458+ ```
459+
460+ ### 2. 指标标签建议
461+
462+ 为了更好地分析监控数据,建议在记录指标时添加适当的标签:
463+
464+ - ** 数据库指标标签** :
465+ - ` operation ` : 操作类型(find, insert, update, delete)
466+ - ` collection ` : 集合名称
467+ - ` database ` : 数据库名称
468+
469+ - ** 网络指标标签** :
470+ - ` message_type ` : 消息类型
471+ - ` protocol ` : 协议类型(tcp, udp, websocket)
472+ - ` endpoint ` : 端点信息
473+
474+ - ** 会话指标标签** :
475+ - ` session_type ` : 会话类型
476+ - ` user_type ` : 用户类型
477+
478+ - ** 业务指标标签** :
479+ - ` game_mode ` : 游戏模式
480+ - ` server_region ` : 服务器区域
481+ - ` user_level ` : 用户等级
482+
483+ ### 3. 性能考虑
484+
485+ - 避免创建过多的标签组合,以免影响性能
486+ - 对于高频操作,考虑使用采样策略
487+ - 定期清理不再使用的指标实例
488+
489+ ### 4. 环境配置建议
490+
491+ 1 . ** 生产环境** : 建议启用所有相关指标以获得完整的监控覆盖
492+ 2 . ** 开发环境** : 可以启用控制台导出器进行实时调试
493+ 3 . ** Blazor 应用** : 如果使用 Blazor 功能,取消注释相关的 Blazor 指标配置
494+ 4 . ** .NET 版本** : 注意 ` System.Runtime ` 指标需要 .NET 9+ 才能正常工作
495+ 5 . ** 资源监控** : 定期监控指标收集对应用程序性能的影响
496+
497+ ## 健康检查功能
498+
499+ ### 健康检查服务配置
500+
501+ #### AddGameFrameXHealthChecks 方法
502+
503+ - ** 功能** : 添加健康检查服务到依赖注入容器
504+ - ** 配置** :
505+ - 基本健康检查:检查应用程序自身状态
506+ - OpenTelemetry 健康检查:当启用 OpenTelemetry 时自动添加
507+ - ** 用途** : 提供应用程序健康状态监控
508+
509+ #### UseGameFrameXHealthChecks 方法
510+
511+ - ** 功能** : 配置健康检查 HTTP 端点
512+ - ** 端点** :
513+ - ` /health ` : 详细的 JSON 格式健康检查报告
514+ - ` /health/simple ` : 简单的 "OK" 响应(兼容性端点)
515+ - ** 响应格式** : JSON 格式,包含状态、检查项详情、持续时间、服务器信息和时间戳
516+
517+ ### 健康检查响应示例
518+
519+ ``` json
520+ {
521+ "status" : " Healthy" ,
522+ "checks" : [
523+ {
524+ "name" : " self" ,
525+ "status" : " Healthy" ,
526+ "description" : " 应用程序运行正常" ,
527+ "duration" : 0.1234
528+ },
529+ {
530+ "name" : " opentelemetry" ,
531+ "status" : " Healthy" ,
532+ "description" : " OpenTelemetry 配置正常" ,
533+ "duration" : 0.0567
534+ }
535+ ],
536+ "totalDuration" : 0.1801 ,
537+ "serverName" : " GameServer" ,
538+ "tagName" : " Production" ,
539+ "timestamp" : " 2024-01-15T10:30:00.000Z"
540+ }
541+ ```
542+
543+ ### 使用方式
544+
545+ ``` csharp
546+ // 在 Program.cs 或 Startup.cs 中配置
547+ builder .Services .AddGameFrameXHealthChecks (appSetting );
548+
549+ // 配置健康检查端点
550+ app .UseGameFrameXHealthChecks (appSetting );
551+ // 或指定自定义路径
552+ app .UseGameFrameXHealthChecks (appSetting , " /api/health" );
553+ ```
554+
555+ ## 注意事项
556+
557+ - ` System.Runtime ` 指标在 .NET 8 中可能不会产生数据,建议在 .NET 9+ 中使用
558+ - Blazor 相关指标仅在使用相应功能时才会产生有意义的数据
559+ - 指标收集会对应用程序性能产生轻微影响,建议在生产环境中进行性能测试
560+ - 独立指标服务器需要额外的端口资源,确保端口不被其他服务占用
561+ - ** 健康检查功能独立于 Grafana 配置** ,即使不启用 OpenTelemetry 也可以单独使用健康检查功能
562+ - 健康检查端点应该被监控系统(如 Kubernetes、Docker Swarm、负载均衡器等)用于服务健康状态检测
563+ -
564+
244565### 生产环境配置
245566
2465671 . ** 数据库配置** :配置 MongoDB 集群
0 commit comments