搜索插件、代码仓与 APP 分类

azure_application_insights 封面
插件详情v5.0.1

azure_application_insights

用于与 Azure Application Insights 服务集成的 Dart 客户端

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
3.5万
喜欢数
49
Pub 分数
160

安装插件

flutter pub add azure_application_insights

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个 Dart 客户端,可实现与 Azure Application Insights 的集成,使开发者能够从跨多个平台的 Flutter 应用程序中收集遥测数据,例如日志、异常和性能指标。它支持在 Android、iOS、Web、macOS、Windows 和 Linux 上运行的应用程序的实时监控和诊断。该包简化了将应用洞察发送到 Azure 的过程,有助于调试、性能优化和用户行为分析。它专为在 Flutter 项目中无缝使用而设计,配置需求极少。

适合场景

  • 监控生产环境中的应用性能
  • 跟踪用户交互和会话数据
  • 捕获异常和错误以进行调试
  • 分析崩溃报告和失败率
  • 移动和Web应用的实时可观测性

主要特点

  • 跨平台遥测收集
  • 对日志、事件和异常的支持
  • 与 Azure Application Insights 仪表板集成
  • 最简设置和配置
  • 自动跟踪应用生命周期事件

适合对象

  • 使用 Azure 进行分析的 Flutter 开发人员
  • 需要跨平台监控的团队
  • 需要详细错误跟踪的应用程序
  • 专注于性能优化的项目
  • 实施可观测性实践的开发人员

使用建议

  • 需要一个 Azure Application Insights 资源
  • 数据隐私和合规性考虑
  • 对应用大小和性能的潜在影响
  • 依赖网络连接进行遥测传输
  • 与原生 SDK 相比,自定义功能有限

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Azure Application Insights

pub package

All Contributors

What?

This is a Dart library that integrates with Azure's Application Insights service. It allows you to push telemetry items into your Application Insights instance.

Why?

Application Insights is a powerful tool for understanding how your software system is operating. In the context of Flutter applications, it allows you to deeply understand user interactions, performance, and faults in your application.

Where?

Firstly, install the azure_application_insights package, then you can import it into your Dart code as follows:

import 'package:azure_application_insights/azure_application_insights.dart';

How?

The only piece of information you need to integrate with Application Insights is your connection string, which you can find inside the Azure portal. Open your Application Insights resource and look in the Overview tab.

Once you have your connection string, you can construct a TelemetryClient as follows:

final processor = BufferedProcessor(
  next: TransmissionProcessor(
    connectionString: connectionString,
    httpClient: client,
    timeout: const Duration(seconds: 10),
  ),
);

final telemetryClient = TelemetryClient(
  processor: processor,
);

This is a typical setup where telemetry items are buffered before being transmitted. Depending on your processing needs, you may have a need for more than one TelemetryClient in your application. For example, you might have one TelemetryClient that buffers telemetry items and is used for all telemetry other than errors, and a second that does not buffer and is used only to submit errors as promptly as possible. Please review the example code and API docs for alternative configurations.

Once you have a TelemetryClient, you can simply invoke the various methods to capture telemetry items:

telemetryClient.trackTrace(
  severity: Severity.information,
  message: 'Hello from Dart!',
);

You may also want to configure additional properties to be submitted with telemetry items. These can be configured in two places:

  1. On the TelemetryContext associated with your TelemetryClient. Properties in this context object will be attached to every telemetry item submitted. Moreover, you can share a TelemetryContext between multiple TelemetryClient instances if desired.
  2. Every method on TelemetryClient allows you to specify additionalProperties that will be captured only for that telemetry item. As the name suggests, these properties are in addition to those within the context.

Here are examples of both:

final telemetryClient = ...;

// 1. Properties associated with the TelemetryClient will be attached to
// all telemetry items submitted via that client.
telemetryClient.context
    // These built-in helpers simply set the pre-defined properties
    // Application Insights provides.
    ..applicationVersion = 'my version'
    ..device.type = 'Android';
    // But you can also set whatever property name you like.
    ..properties['environmentName'] = 'dev';

// 2. Additional properties can be bundled with individual telemetry items.
telemetryClient.traceTrace(
    severity: Severity.information,
    message: 'An example',
    additionalProperties: <String, Object>{
        'answer': 42,
    },
);

Of course, you can leverage whatever data sources and third party libraries make sense in order to populate properties. Typically you would use a package like device_info_plus to obtain information on the device and fill in the appropriate properties on the context.

Flutter Integration

To submit crashes in Flutter applications as telemetry, follow the following recipe:

void main() {
    // You probably don't want to always run with crash reporting because it interferes with the normal
    // debug/development experience. Here we use kReleaseMode to only enable crash reporting for release builds, but
    // you can use whatever criteria and mechanism you like.
    if (kReleaseMode) {
        runWithCrashReporting(codeToExecute: run);
    } else {
        run();
    }
}

void run() => runApp(MyApp());

Future<void> runWithCrashReporting({
  required VoidCallback codeToExecute,
}) async {
  // Hook into Flutter error handling.
  FlutterError.onError = (details) => submitErrorAsTelemetry(
        isFatal: true,
        error: details.exception,
        trace: details.stack,
      );

  // Run the code to execute in a zone and handle all errors within.
  runZonedGuarded(
    codeToExecute,
    (error, trace) => submitErrorAsTelemetry(
      isFatal: true,
      error: error,
      trace: trace,
    ),
  );
}

Future<void> submitErrorAsTelemetry({
  required bool isFatal,
  required Object error,
  required StackTrace trace,
}) async {
  debugPrint('reporting ${isFatal ? 'fatal' : 'non-fatal'} error: $error');
  debugPrint('$trace');

  try {
    // Get your TelemetryClient instance here, perhaps by DI or some other mechanism.
    final telemetryClient = ...;

    // Get any additional properties for the crash report here, such as device information.
    final errorProperties = ...;

    // Write an error telemetry item.
    telemetryClient.trackError(
      error: error,
      stackTrace: trace,
      severity: isFatal ? Severity.critical : Severity.error,
      additionalProperties: errorProperties,
    );

    if (isFatal) {
      await telemetryClient.flush();
    }
  } on Object catch (e, t) {
    // We print synchronously here to ensure the output is written in the case we force exit.
    debugPrintSynchronously('Sending error telemetry failed: $e\r\n$t');
    debugPrintSynchronously('Original error: $error');
  } finally {
    if (isFatal && kReleaseMode) {
      debugPrintSynchronously('Forcing exit');
    }
  }
}
HTTP Middleware

Whilst you can certainly use TelemetryClient.trackDependency to track HTTP requests yourself, you can save time by using the TelemetryHttpClient HTTP client. This class will automatically time requests and forward on the details of completed requests to a given TelemetryClient as dependency telemetry items.

Typical usage looks like this:

final telemetryHttpClient = TelemetryHttpClient(
  telemetryClient: telemetryClient,
  inner: Client(),
);

// This request will be captured as a dependency telemetry item.
await telemetryHttpClient.get('https://kent-boogaart.com/');

The TelemetryHttpClient could be one piece in a long chain of HTTP middleware - it is composable.

Who?

Thanks goes to these wonderful people (emoji key):

Kent Boogaart
Kent Boogaart

💻 ⚠️ 📖 💡
Daniel Luz
Daniel Luz

💻
Robert Sandberg
Robert Sandberg

💻
Robson Silva
Robson Silva

💻
Michael Gugler
Michael Gugler

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

所属分类

依赖

依赖清单 5 项

源码仓库

使用此插件的项目

暂无相关数据。