Flutter性能监控插件datadog_flutter_plugin的使用
Flutter性能监控插件datadog_flutter_plugin的使用
Overview
Datadog Real User Monitoring (RUM)使您能够可视化和分析Flutter应用程序中单个用户的实时性能和用户旅程。根据不同的版本,Datadog RUM SDK对Flutter的支持情况如下:
- Datadog RUM SDK versions < 1.4 支持监测Flutter 2.8+
- Datadog RUM SDK versions >= 1.4 支持监测Flutter 3.0+
- Datadog RUM SDK versions >= 2.6 支持监测Flutter 3.19+
完整的文档请参阅官方Datadog文档。
Current Datadog SDK Versions
平台 | SDK 版本 |
---|---|
iOS | 2.20.0 |
Android | 2.16.0 |
Browser | 5.x.x |
注意事项
- iOS: Podfile必须包含
use_frameworks!
(在Flutter中默认启用),并且目标iOS版本>=12.0。 - Android:
minSdkVersion
必须>=21,如果使用Kotlin,其版本应>=1.8.0。 - Web: 需要在
index.html
的head
标签下添加以下代码来加载CDN提供的Datadog Browser SDKs for Logs和RUM。
<script type="text/javascript" src="https://www.datadoghq-browser-agent.com/us1/v5/datadog-logs.js"></script>
<script type="text/javascript" src="https://www.datadoghq-browser-agent.com/us1/v5/datadog-rum-slim.js"></script>
Setup
为了设置Log Management或Real User Monitoring (RUM),可以使用Datadog Flutter Plugin。以下是配置和初始化的详细步骤。
Create Configuration Object
创建一个配置对象用于每个Datadog特性(如Logs和RUM)。可以通过下面的代码片段创建:
final trackingConsent = ... // 确定用户的跟踪同意状态
final configuration = DatadogConfiguration(
clientToken: '<CLIENT_TOKEN>',
env: '<ENV_NAME>',
site: DatadogSite.us1,
nativeCrashReportEnabled: true,
loggingConfiguration: DatadogLoggingConfiguration(),
rumConfiguration: DatadogRumConfiguration(
applicationId: '<RUM_APPLICATION_ID>',
)
);
更多配置选项请参阅DatadogConfiguration对象文档。
Initialize the Library
可以在main.dart
文件中以两种方式之一初始化RUM:
使用DatadogSdk.runApp
这种方式会自动设置错误报告。
await DatadogSdk.runApp(configuration, () async {
runApp(const MyApp());
});
手动设置错误跟踪和资源跟踪
如果不使用DatadogSdk.runApp
,需要先调用WidgetsFlutterBinding.ensureInitialized
,然后手动设置错误处理逻辑。
WidgetsFlutterBinding.ensureInitialized();
final originalOnError = FlutterError.onError;
FlutterError.onError = (details) {
FlutterError.presentError(details);
DatadogSdk.instance.rum?.handleFlutterError(details);
originalOnError?.call(details);
};
final platformOriginalOnError = PlatformDispatcher.instance.onError;
PlatformDispatcher.instance.onError = (e, st) {
DatadogSdk.instance.rum?.addErrorInfo(
e.toString(),
RumErrorSource.source,
stackTrace: st,
);
return platformOriginalOnError?.call(e, st) ?? false;
};
await DatadogSdk.instance.initialize(configuration);
runApp(const MyApp());
Send Logs
初始化Datadog并配置了DatadogLoggingConfiguration
后,可以通过DatadogLogger
发送日志到Datadog。
final logger = DatadogSdk.instance.logs?.createLogger(
DatadogLoggerConfiguration(
remoteLogThreshold: LogLevel.warning,
),
);
logger?.debug("A debug message.");
logger?.info("Some relevant information?");
logger?.warn("An important warning…");
logger?.error("An error was met!");
也可以自定义日志器的服务名和名称。
final secondLogger = DatadogSdk.instance.createLogger(
LoggingConfiguration({
service: 'my_app.additional_logger',
name: 'Additional logger'
})
);
secondLogger.info('Info from my additional logger.');
Track RUM Views
可以使用DatadogNavigationObserver
自动跟踪命名路由。
MaterialApp(
home: HomeScreen(),
navigatorObservers: [
DatadogNavigationObserver(DatadogSdk.instance),
],
);
或者使用DatadogRouteAwareMixin
和DatadogNavigationObserverProvider
属性来自动开始和停止RUM视图。
class _MyHomeScreenState extends State<MyHomeScreen>
with RouteAware, DatadogRouteAwareMixin {
@override
RumViewInfo get rumViewInfo => RumViewInfo(name: 'MyHomeScreen');
}
对于重命名视图或提供自定义路径,可以通过viewInfoExtractor
回调函数实现。
RumViewInfo? infoExtractor(Route<dynamic> route) {
var name = route.settings.name;
if (name == 'my_named_route') {
return RumViewInfo(
name: 'MyDifferentName',
attributes: {'extra_attribute': 'attribute_value'},
);
}
return defaultViewInfoExtractor(route);
}
var observer = DatadogNavigationObserver(
datadogSdk: DatadogSdk.instance,
viewInfoExtractor: infoExtractor,
);
Automatic Resource Tracking
通过Datadog Tracking HTTP Client
包可以自动跟踪资源和HTTP请求。只需在pubspec.yaml
中添加该包,并在初始化时进行配置。
final configuration = DatadogConfiguration(
// 配置信息
firstPartyHosts: ['example.com'],
)..enableHttpTracking()
为了启用Datadog分布式追踪,需要在DatadogConfiguration.firstPartyHosts
属性中设置支持分布式追踪的域名。还可以通过设置DatadogRumConfiguration
中的traceSampleRate
来修改采样率。
示例代码
以下是一个完整的示例代码,展示了如何在Flutter应用中集成Datadog RUM SDK。
import 'package:datadog_flutter_plugin/datadog_flutter_plugin.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'example_app.dart';
void main() async {
await dotenv.load();
var applicationId = dotenv.maybeGet('DD_APPLICATION_ID');
final configuration = DatadogConfiguration(
clientToken: dotenv.get('DD_CLIENT_TOKEN', fallback: ''),
env: dotenv.get('DD_ENV', fallback: ''),
service: 'com.datadoghq.example.flutter',
version: '1.2.3',
site: DatadogSite.us1,
nativeCrashReportEnabled: true,
loggingConfiguration: DatadogLoggingConfiguration(),
rumConfiguration: applicationId != null
? DatadogRumConfiguration(
sessionSamplingRate: 100.0,
applicationId: applicationId,
detectLongTasks: true,
reportFlutterPerformance: true,
actionEventMapper: (event) {
if (event.action.target?.name == 'Test Action') {
event.action.target?.name = 'Replaced';
}
return event;
},
)
: null,
);
final ddsdk = DatadogSdk.instance;
ddsdk.sdkVerbosity = CoreLoggerLevel.debug;
DatadogSdk.runApp(configuration, TrackingConsent.granted, () async {
return runApp(const ExampleApp());
});
}
这个示例代码展示了如何加载环境变量、配置Datadog RUM SDK以及启动应用程序。希望这些内容能帮助你更好地理解和使用Datadog Flutter Plugin。
更多关于Flutter性能监控插件datadog_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter性能监控插件datadog_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 datadog_flutter_plugin
进行 Flutter 性能监控的示例代码。这个插件允许你收集应用性能数据并将其发送到 Datadog 平台进行分析。
首先,你需要在你的 Flutter 项目中添加 datadog_flutter_plugin
依赖。在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
datadog_flutter_plugin: ^x.y.z # 请替换为最新版本号
然后运行 flutter pub get
来获取依赖。
接下来,你需要在 Android 和 iOS 项目中进行一些配置。
Android 配置
- 在
android/app/src/main/AndroidManifest.xml
文件中添加必要的权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 其他配置 -->
</manifest>
- 在
android/app/build.gradle
文件中添加以下内容来配置 Datadog:
android {
// 其他配置
defaultConfig {
// 其他配置
buildConfigField "String", "DD_CLIENT_TOKEN", "\"your_client_token_here\"" // 请替换为你的 Datadog 客户端令牌
}
}
dependencies {
// 其他依赖
implementation 'com.datadoghq:dd-sdk-android:x.y.z' // 请替换为最新版本号
}
iOS 配置
- 在
ios/Runner/Info.plist
文件中添加必要的权限(如果需要):
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
- 在
ios/Podfile
文件中添加以下内容:
platform :ios, '10.0'
target 'Runner' do
use_frameworks!
config = use_native_modules!
# Flutter Pod
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
# Datadog Pod
pod 'DatadogSDK', '~> x.y.z' # 请替换为最新版本号
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
'DD_CLIENT_TOKEN=@"your_client_token_here"' # 请替换为你的 Datadog 客户端令牌
]
end
end
end
Flutter 代码配置
在你的 Flutter 项目中,初始化并使用 datadog_flutter_plugin
:
import 'package:flutter/material.dart';
import 'package:datadog_flutter_plugin/datadog_flutter_plugin.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Datadog 插件
DatadogFlutterPlugin.initialize(
clientToken: "your_client_token_here", // 请替换为你的 Datadog 客户端令牌
environment: "prod", // 或者 "staging", "dev" 等
service: "your_service_name", // 你的服务名称
version: "1.0.0", // 你的应用版本号
);
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++;
// 记录自定义事件
DatadogFlutterPlugin.trackEvent(
eventName: "button_pressed",
attributes: {
"counter_value": _counter.toString(),
},
);
});
}
@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),
),
);
}
}
这个示例展示了如何初始化 datadog_flutter_plugin
并记录一个自定义事件。你可以根据需要扩展和配置插件,以收集更多的性能和应用数据。
请确保将 your_client_token_here
替换为你从 Datadog 获取的实际客户端令牌,并根据你的应用需求调整其他配置。