星尘监控 JavaScript/Node.js SDK,提供APM(Application Performance Monitoring)性能监控能力。
- ✅ 支持 Node.js 14+ 和现代浏览器
- ✅ 自动追踪HTTP请求(Express、Koa、fetch、XMLHttpRequest)
- ✅ 手动埋点支持
- ✅ 自动数据聚合和定时上报
- ✅ 支持GZIP压缩传输
- ✅ 零外部依赖(Node.js使用内置模块)
# 如果发布到npm
npm install stardust-tracer
# 或直接使用源码
cp -r SDK/JavaScript/src /your-project/stardust-tracerconst { StardustTracer } = require('./src');
// 创建追踪器实例
const tracer = new StardustTracer(
'http://star.example.com:6600', // 星尘服务器地址
'MyApp', // 应用ID
'MySecret' // 应用密钥
);
// 启动追踪器
tracer.start();
// 手动埋点
async function businessLogic() {
const span = tracer.newSpan('业务操作');
span.setTag('user=123, action=create');
try {
// 执行业务逻辑
await doSomething();
} catch (err) {
span.setError(err);
throw err;
} finally {
span.finish();
}
}
// 程序退出时停止追踪器
process.on('SIGINT', () => {
tracer.stop();
process.exit();
});<!DOCTYPE html>
<html>
<head>
<title>Stardust Browser Demo</title>
</head>
<body>
<h1>Stardust APM 浏览器示例</h1>
<button onclick="makeRequest()">发起请求</button>
<script src="src/browser-tracer.js"></script>
<script src="src/middleware/browser.js"></script>
<script>
// 创建浏览器追踪器
const tracer = new StardustBrowserTracer(
'http://star.example.com:6600',
'MyWebApp',
'MySecret'
);
// 启动追踪器
tracer.start();
// 安装自动拦截器(自动追踪fetch和XMLHttpRequest)
installBrowserInterceptors(tracer);
// 手动埋点示例
function makeRequest() {
const span = tracer.newSpan('用户点击按钮');
span.setTag('action=click, button=makeRequest');
fetch('/api/data')
.then(response => response.json())
.then(data => {
console.log('Data:', data);
span.finish();
})
.catch(err => {
span.setError(err);
span.finish();
});
}
</script>
</body>
</html>const express = require('express');
const { StardustTracer } = require('./src');
const createExpressMiddleware = require('./src/middleware/express');
const app = express();
// 创建追踪器
const tracer = new StardustTracer(
'http://star.example.com:6600',
'MyExpressApp',
'MySecret'
);
tracer.start();
// 使用中间件(自动追踪所有HTTP请求)
app.use(createExpressMiddleware(tracer));
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});const Koa = require('koa');
const { StardustTracer } = require('./src');
const createKoaMiddleware = require('./src/middleware/koa');
const app = new Koa();
// 创建追踪器
const tracer = new StardustTracer(
'http://star.example.com:6600',
'MyKoaApp',
'MySecret'
);
tracer.start();
// 使用中间件(自动追踪所有HTTP请求)
app.use(createKoaMiddleware(tracer));
app.use(async ctx => {
ctx.body = 'Hello World!';
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});new StardustTracer(server, appId, secret)server: 星尘服务器地址appId: 应用IDsecret: 应用密钥(可选)
start(): 启动追踪器,自动登录并开始定时上报stop(): 停止追踪器,刷新剩余数据newSpan(name, parentId): 创建新的Span对象name: Span名称parentId: 父Span ID(可选)- 返回: Span对象
period: 上报周期(秒),默认60秒maxSamples: 每个操作的最大正常样本数,默认1maxErrors: 每个操作的最大错误样本数,默认10maxTagLength: 标签最大长度,默认1024excludes: 排除的操作名称列表
setTag(tag): 设置标签信息setError(err): 设置错误信息finish(): 完成Span并上报
new StardustBrowserTracer(server, appId, secret)参数同StardustTracer
start(): 启动追踪器stop(): 停止追踪器newSpan(name): 创建新的Span对象
const { installBrowserInterceptors } = require('./src/middleware/browser');
// 自动拦截fetch和XMLHttpRequest
installBrowserInterceptors(tracer);SDK会自动聚合同名Span的统计信息,包括:
- 总调用次数
- 错误次数
- 总耗时、平均耗时、最大耗时、最小耗时
- 正常样本和错误样本
数据格式示例:
{
"AppId": "MyApp",
"AppName": "MyApp",
"ClientId": "192.168.1.100@12345",
"Builders": [
{
"Name": "GET /api/users",
"StartTime": 1707744000000,
"EndTime": 1707744060000,
"Total": 150,
"Errors": 3,
"Cost": 45000,
"MaxCost": 500,
"MinCost": 50,
"Samples": [...],
"ErrorSamples": [...]
}
]
}可以通过环境变量配置:
# 星尘服务器地址
STARDUST_SERVER=http://star.example.com:6600
# 应用ID
STARDUST_APP_ID=MyApp
# 应用密钥
STARDUST_SECRET=MySecret服务器会在响应中返回配置参数,SDK会自动应用:
Period: 上报周期MaxSamples: 最大样本数MaxErrors: 最大错误样本数Timeout: 超时时间MaxTagLength: 标签最大长度Excludes: 排除列表
- 统一命名规范: 使用一致的Span命名,如
HTTP Method + Path - 合理使用标签: 在Tag中包含关键参数,但避免包含敏感信息
- 错误处理: 始终在catch块中调用
setError() - 资源清理: 应用退出时调用
stop()确保数据上报完整 - 性能考虑: SDK内部已做优化,正常使用对性能影响极小
检查:
- 星尘服务器地址是否正确
- 网络连接是否正常
- 应用ID和密钥是否正确
检查:
- 是否调用了
start() - 是否在退出前调用了
stop() - 查看控制台错误日志
需要在星尘服务器端配置CORS允许跨域请求。
MIT License