背景信息
随着数字化新时代的全面展开以及 5G 与物联网(IoT)技术的迅速普及,操作系统正面临前所未有的变革需求。在这个背景下,华为公司自主研发的鸿蒙操作系统(HarmonyOS)应运而生,旨在满足万物互联时代的多元化设备接入、高效协同和安全可靠运行的需求。
HarmonyOS 不仅着眼于智能手机市场,更是全球首个面向全场景智能生态的操作系统,支持从手机、平板电脑到智能家居、穿戴设备乃至工业控制等多种终端形态。2024 年 1 月 18 日正式推出 HarmonyOS NEXT 鸿蒙星河开发者预览,深圳市于 2024 年 3 月 3 日也发布了支持开源鸿蒙原生应用发展的 2024 年行动计划。
日志服务(SLS)介绍
日志服务(SLS,后文简称 SLS)是云原生观测与分析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务。SLS 一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能,全面提升您在研发、运维、运营、安全等场景的数字化能力。
在构建复杂而庞大的应用和智能生态系统过程中,SLS 作为开发调试、性能优化、运维监控和故障排查的重要基础设施。为确保各类应用程序能够在鸿蒙操作系统上实现无缝对接并高效利用 SLS,对 SLS SDK 进行 HarmonyOS 原生适配成为必然之举。
此举不仅可以提升鸿蒙生态下应用的稳定性和可靠性,也有助于开发者更好地遵循统一的标准和最佳实践,进一步促进鸿蒙操作系统生态的繁荣与发展。在这种情况下,基于 SLS 的移动应用日志管理和分析将成为不可或缺的工具,基于对 SLS+ 移动应用日志可以帮助开发人员快速定位和解决问题,优化应用性能。
SDK 特性介绍
HarmonyOS 下的 SLS SDK 基于共同的基座 C Core SDK 适配,底层适配鸿蒙NDK。C Core 部分使用纯 C 语言编写,对性能进行了极端优化(包括缓存管理、文件管理、PB 序列化等),能够适用于 IoT、移动端、服务端等各种场景。SDK 提供 ArkTS 语言原生调用 API。SDK 具备以下特性:
- 异步
- 客户端线程写入无阻塞
- 日志队列异步发送
- 聚合&压缩上传
- 日志聚合发送(支持按超时时间、日志数、日志大小聚合)
- 支持 lz4、zstd 压缩
- 多实例
- 支持创建多个实例分别发送到不同的目标
- 可以实例配置独立,互不影响
- 缓存
- 支持设置可允许占用的缓存内存上限
- 超过内存缓存上限时,日志写入会失败
- 自定义标识
- 支持设置自定义 Tag 和 Topic
- 断点续传
- 支持日志缓存到本地文件,只有发送成功才会删除,确保日志上传 At Least Once
- 日志上下文
- 支持查看某条日志的上下文,可以更好的定位问题
HarmonyOS SDK 通过 OpenHarmony 三方库中心托管发布,当前支持 HarmonyOS NEXT API 9.0 及以上,仅支持 stage 模式。
SDK 使用最佳实践
准备工作
在使用 HarmonyOS SDK 进行日志采集之前,您需要做一些准备工作。
- 已开通日志服务(SLS),请参见开通日志服务[1]。
- 已创建好对应的 Project 和 Logstore,请参见管理 Project[2]和管理 Logstore[3]。
- 已创建并获取 AccessKey,请参见访问密钥[4]。阿里云账号 AccessKey 拥有所有 API 的访问权限,风险很高。强烈建议您创建并使用 RAM 用户进行 API 访问或日常运维。RAM 用户需具备操作日志服务(SLS)资源的权限。具体操作,请参见为 RAM 用户授权[5]。
- [可选]搭建 HarmonyOS 开发环境。开发鸿蒙应用需要使用 HarmonyOS 的 IDE 进行开发,具体内容请参考 HarmonyOS 官网开发文档[6]。
日志采集
安装 SDK
在项目的 entry 或 library 目录下执行如下命令。
ohpm install @aliyunsls/producer --registry=https://ohpm.openharmony.cn/ohpm
以上命令执行完成后,在 entry 或 library 目录下的 oh-package.json5 文件中会自动增加以下信息。
"dependencies": {
"@aliyunsls/producer": "^0.1.0"
}
你可以通过以上信息来确定 SDK 是否安装成功。
集成 SDK
SDK 安装成功后,您可以按照实际业务需要,在指定的 ets 文件中导入 SLS 模块。
import { AliyunLog } from "@aliyunsls/producer"
您还需要完成 SDK 的初始化工作。
let aliyunLog: AliyunLog = new AliyunLog(
"https://cn-qingdao.log.aliyuncs.com", // 需要根据实际业务需要,替换为您Project所在Region
"test-project-yuanbo", // 需要根据实际业务需要,替换为您的Project
"applog", // 需要根据实际业务需要,替换为您的Logstore
"<accesskey id>",
"<accesskey secret>",
"<accesskey token>" // 仅当AccessKey是通过STS方式获取时才需要
)
参数说明:
参数名称 |