Skip to content

Commit beb5adb

Browse files
committed
[增加] README 的健康检查的参数配置
1 parent 4ea9bbc commit beb5adb

File tree

1 file changed

+326
-5
lines changed

1 file changed

+326
-5
lines changed

README.md

Lines changed: 326 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

108113
3. **配置数据库**
109-
- 启动 MongoDB 服务
110-
- 修改配置文件中的数据库连接字符串
114+
- 启动 MongoDB 服务
115+
- 修改配置文件中的数据库连接字符串
111116

112117
4. **编译运行**
113118
```bash
@@ -116,9 +121,9 @@ GameFrameX 是一个基于 C# .NET 8.0 开发的高性能游戏服务器框架
116121
```
117122

118123
5. **验证运行**
119-
- 打开 Unity 工程
120-
- 运行 Launcher 场景
121-
- 查看控制台日志确认连接成功
124+
- 打开 Unity 工程
125+
- 运行 Launcher 场景
126+
- 查看控制台日志确认连接成功
122127

123128
## 📁 项目结构
124129

@@ -241,6 +246,322 @@ docker build -t gameframex .
241246
docker 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

246567
1. **数据库配置**:配置 MongoDB 集群

0 commit comments

Comments
 (0)