华为云云日志服务 HarmonyOS NEXT采集最佳实践
鸿蒙背景介绍
华为鸿蒙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使用最佳实践
1.使用前提
- 使用云日志前,您需要注册华为账号,并开通云日志服务。
- 确认云日志服务的区域,请用户根据所在的区域,选择region。
- 获取华为账号AK/SK。
- 获取华为云账号的项目ID(project ID),步骤参考:请参见“我的凭证>API凭证”。
- 获取需要上报到LTS的日志组ID和日志流ID。
2.集成接入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';
3.初始化
初始化代码示例:
// 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)
配置参数说明


日志上报
- 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,可以实现统一收集生产环境应用日志,开发人员检索分析日志,运维人员基于日志配置告警,实时感知现网业务,及时发现并解决故障问题。

应用运维解决方案
应用场景2:安全合规
大型企业的每个业务部门都有独立的云账户实现资源隔离,每个业务部门的运维人员需要依赖日志监控告警实现故障定位分析,同时集团安全部门需要统一监控日志,因此多账号的统一日志管理成为企业痛点:
- 分业务独立运维:客户每个业务模块都有一个独立的账号做资源隔离,依赖日志服务配置监控告警,快速分析发现故障并定位根因。
- 安全部门统一监控日志:客户使用多账号管理体系,每个业务部门有一个独立的账号,安全部门需要汇聚所有日志到一个账号,并存储180天以上来满足法规要求。
- 基于云日志服务LTS可以实现:
- 多账号独立管理:每个账号独立采集各自业务的应用日志、云服务日志,资源互相隔离、权限划分清晰;借助日志告警配置,90%问题定位控制在10分钟。
- 日志数据跨账号集中汇聚:使用LTS的多账号日志汇聚功能,将各个子账号的日志复制一份到统一监控账号,长期存储180天,便于安全部门集中审计,满足网络安全法规要求。
LTS提供解决方案参考如下图2,可以实现统一收集云服务、应用程序日志,支持保存180天以上,满足《网络安全法》、《GDPR》等法律法规要求。

安全合规解决方案
应用场景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语法分析日志,生成可视化图表,并结合大数据平台帮助企业进一步挖掘数据价值,助力企业数字化转型。

运营分析解决方案
华为云云日志服务 HarmonyOS NEXT采集最佳实践的更多相关文章
- 基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则
目录 系列文章 领域服务 应用服务 学习帮助 系列文章 基于ABP落地领域驱动设计-00.目录和前言 基于ABP落地领域驱动设计-01.全景图 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践 ...
- Kubernetes Ingress 日志分析与监控的最佳实践
摘要: Ingress主要提供HTTP层(7层)路由功能,是目前K8s中HTTP/HTTPS服务的主流暴露方式.为简化广大用户对于Ingress日志分析与监控的门槛,阿里云容器服务和日志服务将Ingr ...
- Java日志体系(八)最佳实践
java常用日志框架关系 Log4j 2与Log4j 1发生了很大的变化,Log4j 2不兼容Log4j 1. Logback必须配合Slf4j使用.由于Logback和Slf4j是同一个作者,其兼容 ...
- Java 服务 Docker 容器化最佳实践
转载自:https://mp.weixin.qq.com/s/d2PFISYUy6X6ZAOGu0-Kig 1. 概述 当我们在容器中运行 Java 应用程序时,可能希望对其进行调整参数以充分利用资源 ...
- JSR-303 Bean Validation 介绍及 Spring MVC 服务端参数验证最佳实践
任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用很多时候同样的数据验证逻辑会出现在不同的层,这样 ...
- 使用日志服务进行Kubernetes日志采集
阿里云容器服务Kubernetes集群集成了日志服务(SLS),您可在创建集群时启用日志服务,快速采集Kubernetes 集群的容器日志,包括容器的标准输出以及容器内的文本文件. 新建 Kubern ...
- 基于AWS的云服务架构最佳实践
ZZ from: http://blog.csdn.net/wireless_com/article/details/43305701 近年来,对于打造高度可扩展的应用程序,软件架构师们挖掘了若干相关 ...
- 日志服务与SIEM(如Splunk)集成方案实战
背景信息 目标 本文主要介绍如何让阿里云日志服务与您的SIEM方案(如Splunk)对接, 以便确保阿里云上的所有法规.审计.与其他相关日志能够导入到您的安全运维中心(SOC)中. 名词解释 LOG( ...
- Standby Redo Logs的前世今生与最佳实践
编辑手记:使用过Data Guard的人应该对于Standby Redo Logs都不陌生,在配置了 Standby Redo Logs的standby中,能够进行日志的实时应用,同时Standby ...
- 基于ABP落地领域驱动设计-05.实体创建和更新最佳实践
目录 系列文章 数据传输对象 输入DTO最佳实践 不要在输入DTO中定义不使用的属性 不要重用输入DTO 输入DTO中验证逻辑 输出DTO最佳实践 对象映射 学习帮助 系列文章 基于ABP落地领域驱动 ...
随机推荐
- QT原理与源码分析之如何开发一个自定义的绘图设备和QT绘图引擎?
简介 本文将介绍如何自定义QT绘图设备类和如何自定义QT绘图引擎类. 目录 QT绘图设备抽象类QPaintDevice QT绘图引擎抽象类QPaintEngine 自定义绘图设备类 自定义绘图引擎类 ...
- C语言数据类型、变量的输入和输出、进制转换
scanf标准函数可以从键盘得到数字并记录到存储区里,为了使用这个标准函数需要包含stdio.h这个头文件 在scanf函数调用语句里应该使用存储区的地址表示存储区:双引号里使用占位符表示存储区的类型 ...
- eUSB是什么/可以干什么?
eUSB总结 1.什么是eUSB 1.1 eUSB概念 eUSB是原USB物理层上的补充,为了解决USB_phy低压需求的问题而出现的,eUSB可以将信号电平降至1.2V甚至更低,与此同时可以优化电源 ...
- Android Qcom USB Driver学习(六)
眼图基础知识与详解 10分钟教会你看眼图 USB2.0 HUB眼图调试经验总结 一篇文章教你如何全面了解眼图测试! 预加重与去加重对眼图的影响 关于 USB 通信阻抗匹配的问题 硬件调试--眼图几个经 ...
- "山海经“ 讲解----线段树
"山海经"--线段树 讲解 1.题面: http://cogs.pro/cogs/problem/problem.php?pid=775 2.题目大意及分析: i:大概就是说给了你 ...
- vue中ref的用法
用法1. vue给我们提供一个操作dom的属性,ref.绑定在dom元素上时,用起来与id差不多,通过this.$refs来调用: <div ref="test">te ...
- v-bind属性,v-model属性
一.v-bind v-bind动态绑定指令 默认情况下标签自带属性的值是固定的,可以使用v-bind:'需要绑定的值'='表达式' 所谓动态绑定动态的含义是我们不必修改页面template模板的代码, ...
- WSGI、mini-web框架
阅读目录: 1.服务器动态资源请求 2.应用程序示例 3.Web 动态服务器 4.mini-web框架-1-文件结构 5.mini-web框架-2-显示页面 6.mini-web框架-3-替换模板 一 ...
- 文件操作(C语言)
1. 为什么使用文件? 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用 ...
- 使用wxpython开发跨平台桌面应用,对常用消息对话框的封装处理
在很多程序中,封装常用消息对话框有很多好处,尤其是在 GUI 应用程序中,本篇随笔结合.net 开发Winform界面的经验,对使用wxpython开发中 wx.MessageDialog 和 wx. ...