Baselime enables observability for the next generation of cloud applications.
This library enables you to monitor real-user behaviour of your React and Next.js applications.
npm i --save @baselime/react-rumAdd the BaselimeRum Component at the root of your React application application.
Get the
publicApiKeyfrom the Baselime console. Make sure to use a public API key.
function Page({ child }) { return ( <BaselimeRum apiKey={publicApiKey}> {child} </BaselimeRum>) }The following data is automatically captured for every page view of your application:
timezonelanguageosuserAgenturldevicecountrycity
Additionally, you can enable capturing web vitals from your React applications. Use the enableWebVitals prop.
- Time To First Byte (TTFB)
- Largest Contentful Paint (LCP)
- First Input Delay (FID)
- Cumulative Layout Shift (CLS)
Load this at the top of your application to avoid resending the web vital data.
import { BaselimeRum } from '@baselime/react-rum'; function Page({ child }) { return ( <BaselimeRum apiKey={publicApiKey} enableWebVitals> {child} </BaselimeRum>) }BaselimeRum automatically captures and sends any Unhandled Errors in your application to Baselime.
import { BaselimeRum } from '@baselime/react-rum'; function Page({ child }) { return ( <BaselimeRum apiKey={publicApiKey} enableWebVitals fallback={<div>Something went wrong</div>}> {child} </BaselimeRum>) }To provide a better UX for end users, use React Error Boundaries.
The BaselimeErrorBoundary catches errors in any of its child components, reports the error to Baselime. It works in conjunction with the <BaselimeRum /> Component so that all errors are correlated by Page Load, and User Session.
import { BaselimeErrorBoundary } from '@baselime/react-rum'; function UserProfile({ child }) { return (<BaselimeErrorBoundary fallback={<div>Could not display your user profile</div>}> <UserProfileImage /> <UserName /> <UserBiography /> </BaselimeErrorBoundary> ) }This is based on the excellent react-error-boundary project.
Error Boundaries do not catch errors inside event handlers. To catch Exceptions
import { useBaselimeRum } from '@baselime/react-rum'; function MyButtonComponent() { const { captureException } = useBaselimeRum(); function handleClick(e) { try { // Do something that could throw } catch (error) { // sends errors to Baselime so they can be fixed captureException(error) } } return <button onClick={handleClick}>Click Me</button> }Capture custom events for analytics and monitoring. Like logs but with all the power of Baselime.
sendEvent(message: string, payload)
import { useBaselimeRum } from '@baselime/react-rum'; function CheckoutComponent() { const { sendEvent } = useBaselimeRum(); function handleClick() { const checkoutSession = await createImaginaryCheckoutSession() sendEvent("Checkout Started", { ...checkoutSession }) } return <button onClick={handleClick}>Checkout</button> }To set the User from another component then call
import { useBaselimeRum } from '@baselime/react-rum'; function UserCard({ child }) { const { setUser } = useBaselimeRum(); function login(user) { setUser(user.id); } return ( <Button onClick={login}>Login</Button> }Once the data is captured, you can query, search and analyse your data in the Baselime console. You can create dashboards and alerts based on the Real User Monitoring metrics.
| Parameter | Description |
|---|---|
apiKey | Your Baselime API key for authentication and authorization. |
enableWebVitals | (Optional) A boolean flag indicating whether to enable tracking of web vitals. |
enableLocal | (Optional) A boolean flag indicating whether to enable local tracking. |
dataset | (Optional) The dataset to store the data to. Defaults to web. |
service | The name of the application being monitored. Defaults to the hostname. |
fallback | A fallback UI component in case the application crashes |
© Baselime Limited, 2023
Distributed under MIT License (The MIT License).
See LICENSE for more information.