Vue 集成

编辑

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

支持的版本

编辑

此集成支持 Vue.js 3.0 及更高版本。

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

安装 Elastic APM Vue 包

编辑

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

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

使用 APM 插件

编辑
app.use(ApmVuePlugin, options)

选项

编辑
  • config(必需) - RUM 代理配置选项
  • router(可选) - Vue Router 的实例。如果提供,将开始捕获页面加载和 SPA 导航事件作为事务,并使用路由的路径作为其名称。
  • captureErrors(可选) - 如果启用,将安装全局 Vue 错误处理程序以捕获组件内的渲染错误。默认为 true。插件会捕获组件名称、生命周期钩子和文件名(如果可用)作为错误上下文的一部分。

检测您的 Vue 应用程序

编辑

该包公开了 ApmVuePlugin,它是一个 Vue 插件,可以使用 Vue.use 方法安装到您的应用程序中。

import { createApp, defineComponent, h } from 'vue'
import { createRouter, createWebHashHistory } from 'vue-router'
import { ApmVuePlugin } from '@elastic/apm-rum-vue'
import App from './App.vue'

const Home = defineComponent({
  render: () => h("div", {}, "home")
})

const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    { path: '/', component: Home }
  ]
})

createApp(App)
  .use(router)
  .use(ApmVuePlugin, {
    router,
    config: {
      serviceName: 'app-name',
      // agent configuration
    }
  })
  // app specific code
  .mount('#app')

在组件内部访问代理实例

编辑

代理实例可以使用 this.$apm 在所有组件内部访问。

<template>
  <div>Component timings as span</div>
</template>

<script>
export default {
  data() {
    return {
      span: null
    }
  },
  created() {
    this.span = this.$apm.startSpan('create-mount-duration', 'custom')
  },
  mounted() {
    this.span && this.span.end()
  }
}
</script>

ApmVuePlugin 期望 router 选项为 VueRouter 的实例,因为它使用了导航守卫功能。

初始化插件后,页面加载和 SPA 导航事件都将被捕获为事务,路由的 path 作为其名称,page-loadroute-change 作为类型。