移动端日志采集与分析最佳实践

ops/2024/10/18 6:09:04/

前言

做为一名移动端开发者,深刻体会日志采集对工程师来说具有重要意义,遇到问题除了 debug 调试就是看日志了,通过看日志可以帮助我们了解应用程序运行状况、优化用户体验、保障数据安全依据,本文将介绍日志采集的重要性、移动端日志的采集方式,最后介绍下如何通过观测云对移动端日志进行深度洞察和分析。

一 、日志采集的重要性

1、故障排查和问题定位

移动端日志是开发者在应用程序出现问题时的重要线索。通过日志,开发者可以了解到应用程序在运行过程中发生的错误、异常、崩溃等情况,帮助他们快速定位并解决问题,提高应用程序的稳定性和可靠性。

2、能优化和资源管理

移动端日志记录了应用程序的性能数据,如启动时间、响应时间、内存占用等。通过分析这些性能日志,开发者可以发现应用程序的性能瓶颈,优化代码逻辑、资源管理和网络请求,提升应用程序的运行效率和用户体验。

3、用户行为分析和产品改进

移动端日志记录了用户在应用程序中的操作行为、浏览趋势和交互轨迹。通过分析这些用户行为日志,开发者可以了解用户的偏好和行为习惯,为优化用户体验、改进产品功能提供重要参考。

4、版本迭代和功能优化

移动端日志不仅可以记录用户行为和性能数据,还可以包括用户反馈、应用程序崩溃、特定功能的使用情况等信息。通过分析这些日志信息,开发者可以了解用户对应用程序的需求和不满意之处,及时调整产品策略,优化应用程序的功能设计和用户界面。

5、安全监控和数据保护

移动端日志记录了应用程序的安全事件、网络请求和用户身份验证等信息。通过实时监控移动端日志,开发者可以及时发现和应对安全漏洞、恶意攻击和数据泄露等风险,保护用户数据的安全和隐私。

二 、移动端日志的采集方式

选择合适的日志采集方案,并确保日志的有效记录、安全存储和合规使用。

1、使用内置日志系统

移动操作系统通常提供了内置的日志系统,如 Android 中的 Logcat 和 iOS 中的 NSLog 。开发者可以通过这些内置的日志系统记录应用程序的运行日志。例如,在 Android 中,可以使用 Log 类的静态方法来输出日志信息,而在 iOS 中,可以使用 NSLog 函数。这个是最常见的,但是需要 debug 调试。

2、第三方日志框架

开发者可以使用第三方的日志框架来记录移动端日志,这些框架通常提供了更丰富的功能和更灵活的配置选项,如日志级别控制、日志格式化、日志存储等。常见的移动端日志框架包括 CocoaLumberjack、Log4j、Logback 等。

3、自定义日志系统

在一些特定的情况下,开发者可能需要根据自己的需求自定义日志系统。这种情况下,开发者可以编写自己的日志记录模块,实现日志的采集、存储和管理等功能。

4、使用日志收集工具

一些日志收集工具可以帮助开发者在移动应用程序中集中管理和分析日志信息,如观测云、Bugsnag、Sentry、Firebase Crashlytics 等。这些工具通常提供了 SDK 或者 API ,开发者可以集成到自己的应用程序中,以便实现日志的自动采集和上传。

三、通过观测云对移动端日志进行深度洞察和分析

前提条件,已经有观测云控制台账号,可以登录观测云控制台。

1、在观测云控制台创建应用(本文章示例为 iOS)

2、集成(CocoaPods 方式)

  • 配置 Podfile 文件
target 'yourProjectName' do# Pods for your projectpod 'FTMobileSDK', '1.4.11'end
  • 在 Podfile 目录下执行以下命令安装 SDK
pod install
  • 添加头文件
import "FTMobileAgent.h"
  • SDK 初始化
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{// SDK FTMobileConfig 设置FTMobileConfig *config = [[FTMobileConfig alloc]initWithMetricsUrl:@"Your App metricsUrl"];config.enableSDKDebugLog = YES;config.env = FTEnvProd;config.service @"df_rum_ios";// 启动 SDK[FTMobileAgent startWithConfigOptions:config];return YES;shifan

示范例子

  • 开启日志配置
//开启 loggerFTLoggerConfig *loggerConfig = [[FTLoggerConfig alloc]init];loggerConfig.enableCustomLog = YES;loggerConfig.enableLinkRumData = YES;//开启日志loggerConfig.logLevelFilter = @[@(FTStatusError),@(FTStatusCritical)];loggerConfig.discardType = FTDiscardOldest;[[FTMobileAgent sharedInstance] startLoggerWithConfigOptions:loggerConfig];

3、日志采集

移动端的日志采集有两种,第一种是开发者根据自己的实际情况,主动上传到平台,用以数据分析,第二种是崩溃日志,被动上传,观测云自动采集,本文逐一介绍。

1)自定义上传日志

通过观测云提供的方法,可以自定义上传日志内容,同时可以配置日志等级,日志内容可以为多种模式(json、字符串)等。

typedef NS_ENUM(NSInteger, FTStatus) {FTStatusInfo         = 0,FTStatusWarning,FTStatusError,FTStatusCritical,FTStatusOk,
};
/*** 日志上报* @param content  日志内容,可为json字符串* @param status   事件等级和状态,info:提示,warning:警告,error:错误,critical:严重,ok:恢复,默认:info*/
-(void)logging:(NSString *)content status:(FTStatus)status;
  • 代码展示

上传日志等级为:FTStatusInfo

上传日志内容为以下内容:

2024-04-11 11:10:17.921 [http-nio-9201-exec-9] Info  c.r.s.c.SysRoleController - [list,48] - ry-system-dd 2350624413051873476 1032190468283316 - 查询角色列表开始
[[FTMobileAgent sharedInstance] logging:@"2024-04-11 11:10:17.921 [http-nio-9201-exec-9] Info  c.r.s.c.SysRoleController - [list,48] - ry-system-dd 2350624413051873476 1032190468283316 - 查询角色列表开始" status:FTStatusInfo];
  • 日志切割

移动端打上来的日志数据不能看的,因为都是 value 类的,所有在观测云中可以进行提取,如 grok 语句如下:

grok(_, "%{TIMESTAMP_ISO8601:time} %{NOTSPACE:thread_name} %{NOTSPACE:status}%{SPACE}%{NOTSPACE:class_name} - \\[%{NOTSPACE:method_name},%{NUMBER:line}\\] - %{DATA:service} %{DATA:trace_id} %{DATA:span_id} - %{GREEDYDATA:msg}")
default_time(time, "Asia/Shanghai")

切割后,结果如下,切成 key-value 标准化字段,便于精准分析。

2)采集崩溃日志

  • 采集步骤

为了搜集 crash 日志,我这里估计做了一个数组越界的崩溃,在代码 64 行。

  • 效果展示

在观测云控制台「RUM 查看器」 > 「Error」,看到了这个错误,如下图。

总结

总的来说,移动端日志对于应用程序的开发、测试、部署和运营都具有重要意义,是开发者和运营团队了解应用程序运行状况、优化用户体验、保障数据安全的重要工具和依据。不论采用哪种方法,开发者都应该根据应用程序的需求和特点,选择合适的日志采集方案,并确保日志的有效记录、安全存储和合规使用。


http://www.ppmy.cn/ops/20345.html

相关文章

【AI】探索 Prompt:如何与 ChatGPT 对话

工作中 忙的太久 不觉间 已三十个年头 挑剔着 轮换着 你再三选择 那么寒冬后 炎夏前 谁会给你春一样的爱恋 日落后 最美的 时光已溜走 日落后 最美的 已溜走 🎵 赵雷《三十岁的女人》 在人工智能和用户交互领域,“prompt” 是一个至关重要的概念。它不仅…

SpringCloud(微服务介绍,远程调用RestTemplate,注册中心Nacos,负载均衡Ribbon,环境隔离,进程和线程的区别)【详解】

目录 一、微服务介绍 1. 系统架构的演变 1 单体架构 2 分布式服务 3 微服务 2. SpringCloud介绍 SpringCloud简介 SpringCloud版本 3. 小结 二、远程调用RestTemplate【理解】 1. 服务拆分 1 服务拆分原则 2 服务拆分示例 1) 创建父工程 2) 准备用户服务 1. 用户…

axios使用

axios 1、文档 axios中文文档地址 2、定义、特性、使用 2.1 什么是axios Axios 是一个基于promise的 HTTP库 ,可以用在浏览器和node中 2.2 特性 (重点) 从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截请…

常见的SSH功能

SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中为网络服务提供安全的传输环境。SSH最初是由芬兰的一家公司开发的,现在已经成为互联网上最常用的远程登录工具之一。SSH提供了许多强大的功能,让我们能…

NLP(9)--rnn实现中文分词

前言 仅记录学习过程,有问题欢迎讨论 利用rnn实现分词效果(感觉十分依赖词数据) 使用jieba分词好的数据做样本 pip install jieba 代码 import jieba import numpy as np import torch import torch.nn as nn from torch.utils.data import DataLoader"&quo…

websocket集成文档

1.添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>2.添加配置 Configuration public class WebSocketConfig {Beanpublic ServerEndpointExpo…

Django——Auth模块以及admin站点

Django——Auth模块 一、Auth 模块 Auth 用户认证&#xff0c;本质上也是设置 Session。 Django 认证系统同时处理认证和授权认证&#xff1a;验证一个用户是否为 django 声明的用户&#xff0c;如果是可以进行登录授权&#xff1a;决定一个已经验证的用户有哪些功能是允许操…

探索开源的容器引擎--------------Docker容器操作

目录 一、Docker 容器操作 1.1容器创建 1.2查看容器的运行状态 1.3启动容器 1.4创建并启动容器 1.4.1当利用 docker run 来创建容器时&#xff0c; Docker 在后台的标准运行过程是&#xff1a; 1.4.2在后台持续运行 docker run 创建的容器 1.4.3创建容器并持续运行容器…