使用Highlight实现Remix全栈应用监控指南

使用Highlight实现Remix全栈应用监控指南

highlight highlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging and more. highlight 项目地址: https://gitcode.com/gh_mirrors/hi/highlight

前言

在现代Web开发中,全栈应用监控变得越来越重要。Highlight项目为Remix框架提供了完整的监控解决方案,能够同时捕获前端会话回放和后端错误监控。本文将详细介绍如何在Remix应用中集成Highlight,实现全方位的应用监控。

Highlight与Remix集成概述

Highlight为Remix应用提供两大核心功能:

  1. 前端监控:记录用户会话回放、捕获客户端错误
  2. 服务端监控:追踪Node.js服务器错误和性能问题

这种全栈监控能力让开发者能够全面了解应用运行状况,快速定位和解决问题。

安装配置

首先安装Highlight的Remix SDK:

npm install @highlight-run/remix
# 或
yarn add @highlight-run/remix

客户端监控配置

基础配置

在应用的根组件中注入<HighlightInit />

// app/root.tsx
import { HighlightInit } from '@highlight-run/remix/client'

export default function App() {
  return (
    <html lang="en">
      <HighlightInit
        projectId={process.env.HIGHLIGHT_PROJECT_ID}
        serviceName="my-remix-frontend"
        tracingOrigins
        networkRecording={{ enabled: true }}
      />
      {/* 应用其他内容 */}
    </html>
  )
}

关键配置项说明:

  • projectId: 项目唯一标识,从环境变量获取
  • serviceName: 服务名称,用于区分不同服务
  • tracingOrigins: 启用请求追踪
  • networkRecording: 记录网络请求

高级配置选项

  1. 排除特定域名:通过excludedHostnames排除不需要监控的域名
<HighlightInit
  excludedHostnames={['localhost', 'staging']}
  // 其他配置...
/>
  1. 记录请求头和正文:更详细的网络请求记录
networkRecording={{ 
  enabled: true, 
  recordHeadersAndBody: true 
}}

错误边界处理

为捕获未处理的客户端错误,创建自定义错误边界组件:

// app/components/error-boundary.tsx
import { ReportDialog } from '@highlight-run/remix/report-dialog'

export function ErrorBoundary() {
  const error = useRouteError()
  
  if (error instanceof Error) {
    return (
      <div>
        <h1>应用出错</h1>
        <p>{error.message}</p>
        <pre>{error.stack}</pre>
        <ReportDialog /> {/* Highlight错误报告对话框 */}
      </div>
    )
  }
  // 其他错误类型处理...
}

然后在根组件中导出:

// app/root.tsx
export { ErrorBoundary } from '~/components/error-boundary'

服务端监控配置

基础错误处理

在服务端入口文件中初始化Highlight并配置错误处理:

// app/entry.server.tsx
import { H, HandleError } from '@highlight-run/remix/server'

const nodeOptions = { 
  projectID: process.env.HIGHLIGHT_PROJECT_ID 
}

H.init(nodeOptions)

export const handleError = HandleError(nodeOptions)

自定义错误处理

如果需要自定义错误处理逻辑,可以扩展默认处理:

export function handleError(
  error: unknown,
  dataFunctionArgs: LoaderFunctionArgs | ActionFunctionArgs,
) {
  const handleError = HandleError(nodeOptions)
  handleError(error, dataFunctionArgs)
  
  // 自定义错误处理逻辑
  console.error('自定义错误日志:', error)
  // 可以添加邮件通知、Slack通知等
}

流式响应错误处理

对于流式HTML响应,使用renderToPipeableStreamonError回调:

function handleBrowserRequest(request, responseStatusCode, responseHeaders, remixContext) {
  return new Promise((resolve, reject) => {
    const { pipe, abort } = renderToPipeableStream(
      <RemixServer context={remixContext} url={request.url} />,
      {
        onShellReady() {
          // ...正常处理
        },
        onError(error) {
          logError(error, request)
        }
      }
    )
  })
}

function logError(error, request) {
  const parsed = request 
    ? H.parseHeaders(Object.fromEntries(request.headers))
    : undefined

  if (error instanceof Error) {
    H.consumeError(error, parsed?.secureSessionId, parsed?.requestId)
  } else {
    H.consumeError(
      new Error(`未知错误: ${JSON.stringify(error)}`),
      parsed?.secureSessionId,
      parsed?.requestId
    )
  }
}

最佳实践

  1. 环境区分:在不同环境(开发、测试、生产)使用不同的projectId
  2. 敏感信息过滤:避免记录敏感请求头或正文
  3. 性能考量:在生产环境适当调整采样率
  4. 错误分类:结合自定义属性对错误进行分类

总结

通过Highlight与Remix的集成,开发者可以获得:

  • 完整的用户会话回放能力
  • 客户端错误监控
  • 服务端错误追踪
  • 前后端关联的完整请求链路

这种全栈监控方案大大提高了问题诊断效率,是现代化Web应用开发的重要工具。按照本文指南配置后,你的Remix应用将具备强大的监控能力,帮助团队快速发现和解决问题。

highlight highlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging and more. highlight 项目地址: https://gitcode.com/gh_mirrors/hi/highlight

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樊蒙毅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值