华为云云日志服务 HarmonyOS NEXT 采集最佳实践

科技怪谈 后端 2024-12-17


【摘要】为确保各类应用程序能够在鸿蒙操作系统上实现无缝对接并高效利用 LTS,LTS SDK 进行了 HarmonyOS 原生适配,可以提升鸿蒙生态下应用的稳定性和可靠性。

鸿蒙背景介绍

华为鸿蒙 HarmonyOS 系统是面向万物互联的全场景分布式操作系统,支持手机、平板、智能穿戴、智慧屏等多种终端设备运行,提供应用开发、设备开发的一站式服务的平台。2024 年 1 月 18 日正式推出 HarmonyOS NEXT 鸿蒙星河开发者预览,也被称为“纯血”鸿蒙。为了确保这种复杂系统的稳定性和高效运行,日志采集成为了开发和维护过程中的关键环节。

华为云云日志服务介绍

云日志服务(Log Tank Service,简称 LTS)用于收集来自主机和云服务的日志数据,通过海量日志数据的分析与处理,可以将云服务和应用程序的可用性和性能最大化,为您提供实时、高效、安全的日志处理能力,帮助您快速高效地进行实时决策分析、设备运维管理、用户业务趋势分析等。

 

华为云云云日志业务全景图

为确保各类应用程序能够在鸿蒙操作系统上实现无缝对接并高效利用 LTS,LTS SDK 进行了 HarmonyOS 原生适配,可以提升鸿蒙生态下应用的稳定性和可靠性。

LTS Harmony SDK 介绍

LTS Harmony SDK 基于华为终端日志底座进行扩展,底层适配鸿蒙 NDK,核心部分使用 ArkTS 语言编写,对性能进行了大量优化(包括缓存上报、文件存储、上报策略等),能够适用于移动端、服务端等各种场景,LTS Harmony SDK 提供 ArkTS 语言原生调用 API,已通过 OpenHarmony 三方库中心托管发布,当前支持 HarmonyOS NEXT API 12 及以上,仅支持 Stage 模式。

 

SDK 使用最佳实践

使用前提

使用云日志前,您需要注册华为账号,并开通云日志服务。

确认云日志服务的区域,请用户根据所在的区域,选择 region。

获取华为账号 AK/SK。

获取华为云账号的项目 ID(project ID),步骤参考:请参见“我的凭证>API 凭证”。

获取需要上报到 LTS 的日志组 ID 和日志流 ID。

 

集成接入 SDK

鸿蒙仓库集成

在终端中运行安装命令。

ohpm install lts_harmony_sdk

在 app/oh-package.json5 中添加依赖。

dependencies {    ...    "lts_harmony_sdk": "0.0.1"    ...}在终端中运行以下命令安装 SDKohpm install

 

手动集成

下载[日志 SDK 包]。

下载后解压到指定目录。注:直接解压即可,不需要额外操作。

将解压后的 har 静态库文件添加到您的项目工程中。

在 app/oh-package.json5 中添加依赖。

dependencies {    ...    "lts_harmony_sdk": "file:../plugin/LTS_SDK/default/lts_harmony_sdk.har" // HAR 包存放地址    ...}

在终端中运行以下命令使能 SDK。

ohpm install

注意事项:SDK 包使用语言为 ArkTS,只能在 ArkTS 文件中引入。仅支持 SDK11 以上版本。

引入依赖模块

import { LTSSDK, ConfigParam } from 'lts_harmony_sdk';

初始化

初始化代码示例:

// ArkTS 代码示例// LTS 参数配置 const config:ConfigParam = {        // 必填参数        region: string,  // 上报 region        projectId: string,  // 华为云项目 ID        groupId: string,  // LTS 日志组 ID        streamId: string,  // LTS 日志流 ID        // 选填参数        url: string,  // 上报地址        cacheThreshold: number,  // 上报条数阈值        timeInterval: number,  // 上报时间阈值        isReportBackground: boolean // 是否开启后台上报};// 获取 ApplicationContextlet applicationContext = this.context.getApplicationContext(); // LTS 初始化方法 const ltssdk = new LTSSDK( applicationContext , config)

 

配置参数说明

 

日志上报

Report(content, labels)

说明:采集日志,缓存到本地,当缓存条数达到阈值时,自动上报。 content 参数:日志内容,支持 Map 和 Map 数组;键值对最多 500 个;content 转 JSON 字符串最大支持长度为 1024*30,超出则被截断丢弃。

labels 参数:日志标签,非必填,value 支持 String、Number 类型;key 最大长度为 64,支持字母、数字和下划线组合,首字符须是字母;如果 value 是 String 类型,最大长度为 256。键值对最多 50 个。

代码示例:

const ltssdk = new LTSSDK(applicationContext, config)let fruit = {    "fruit_1": "apple",    "fruit_2": "pear",    "fruit_3": "banana"};let food = { "food_1": "rice" };let labels = { "date": "2023-10-01"};let contents = [food, fruit];ltssdk.report(food);  // 缓存上报单条 不带标签 ltssdk.report(food, labels);  // 缓存上报单条 带标签 ltssdk.report(contents); // 缓存上报多条 不带标签 ltssdk.report(contents, labels); // 缓存上报多条 带标签

 

ReportImmediately(content, labels)

说明:采集日志,立即上报。 content 参数:日志内容,支持 Map 和 Map 数组;键值对最多 500 个;Content 转 JSON 字符串最大支持长度为 1024*30,超出则被截断丢弃。

labels 参数:日志标签,非必填,value 支持 String、Number、Map;key 最大长度为 64,支持字母、数字和下划线组合,首字符须是字母;如果 value 是 String 类型,最大长度为 256。键值对最多 50 个。

代码示例:

const ltssdk = new LTSSDK(applicationContext , config)let fruit = {    "fruit_1": "apple",    "fruit_2": "pear",    "fruit_3": "banana"};let food = { "food_1": "rice" };let labels = { "date":"2023-10-01"};let contents = [food, fruit];ltssdk.reportImmediately(food);  // 立即上报单条 不带标签 ltssdk.reportImmediately(food, labels);  // 立即上报单条 带标签 ltssdk.reportImmediately(contents);  // 立即上报多条 不带标签 ltssdk.reportImmediately(contents, labels);  // 立即上报多条 带标签

日志使用场景

应用场景 1:应用运维

企业在日常业务运维、审计或等保时,需要收集各种类型的日志,常遇到如下痛点:

企业部门多且日志繁杂,日志量大。

云服务资源种类数量多,不熟悉监控指标和运维日志,运维难度大。

安全合规要求高,等保合规要求日志长期存储,人力不足,维护成本高。

基于云日志服务 LTS 可以实现:

提供全场景日志接入,全面覆盖业务、应用、中间件和基础设施,实现快速收集日志。

支持秒级日志查询和分钟级日志监控,通过配置告警规则和告警通知,实现分钟级问题定位和分析。

支持将日志转储至 OBS 实现长期保存,满足网络安全要求。

LTS 提供解决方案参考如下图1,可以实现统一收集生产环境应用日志,开发人员检索分析日志,运维人员基于日志配置告警,实时感知现网业务,及时发现并解决故障问题。

 

图 1 应用运维解决方案

应用场景 2:安全合规

大型企业的每个业务部门都有独立的云账户实现资源隔离,每个业务部门的运维人员需要依赖日志监控告警实现故障定位分析,同时集团安全部门需要统一监控日志,因此多账号的统一日志管理成为企业痛点:

分业务独立运维:客户每个业务模块都有一个独立的账号做资源隔离,依赖日志服务配置监控告警,快速分析发现故障并定位根因。

安全部门统一监控日志:客户使用多账号管理体系,每个业务部门有一个独立的账号,安全部门需要汇聚所有日志到一个账号,并存储 180 天以上来满足法规要求。

基于云日志服务 LTS 可以实现:

多账号独立管理:每个账号独立采集各自业务的应用日志、云服务日志,资源互相隔离、权限划分清晰;借助日志告警配置,90%问题定位控制在 10 分钟。

日志数据跨账号集中汇聚:使用 LTS 的多账号日志汇聚功能,将各个子账号的日志复制一份到统一监控账号,长期存储 180 天,便于安全部门集中审计,满足网络安全法规要求。

LTS 提供解决方案参考如下图2,可以实现统一收集云服务、应用程序日志,支持保存 180 天以上,满足《网络安全法》、《GDPR》等法律法规要求。

 

图 2 安全合规解决方案

应用场景 3:运营分析

企业在日常经营中,可以上报各种业务日志(例如移动端日志、服务端日志),经过规整、过滤、脱敏、富化等加工处理后,可以融合大数据平台、BI 工具进行业务分析,例如获取页面的 PV、UV、用户停留时间、交易金额等,用于了解业务运营状况、分析用户行为特征,基于实时的数据分析反馈调整业务决策,提升用户体验,提升经营效率,实现企业的数字化转型。

在业务分析过程中经常遇到如下痛点:

移动端数据难采集:难以快速采集多种移动端设备,例如 Web 浏览器、iOS、安卓、鸿蒙、百度小程序、微信小程序、钉钉小程序、快应用等多类端侧日志无法快速采集。

数据传输不可靠:移动端日志数据量多且频繁,传输速度慢,也极易出现丢失,对业务分析造成一定影响。

数据处理不方便:原始数据不方便处理,不方便快速与大数据平台实现对接。

云日志服务 LTS 支持采集多种移动端日志,融合大数据完成业务运营分析,基于 LTS 可以实现:

端侧日志全面采集接入:集成 LTS 提供的多种移动端 SDK,实现了缓存发送、异常重试、批量发送等稳定功能,用户快速集成即可全面采集移动端日志到 LTS。

秒级上报,高可靠:端侧采集日志后,经传输链路秒级完成上报,数据无丢失,支撑业务做完整性分析。

DLI 和 DWS 快速对接 LTS:DLI-Flink 简易集成 Connector,定点从 LTS 实时消费日志;LTS 日志可快速配置转储到 OBS,供 DLI 快速从 OBS 读取日志;LTS 支持直接将结构化日志转储到 DWS。

LTS 提供解决方案参考如下图3,可以对日志结构化解析,基于 SQL 语法分析日志,生成可视化图表,并结合大数据平台帮助企业进一步挖掘数据价值,助力企业数字化转型。

 

图 3 运营分析解决方案

体验地址:https://www.huaweicloud.com/product/lts.html

Apipost 私有化火热进行中

评论