Flutter性能监控插件newrelic_mobile的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter性能监控插件newrelic_mobile的使用

New Relic Flutter Agent允许你在Flutter应用中通过原生的New Relic Android和iOS代理来收集崩溃、网络流量和其他信息。

特性

  • 捕获Dart错误
  • 网络请求跟踪
  • 分布式追踪
  • Future错误跟踪
  • 捕获交互及其创建顺序
  • 传递用户信息到New Relic以跟踪用户会话
  • 通过NavigationObserver进行屏幕跟踪
  • 捕获print和debug print语句作为日志
  • 捕获离线事件和异常
  • 捕获后台报告事件

当前支持

  • Android API 24+
  • iOS 10
  • 依赖于New Relic iOS/XCFramework和Android代理

安装

在你的pubspec.yaml文件中添加newrelic_mobile插件:

dependencies:
  newrelic_mobile: ^1.1.4

Flutter设置

初始化NewRelic

main.dart中初始化NewRelic:

import 'package:newrelic_mobile/newrelic_mobile.dart';
import 'dart:io';

var appToken = "";

if (Platform.isAndroid) {
  appToken = "<android app token>";
} else if (Platform.isIOS) {
  appToken = "<ios app token>";
}

Config config = Config(
    accessToken: appToken,
    analyticsEventEnabled: true,
    networkErrorRequestEnabled: true,
    networkRequestEnabled: true,
    crashReportingEnabled: true,
    interactionTracingEnabled: true,
    httpResponseBodyCaptureEnabled: true,
    loggingEnabled: true,
    webViewInstrumentation: true,
    printStatementAsEventsEnabled: true,
    httpInstrumentationEnabled: true,
    distributedTracingEnabled: true,
    logLevel: LogLevel.DEBUG);

NewrelicMobile.instance.start(config, () {
  runApp(MyApp());
});

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorObservers: [NewRelicNavigationObserver()],
      home: HomePage(),
    );
  }
}

屏幕跟踪

为了跟踪导航事件,需要将NewRelicNavigationObserver添加到你的MaterialApp中:

MaterialApp(
  navigatorObservers: [
    NewRelicNavigationObserver(),
  ],
  // 其他参数
)

示例Demo

以下是一个完整的示例代码,展示了如何在Flutter应用中使用New Relic插件进行各种操作:

import 'package:flutter/material.dart';
import 'package:newrelic_mobile/newrelic_mobile.dart';
import 'dart:io';

void main() {
  var appToken = "";

  if (Platform.isAndroid) {
    appToken = "<android app token>";
  } else if (Platform.isIOS) {
    appToken = "<ios app token>";
  }

  Config config = Config(
      accessToken: appToken,
      analyticsEventEnabled: true,
      networkErrorRequestEnabled: true,
      networkRequestEnabled: true,
      crashReportingEnabled: true,
      interactionTracingEnabled: true,
      httpResponseBodyCaptureEnabled: true,
      loggingEnabled: true,
      webViewInstrumentation: true,
      printStatementAsEventsEnabled: true,
      httpInstrumentationEnabled: true,
      distributedTracingEnabled: true,
      logLevel: LogLevel.VERBOSE);

  NewrelicMobile.instance.start(config, () {
    runApp(const MyApp());
  });
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorObservers: [NewRelicNavigationObserver()],
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("New Relic Demo")),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                NewrelicMobile.instance.logInfo("This is an informational message");
              },
              child: Text('Log Info'),
            ),
            ElevatedButton(
              onPressed: () async {
                try {
                  var dio = Dio();
                  var response = await dio.get('https://reqres.in/api/users?delay=15');
                  print(response);
                  NewrelicMobile.instance.noticeHttpTransaction(
                      "https://reqres.in/api/users?delay=15",
                      "GET",
                      200,
                      1000,
                      2000,
                      100,
                      300,
                      null,
                      responseBody: "This is Test Payload");
                } catch (e) {
                  print(e);
                }
              },
              child: Text('Track HTTP Transaction'),
            ),
            ElevatedButton(
              onPressed: () async {
                var id = await NewrelicMobile.instance.startInteraction("Getting Data from Service");
                try {
                  var dio = Dio();
                  var response = await dio.get('https://reqres.in/api/users?delay=15');
                  print(response);
                  NewrelicMobile.instance.endInteraction(id);
                } catch (e) {
                  print(e);
                }
              },
              child: Text('Start Interaction'),
            ),
          ],
        ),
      ),
    );
  }
}

这个示例展示了如何记录信息日志、跟踪HTTP事务以及开始和结束交互。你可以根据自己的需求扩展这些功能。

故障排除

如果在New Relic UI中没有显示HTTP数据,请确保你没有在Flutter应用中覆盖HttpOverrides.global

对于更多详细信息和配置,请参考New Relic文档


更多关于Flutter性能监控插件newrelic_mobile的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter性能监控插件newrelic_mobile的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用New Relic Mobile性能监控插件的示例代码。请确保你已经安装了Flutter和Dart开发环境,并且已经创建了一个Flutter项目。

1. 添加依赖

首先,你需要在你的Flutter项目的pubspec.yaml文件中添加New Relic Mobile的依赖。

dependencies:
  flutter:
    sdk: flutter
  newrelic_mobile: ^版本号  # 替换为当前最新的版本号

然后运行以下命令来安装依赖:

flutter pub get

2. 配置New Relic

你需要在New Relic网站上为你的应用创建一个应用实例,并获取你的应用的配置信息(例如:应用ID、API Key等)。

3. 初始化New Relic

在你的Flutter项目的入口文件(通常是main.dart)中,初始化New Relic。

import 'package:flutter/material.dart';
import 'package:newrelic_mobile/newrelic_mobile.dart';

void main() {
  // 初始化New Relic
  NewRelicMobile.initialize(
    androidApiKey: '你的Android API Key',
    iosApiKey: '你的iOS API Key',
    applicationId: '你的Application ID',
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
    // 记录自定义事件(可选)
    NewRelicMobile.recordCustomEvent(eventName: 'counter_incremented');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

4. 运行应用

确保你已经正确配置了New Relic,并且已经替换了代码中的API Key和Application ID。然后你可以运行你的Flutter应用:

flutter run

5. 监控性能

一旦应用运行起来,并且你与New Relic服务进行了连接,你应该能够在New Relic的仪表板上看到你的应用的性能数据,包括页面加载时间、网络请求、自定义事件等。

注意事项

  • 确保你已经正确设置了New Relic账户,并且获取了必要的配置信息。
  • New Relic Mobile插件可能需要一些额外的权限配置,特别是在Android和iOS项目中,你可能需要在AndroidManifest.xmlInfo.plist中添加一些权限声明。
  • 根据你的具体需求,你可能需要配置更多的New Relic选项,比如启用或禁用某些监控功能。

希望这些代码示例和说明能帮助你在Flutter项目中成功集成New Relic Mobile性能监控插件。

回到顶部