鸿蒙背景介绍
华为鸿蒙HarmonyOS系统是面向万物互联的全场景分布式操作系统,支持手机、平板、智能穿戴、智慧屏等多种终端设备运行,提供应用开发、设备开发的一站式服务的平台。2024 年 1 月 18 日正式推出 HarmonyOS NEXT 鸿蒙星河开发者预览,也被称为"纯血"鸿蒙。为了确保这种复杂系统的稳定性和高效运行,日志采集成为了开发和维护过程中的关键环节。
华为云云日志服务介绍
云日志服务(Log Tank Service,简称LTS)用于收集来自主机和云服务的日志数据,通过海量日志数据的分析与处理,可以将云服务和应用程序的可用性和性能最大化,为您提供实时、高效、安全的日志处理能力,帮助您快速高效地进行实时决策分析、设备运维管理、用户业务趋势分析等。
华为云云云日志业务全景图
为确保各类应用程序能够在鸿蒙操作系统上实现无缝对接并高效利用LTS,LTS SDK进行了HarmonyOS 原生适配,可以提升鸿蒙生态下应用的稳定性和可靠性。
LTS H armony 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"
...
}
在终端中运行以下命令安装SDK
ohpm 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 // 是否开启后台上报
};
// 获取ApplicationContext
let applicationContext = this.context.getApplicationContext();
// LTS初始化方法
const ltssdk = new LTSSDK( applicationContext , config)
配置参数说明
|----------------------------------|---------|----------|---------|---------------------------------------------------------------------------------------|
| 参数名称 | 类型 | 是否必填 | 默认值 | 描述 |
| projectId | string | 必填 | - | 华为云帐号的项目ID。 |
| accessKey | string | 必填 | - | 华为云帐号的访问密钥,简称AK。 |
| secretKey | string | 必填 | - | 华为云帐号的秘密访问密钥,简称SK。 |
| region | string | 必填 | - | LTS的服务区域。 |
| groupId | string | 必填 | - | LTS的日志组ID。 |
| streamId | string | 必填 | - | LTS的日志流ID。 |
| url | string | 选填 | nil | 要上报的LTS的公网地址域名,如未设置,将根据Regio自动生成链接,格式如下:https://lts-access.{region}.myhuaweicloud.com |
| cacheThreshold | number | 选填 | 200条 | 当本地数据库日志存储条数达到该值会触发上报,取值范围为30-1000条。 |
| timeInterval | number | 选填 | 60秒 | 定时器每隔该值会触发上报,取值范围为1-1800秒。 |
| reportWhenEnterBackgroundEnabled | boolean | 选填 | YES | 是否开启APP切后台上报功能。 |
日志上报
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运营分析解决方案