name: 指标
描述: “系统指标、遥测和性能监控”
表情符号: “📈”
指标 - 完整API参考
监控系统健康,跟踪性能指标,并分析遥测数据。
聊天命令
系统指标
/指标 显示当前指标
/指标 系统 CPU、内存、延迟
/指标 api API性能统计
/指标 ws WebSocket健康
交易指标
/指标 交易 交易执行统计
/指标 填充率 填充率指标
/指标 延迟 订单延迟统计
/指标 错误 错误率
自定义指标
/指标 跟踪 <名称> <值> 跟踪自定义指标
/指标 查询 <名称> 查询指标历史
/指标 警报 <名称> > 100 设置指标警报
导出与报告
/指标 导出 csv 导出到CSV
/指标 报告 每日 生成每日报告
/指标 仪表板 打开指标仪表板
TypeScript API参考
创建指标服务
import { createMetricsService } from 'clodds/metrics';
const metrics = createMetricsService({
// 收集
collectInterval: 5000, // 毫秒
retention: '30d',
// 存储
storage: 'sqlite',
dbPath: './metrics.db',
// 导出
enablePrometheus: true,
prometheusPort: 9090,
});
// 开始收集
await metrics.start();
系统指标
const system = await metrics.getSystemMetrics();
console.log('=== 系统健康 ===');
console.log(`CPU使用率: ${system.cpuUsage}%`);
console.log(`内存: ${system.memoryUsed}MB / ${system.memoryTotal}MB`);
console.log(`运行时间: ${system.uptimeHours}小时`);
console.log(`活跃连接: ${system.activeConnections}`);
console.log(`事件循环延迟: ${system.eventLoopLag}毫秒`);
API指标
const api = await metrics.getApiMetrics();
console.log('=== API性能 ===');
console.log(`总请求数: ${api.totalRequests}`);
console.log(`每秒请求数: ${api.requestsPerSecond}`);
console.log(`平均延迟: ${api.avgLatency}毫秒`);
console.log(`P50延迟: ${api.p50Latency}毫秒`);
console.log(`P95延迟: ${api.p95Latency}毫秒`);
console.log(`P99延迟: ${api.p99Latency}ms`);
console.log(`错误率: ${api.errorRate}%`);
console.log('
按端点:');
for (const endpoint of api.byEndpoint) {
console.log(` ${endpoint.path}: ${endpoint.avgLatency}毫秒 (${endpoint.calls} 次调用)`);
}
WebSocket指标
const ws = await metrics.getWebSocketMetrics();
console.log('=== WebSocket健康 ===');
console.log(`活跃连接: ${ws.activeConnections}`);
console.log(`每秒消息数: ${ws.messagesPerSecond}`);
console.log(`平均消息大小: ${ws.avgMessageSize} 字节`);
console.log(`重连次数: ${ws.reconnections}`);
console.log(`丢弃消息数: ${ws.droppedMessages}`);
console.log('
按订阅源:');
for (const feed of ws.byFeed) {
console.log(` ${feed.name}: ${feed.messagesPerSecond}/秒, ${feed.latency}毫秒延迟`);
}
交易执行指标
const trades = await metrics.getTradeMetrics();
console.log('=== 交易执行 ===');
console.log(`总订单数: ${trades.totalOrders}`);
console.log(`填充率: ${trades.fillRate}%`);
console.log(`部分填充率: ${trades.partialFillRate}%`);
console.log(`拒绝率: ${trades.rejectionRate}%`);
console.log(`平均填充时间: ${trades.avgFillTime}毫秒`);
console.log(`平均滑点: ${trades.avgSlippage}%`);
console.log('
按平台:');
for (const platform of trades.byPlatform) {
console.log(` ${platform.name}:`);
console.log(` 填充率: ${platform.fillRate}%`);
console.log(` 平均延迟: ${platform.avgLatency}毫秒`);
}
延迟细分
const latency = await metrics.getLatencyBreakdown();
console.log('=== 延迟细分 ===');
console.log(`总订单延迟: ${latency.total}毫秒`);
console.log(` 信号处理: ${latency.signalProcessing}毫秒`);
console.log(` 订单构建: ${latency.orderConstruction}毫秒`);
console.log(` 网络往返: ${latency.networkRoundTrip}毫秒`);
console.log(` 交易所处理: ${latency.exchangeProcessing}毫秒`);
console.log(` 确认: ${latency.confirmation}毫秒`);
错误指标
const errors = await metrics.getErrorMetrics();
console.log('=== 错误率 ===');
console.log(`总错误数: ${errors.totalErrors}`);
console.log(`错误率: ${errors.errorRate}%`);
console.log(`每小时错误数: ${errors.errorsPerHour}`);
console.log('
按类型:');
for (const type of errors.byType) {
console.log(` ${type.name}: ${type.count} (${type.percentage}%)`);
}
console.log('
按平台:');
for (const platform of errors.byPlatform) {
console.log(` ${platform.name}: ${platform.errorRate}%`);
}
自定义指标
// 跟踪自定义指标
metrics.track('edge_detected', 1, {
market: 'trump-2028',
edgeSize: 0.05,
});
// 增加计数器
metrics.increment('trades_executed');
// 设置仪表
metrics.gauge('active_positions', 5);
// 记录时间
const timer = metrics.startTimer('order_execution');
// ... 执行订单 ...
timer.end();
// 直方图
metrics.histogram('slippage', 0.003, {
platform: 'polymarket',
});
查询指标
const query = await metrics.query({
metric: 'edge_detected',
period: '7d',
aggregation: 'sum',
groupBy: 'market',
});
console.log('按市场边缘检测:');
for (const row of query.results) {
console.log(` ${row.market}: ${row.value} 次检测`);
}
指标警报
// 设置警报阈值
metrics.setAlert({
metric: 'error_rate',
condition: '>',
threshold: 5, // > 5% 错误率
window: '5m',
action: 'notify',
});
metrics.setAlert({
metric: 'latency_p99',
condition: '>',
threshold: 1000, // > 1000毫秒
window: '1m',
action: 'escalate',
});
// 警报处理程序
metrics.on('alert', (alert) => {
console.log(`🚨 警报: ${alert.metric} ${alert.condition} ${alert.threshold}`);
console.log(` 当前值: ${alert.currentValue}`);
});
导出指标
// 导出到CSV
await metrics.export({
format: 'csv',
metrics: ['api_latency', 'trade_fill_rate', 'error_rate'],
period: '30d',
outputPath: './metrics-export.csv',
});
// 导出到Prometheus
const prometheusFormat = metrics.toPrometheus();
// 导出到JSON
const jsonMetrics = await metrics.toJSON({
period: '24h',
});
生成报告
const report = await metrics.generateReport({
type: 'daily',
include: ['summary', 'api', 'trades', 'errors'],
});
console.log('=== 每日指标报告 ===');
console.log(`日期: ${report.date}`);
console.log(`
摘要:`);
console.log(` 运行时间: ${report.summary.uptime}%`);
console.log(` 总请求数: ${report.summary.totalRequests}`);
console.log(` 总交易数: ${report.summary.totalTrades}`);
console.log(` 错误率: ${report.summary.errorRate}%`);
console.log(`
亮点:`);
for (const highlight of report.highlights) {
console.log(` - ${highlight}`);
}
实时流
// 实时流指标
const stream = metrics.stream(['cpu', 'memory', 'latency']);
stream.on('data', (data) => {
console.log(`CPU: ${data.cpu}%, 内存: ${data.memory}MB, 延迟: ${data.latency}毫秒`);
});
// 停止流
stream.stop();
指标类型
| 类型 |
描述 |
示例 |
| 计数器 |
单调增加 |
trades_total |
| 仪表 |
点时间值 |
active_positions |
| 直方图 |
分布 |
latency_ms |
| 计时器 |
持续时间测量 |
order_execution_time |
内置指标
| 类别 |
指标 |
| 系统 |
cpu_usage, memory_used, uptime, connections |
| API |
request_count, latency_p50/p95/p99, error_rate |
| WebSocket |
messages_per_sec, lag, reconnections |
| 交易 |
orders_total, fill_rate, slippage, execution_time |
| 错误 |
error_count, error_rate_by_type |
最佳实践
- 监控延迟百分位数 — P99比平均值更重要
- 主动设置警报 — 在用户注意到之前发现问题
- 跟踪自定义指标 — 特定于业务的KPI
- 每日审查报告 — 早期发现趋势
- 导出进行分析 — 使用外部工具进行深入挖掘