Angular 集成编辑

本文档介绍了如何在 Angular 应用程序中使用实时用户监控 JavaScript 代理。

支持的版本编辑

此集成支持 Angular 版本 ≥ 12.0

安装 Elastic APM Angular 包编辑

@elastic/apm-rum-angular 包作为依赖项安装到您的应用程序中

npm install @elastic/apm-rum-angular --save

如果您使用的是 Angular 版本 < 12.0,请使用 @elastic/apm-rum-angular 2.x 来检测您的应用程序。

如果您使用的是 Angular 版本 < 9.0,请使用 @elastic/apm-rum-angular 1.x 来检测您的应用程序。详细信息可在 先前版本 中找到。

检测您的 Angular 应用程序编辑

Angular 集成包公开 ApmModuleApmService,它们使用 Angular 的依赖注入模式,并在服务初始化后开始订阅 Angular 路由器事件

ApmService 必须从应用程序模块或应用程序组件初始化,因为 RUM 代理必须尽快开始捕获所有资源和 API 调用。

import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { Routes, RouterModule } from '@angular/router'
import { ApmModule, ApmService } from '@elastic/apm-rum-angular'

const routes: Routes = [
  { path: 'contact', component: ContactListComponent },
  { path: 'contact/:id', component: ContactDetailComponent }
]

@NgModule({
  imports: [ApmModule, BrowserModule, RouterModule.forRoot(routes)],
  declarations: [AppComponent, ContactListComponent, ContactDetailComponent],
  providers: [ApmService],
  bootstrap: [AppComponent]
})
export class AppModule {
  constructor(service: ApmService) {
    // Agent API is exposed through this apm instance
    const apm = service.init({
      serviceName: 'angular-app',
      serverUrl: 'https://127.0.0.1:8200'
    })

    apm.setUserContext({
      'username': 'foo',
      'id': 'bar'
    })
  }
}

服务初始化后,页面加载和单页应用程序导航事件将被捕获为事务,其名称为路由的 path,类型为 page-loadroute-change

捕获 Angular 应用程序中的错误编辑

默认情况下,当 Angular 应用程序内部抛出错误时,默认错误处理程序会将错误消息打印到控制台,而不会将它们重新抛出为浏览器事件。

ApmErrorHandler 提供了集中式错误处理,它捕获并报告错误以显示在 APM UI 中,并将它们记录到浏览器控制台。

import { ErrorHandler } from '@angular/core'
import { ApmErrorHandler } from '@elastic/apm-rum-angular'

@NgModule({
  providers: [
    {
      provide: ErrorHandler,
      useClass: ApmErrorHandler
    }
  ]
})
class AppModule {}