How do I track errors or send custom metrics in my UI Kit app (solution inside)

Hi, Forge developers!

Firstly, this is not an official announcement but rather a knowledge sharing blog post. Our team is now actively working on monitoring and metrics for Forge apps. However, there’s not much you can do right now if you want to track errors or send custom metrics if your app is built using UI Kit. I faced the same problem when I tried to build a simple Forge app to display if any changes have been made since I visited the page last time.

I am a big fan of Sentry. On top of this, we use Sentry in Atlassian for our products so the solution came naturally: I should just add Sentry SDK for Node.JS to my app code and things will “just work”. However, it wasn’t so smooth: Sentry code was failing because its SDK expects standard Node.JS environment whereas functions in UI Kit are executed in a special sandbox which doesn’t support all Node.JS features.

I started looking into this direction and found a solution: Sentry supports “transports” which are essentially a way to specify how the data is sent to Sentry. So I built a custom Forge transport for Sentry. It was a rocky path but this transport is now published and you can use it in your UI Kit apps!

Of course, there are some other restrictions so your Sentry setup should be a bit special. I have made the code for my app Confluence recent edits overview public so you can see how I do this in my app - check out the repo.

I will work with Sentry developers to put the documentation about using this custom transport to Sentry docs but in the meantime, feel free to use this transport for your UI Kit apps. And feel free to report any bugs in this thread.

11 Likes

Hey! I have a Custom UI based app and I’m trying to integrate Sentry, Unfortunately, it seems like there is no straightforward way to do this because of the way Forge apps are run. Is there any new information or documentation available on how to integrate Sentry for Forge apps? I took a look at your repository and it seems like the transport code was taken out in this commit due to it not working any more? It would be great if you could shed some light on this.