如何把浏览器端的 JavaScript 错误采集到 Kibana?

采集前端 JS 错误到 Kibana 的流程:浏览器端捕获错误 → 发送到日志收集端 → 写入 Elasticsearch → Kibana 展示。本文介绍完整方案及观测云 RUM 的替代方案。

最佳实践
如何把浏览器端的 JavaScript 错误采集到 Kibana?封面

整体流程:在浏览器端用 window.onerrorunhandledrejection 捕获错误 → 通过 HTTP 发送到日志收集服务(如 Logstash/Fluentd)→ 写入 Elasticsearch → 在 Kibana 中查看和分析。

第一步:浏览器端捕获错误

// 捕获全局错误
window.onerror = function(message, source, lineno, colno, error) {
  sendError({
    type: 'error',
    message: message,
    source: source,
    lineno: lineno,
    colno: colno,
    stack: error ? error.stack : null,
    url: window.location.href,
    userAgent: navigator.userAgent,
    timestamp: new Date().toISOString()
  });
};

// 捕获未处理的 Promise 拒绝
window.addEventListener('unhandledrejection', function(event) {
  sendError({
    type: 'unhandledrejection',
    message: event.reason ? event.reason.message : 'Unknown',
    stack: event.reason ? event.reason.stack : null,
    url: window.location.href,
    timestamp: new Date().toISOString()
  });
});

function sendError(data) {
  fetch('/api/log-error', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(data)
  }).catch(() => {});  // 发送失败也不影响用户
}

第二步:后端接收并写入 Elasticsearch

后端提供一个接收接口,把错误数据转发到 Logstash 或直接写入 Elasticsearch。

第三步:Kibana 中查看

在 Kibana 中创建索引模式,按错误类型、URL、时间维度分析。

观测云对照

上述方案需要自建收集管道。观测云 RUM(用户访问监测)提供了开箱即用的前端错误采集:只需在页面中引入观测云 RUM SDK,即可自动捕获 JS 错误、Promise 异常、资源加载失败,并附带用户会话、页面路径、设备信息,在观测云控制台直接分析,无需自建管道。

常见问题(FAQ)

Q:window.onerror 能捕获所有错误吗?
A:不能。跨域脚本的错误会被浏览器隐藏(只报 "Script error"),需要给 script 标签加 crossorigin 属性并让 CDN 返回 CORS 头。

Q:Source Map 怎么用?
A:压缩混淆后的代码堆栈不可读,需要上传 Source Map 到错误监控平台,还原原始代码位置。观测云 RUM 支持 Source Map 自动还原。

Q:发送错误会不会影响页面性能?
A:用 navigator.sendBeacon() 替代 fetch 更可靠(页面关闭时也能发出),且异步不阻塞页面。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台