The Airbrake plugin provides connectivity between Backstage and Airbrake (https://airbrake.io/).
-
Install the Frontend plugin:
# From your Backstage root directory yarn --cwd packages/app add @backstage-community/plugin-airbrake
-
Install the Backend plugin:
# From your Backstage root directory yarn --cwd packages/backend add @backstage-community/plugin-airbrake-backend
-
Add the
EntityAirbrakeContent
andisAirbrakeAvailable
topackages/app/src/components/catalog/EntityPage.tsx
for all the entity pages you want Airbrake to be in:import { EntityAirbrakeContent, isAirbrakeAvailable, } from '@backstage-community/plugin-airbrake'; const serviceEntityPage = ( <EntityLayoutWrapper> <EntityLayout.Route if={isAirbrakeAvailable} path="/airbrake" title="Airbrake" > <EntityAirbrakeContent /> </EntityLayout.Route> </EntityLayoutWrapper> ); const websiteEntityPage = ( <EntityLayoutWrapper> <EntityLayout.Route if={isAirbrakeAvailable} path="/airbrake" title="Airbrake" > <EntityAirbrakeContent /> </EntityLayout.Route> </EntityLayoutWrapper> ); const defaultEntityPage = ( <EntityLayoutWrapper> <EntityLayout.Route if={isAirbrakeAvailable} path="/airbrake" title="Airbrake" > <EntityAirbrakeContent /> </EntityLayout.Route> </EntityLayoutWrapper> );
-
Create
packages/backend/src/plugins/airbrake.ts
with these contents:import { Router } from 'express'; import { PluginEnvironment } from '../types'; import { createRouter, extractAirbrakeConfig, } from '@backstage-community/plugin-airbrake-backend'; export default async function createPlugin( env: PluginEnvironment, ): Promise<Router> { return createRouter({ logger: env.logger, airbrakeConfig: extractAirbrakeConfig(env.config), }); }
-
Setup the Backend code in
packages/backend/src/index.ts
:import airbrake from './plugins/airbrake'; async function main() { //... After const createEnv = makeCreateEnv(config) ... const airbrakeEnv = useHotMemoize(module, () => createEnv('airbrake')); //... After const apiRouter = Router() ... apiRouter.use('/airbrake', await airbrake(airbrakeEnv)); }
-
Add this config as a top level section in your
app-config.yaml
:airbrake: apiKey: ${AIRBRAKE_API_KEY}
-
Set an environment variable
AIRBRAKE_API_KEY
with your API key before starting Backstage backend. -
Add the following annotation to the
catalog-info.yaml
for a repo you want to link to an Airbrake project:metadata: annotations: airbrake.io/project-id: '123456'
The Airbrake backend plugin has support for the new backend system, here's how you can set that up:
In your packages/backend/src/index.ts
make the following changes:
import { createBackend } from '@backstage/backend-defaults';
const backend = createBackend();
// ... other feature additions
+ backend.add(import('@backstage-community/plugin-airbrake-backend'));
backend.start();
Start this plugin in standalone mode by running yarn start
inside the plugin directory. This method of serving the plugin provides quicker
iteration speed and a faster startup and hot reloads. It is only meant for local development, and the setup for it can
be found inside the /dev directory.
A mock API will be used to run it in standalone. If you want to talk to the real API follow the instructions to start up Airbrake Backend in standalone.