# 性能监控系统文档

## 概述

性能监控系统是一个全面的监控工具，用于实时跟踪和分析应用程序的性能指标。它包括以下主要功能：

- **系统资源监控**：CPU、内存和磁盘使用情况
- **数据库性能监控**：连接池状态、慢查询识别和查询模式分析
- **API性能监控**：请求响应时间、错误率和请求频率
- **警报系统**：基于可配置阈值的性能警报
- **历史数据**：性能指标的历史记录和趋势分析
- **可视化界面**：直观的性能指标展示

## 系统架构

性能监控系统由以下组件组成：

1. **核心监控引擎**：`performance-monitor.js`
2. **API中间件**：`performance-middleware.js`
3. **配置模块**：`performance-config.js`
4. **API路由**：`performance-routes.js`
5. **前端组件**：`PerformanceMonitor.vue`

## 安装和配置

### 后端集成

1. 在Express应用中引入性能监控系统：

```javascript
const { initPerformanceMonitoring, getPerformanceRoutes } = require('./backend/config/performance-config');

// 初始化性能监控系统
const performanceMonitor = initPerformanceMonitoring(app, {
  autoStart: true,
  interval: 60000, // 监控间隔（毫秒）
  logToConsole: false,
  thresholds: {
    system: {
      cpuUsage: 80, // CPU使用率阈值（百分比）
      memoryUsage: 80, // 内存使用率阈值（百分比）
      diskUsage: 80 // 磁盘使用率阈值（百分比）
    },
    database: {
      connectionPoolUtilization: 80, // 连接池利用率阈值（百分比）
      slowQueryCount: 5, // 慢查询数量阈值
      errorRate: 5 // 错误率阈值（百分比）
    },
    api: {
      responseTime: 500, // API响应时间阈值（毫秒）
      errorRate: 5, // API错误率阈值（百分比）
      requestRate: 1000 // 每分钟请求数阈值
    }
  }
});

// 注册性能监控路由
app.use('/api/performance', getPerformanceRoutes());
```

### 前端集成

1. 在Vue应用中引入性能监控组件：

```javascript
import PerformanceMonitor from './components/PerformanceMonitor.vue';

// 在Vue组件中使用
export default {
  components: {
    PerformanceMonitor
  }
}
```

2. 在模板中使用组件：

```html
<template>
  <div>
    <performance-monitor />
  </div>
</template>
```

## API参考

### 后端API

#### 性能监控核心API

```javascript
const { performanceMonitor } = require('./backend/utils/performance-monitor');

// 启动监控
performanceMonitor.startMonitoring(60000); // 参数：监控间隔（毫秒）

// 停止监控
performanceMonitor.stopMonitoring();

// 获取所有性能指标
const metrics = await performanceMonitor.getAllMetrics();

// 获取系统资源指标
const systemMetrics = performanceMonitor.getSystemMetrics();

// 获取数据库性能指标
const dbMetrics = await performanceMonitor.getDatabaseMetrics();

// 获取API性能指标
const apiStats = performanceMonitor.getApiStats();

// 设置警报阈值
performanceMonitor.setAlertThresholds({
  system: { cpuUsage: 75 },
  api: { responseTime: 300 }
});

// 获取警报阈值
const thresholds = performanceMonitor.getAlertThresholds();

// 重置API统计
performanceMonitor.resetApiStats();
```

#### HTTP API端点

| 端点 | 方法 | 描述 |
|------|------|------|
| `/api/performance/metrics` | GET | 获取所有性能指标 |
| `/api/performance/system` | GET | 获取系统资源指标 |
| `/api/performance/database` | GET | 获取数据库性能指标 |
| `/api/performance/api` | GET | 获取API性能指标 |
| `/api/performance/start` | POST | 启动性能监控 |
| `/api/performance/stop` | POST | 停止性能监控 |
| `/api/performance/status` | GET | 获取监控状态 |
| `/api/performance/thresholds` | GET | 获取警报阈值 |
| `/api/performance/thresholds` | POST | 设置警报阈值 |
| `/api/performance/api/reset` | POST | 重置API统计 |

### 事件系统

性能监控系统提供了一个事件系统，可以监听各种性能相关的事件：

```javascript
const { perfEvents } = require('./backend/utils/performance-monitor');

// 监控启动事件
perfEvents.on('monitoringStarted', (data) => {
  console.log(`性能监控已启动，间隔: ${data.interval}ms`);
});

// 监控停止事件
perfEvents.on('monitoringStopped', () => {
  console.log('性能监控已停止');
});

// 数据库状态变化事件
perfEvents.on('databaseStatus', (status) => {
  console.log('数据库状态更新:', status);
});

// 数据库错误事件
perfEvents.on('databaseError', (error) => {
  console.error('数据库错误:', error);
});

// 慢查询事件
perfEvents.on('slowQuery', (query) => {
  console.warn(`检测到慢查询: ${query.duration}ms - ${query.query}`);
});

// API错误事件
perfEvents.on('apiError', (data) => {
  console.error(`API错误: ${data.method} ${data.path} - ${data.error}`);
});

// 慢API请求事件
perfEvents.on('slowApiRequest', (data) => {
  console.warn(`慢API请求: ${data.endpoint} - ${data.duration}ms`);
});

// 高CPU使用率事件
perfEvents.on('highCpuUsage', (data) => {
  console.warn(`高CPU使用率: ${data.usage}% (阈值: ${data.threshold}%)`);
});

// 高内存使用率事件
perfEvents.on('highMemoryUsage', (data) => {
  console.warn(`高内存使用率: ${data.usage}% (阈值: ${data.threshold}%)`);
});

// 高磁盘使用率事件
perfEvents.on('highDiskUsage', (data) => {
  console.warn(`高磁盘使用率: ${data.usage}% (阈值: ${data.threshold}%)`);
});
```

## 前端组件

`PerformanceMonitor.vue` 组件提供了一个直观的界面，用于展示性能指标和配置警报阈值。它包括以下功能：

- 系统资源监控面板（CPU、内存、磁盘）
- 数据库性能监控面板（连接池、慢查询、查询模式）
- API性能监控面板（请求统计、响应时间、错误率）
- 警报配置面板（设置各项指标的警报阈值）
- 实时图表展示历史趋势

## 最佳实践

### 性能监控

1. **设置合适的监控间隔**：根据应用负载和服务器资源选择合适的监控间隔。高负载系统可能需要更长的间隔（如5分钟），而关键系统可能需要更短的间隔（如30秒）。

2. **配置合理的警报阈值**：根据系统特性和业务需求设置合理的警报阈值。过低的阈值可能导致过多的警报，过高的阈值可能导致问题被忽略。

3. **定期分析性能数据**：定期查看性能监控数据，识别潜在问题和优化机会。

### 数据库优化

1. **关注慢查询**：定期检查慢查询列表，优化频繁出现的慢查询。

2. **监控连接池**：保持合理的连接池大小，避免连接池耗尽或过度分配。

3. **分析查询模式**：利用查询模式统计，识别频繁执行的查询，考虑添加索引或优化查询结构。

### API优化

1. **关注慢响应API**：优化响应时间超过阈值的API端点。

2. **监控错误率**：保持低错误率，及时修复错误率高的API端点。

3. **平衡请求负载**：避免单个端点过度负载，考虑负载均衡或缓存策略。

## 故障排除

### 常见问题

1. **监控系统占用过多资源**：
   - 增加监控间隔
   - 减少收集的指标
   - 限制历史数据存储量

2. **警报过多**：
   - 调整警报阈值
   - 合并相似警报
   - 实现警报抑制机制

3. **数据不准确**：
   - 检查监控代码是否正确集成
   - 验证数据源是否可靠
   - 确保时间同步

### 日志文件

性能监控系统会在 `logs/performance` 目录下生成以下日志文件：

- `system-YYYY-MM-DD.log`：系统资源监控日志
- `database-YYYY-MM-DD.log`：数据库性能监控日志
- `system-error-YYYY-MM-DD.log`：系统监控错误日志
- `database-error-YYYY-MM-DD.log`：数据库监控错误日志

## 扩展和定制

### 添加新的监控指标

要添加新的监控指标，需要修改以下文件：

1. `performance-monitor.js`：添加新的指标收集和处理逻辑
2. `performance-routes.js`：添加新的API端点
3. `PerformanceMonitor.vue`：添加新的UI组件展示指标

### 集成外部监控系统

性能监控系统可以与外部监控系统集成，如Prometheus、Grafana或ELK堆栈：

```javascript
// 示例：将性能指标导出到Prometheus
const client = require('prom-client');
const register = new client.Registry();

// 创建指标
const cpuGauge = new client.Gauge({
  name: 'cpu_usage_percent',
  help: 'CPU使用率百分比',
  registers: [register]
});

// 更新指标
perfEvents.on('systemMetrics', (metrics) => {
  cpuGauge.set(metrics.cpuUsage.usage);
});

// 暴露指标端点
app.get('/metrics', (req, res) => {
  res.set('Content-Type', register.contentType);
  res.end(register.metrics());
});
```

## 结论

性能监控系统提供了全面的工具，用于监控和优化应用程序的性能。通过实时跟踪系统资源、数据库性能和API响应时间，可以及早发现潜在问题，提高应用程序的可靠性和用户体验。

定期查看性能指标，设置合理的警报阈值，并根据性能数据进行优化，可以显著提高应用程序的性能和稳定性。