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

作者:高玉龙(元泊)

背景信息

随着数字化新时代的全面展开以及 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方式获取时才需要
);

参数说明:

参数名称说明
endpointSLS 所在地域的访问域名,请参见服务入口 [ 7]
projectSLS 的资源管理单元,请参见项目(Project) [ 8]
logstoreSLS 中日志数据的采集、存储和查询单元,请参见日志库(Logstore) [ 9]
accesskey调用 API 访问云资源的安全口令,请参见访问密钥 [ 10]
日志采集

完成 SDK 的初始化之后,可以通过以下方式完成日志的采集。

aliyunLog.addLog(new Map([// 根据实际业务需要,调整您需要上报的业务字段["from", "Home"],["page", "HomePage"],]
));

更多 SDK 使用相关的信息,建议您参考 SLS 官网文档 HarmonyOS SDK [1****1]

日志使用

场景一:查询和可视化分析

数据通过 SDK 采集上来之后,我们可以通过 SLS 控制台进行日志的查询和分析。

首先在 SLS 控制台 Project 列表中找到您的 Project,并进入到 Project 页面。如下:

图片

接着,在左侧日志库菜单中找到您的 Logstore。如下:

图片

如果 Logstore 没有开启索引,在您打开 Logstore 页面之后,会收到一个“未开启日志库索引”的提示框。您可以通过 Logstore 页面右上角的开启索引按钮来配置相关字段的索引。配置索引的具体方式可以参考创建索引 [ 12] 这篇文档。本文示例的 Logstore 已经对以下字段进行了索引配置:

图片

索引开启后,即可在 Logstore 页面看到我们上报的日志信息,如下:

图片

注意: 如果您的日志是在开启索引之前写入的,您需要重建索引后才能看到历史写入的数据。如何重建索引?您可以参考文档重建索引 [ 13]

可视化分析示例一:分析 CartPage 的访问趋势

基于示例数据,我们可以通过 SQL 查询出 page 字段的访问趋势,如下:

* and page: CartPage | select date_trunc('minute', __time__)  as minute, count(*) as cnt group by minute order by minute asc

以上查询分析语句的含义是:

  • “|”之前的部分,是通过查询语句 page: CartPage 过滤出 page 为 CartPage 的页面数据。请参考更多关于查询语法 [ 14] 的信息。
  • “|”之后的部分,是通过 SQL 语句对过滤出来的数据进行分析,即:通过 date_trunc 语句把时间对齐到分钟级别,然后使用 count(*) 计算出每分钟页面的访问次数。请参考更多关于分析语法 [ 15] 的信息。

通过 SLS 可视化能力,可以对查询分析的结果使用丰富的图表展示,如下图是通过“线图 Pro”类型的图表,按照时间升序展示每分钟的页面访问次数。

图片

可视化分析示例二:分析 CartPage 页面的访问来源

基于示例数据,可以使用如下查询分析语句查询 Cart 页面的来源分布:

* and page: CartPage | select "from"  as "from", count(*) as cnt group by "from"

备注: 因为 from 是 SQL 的保留字段,因此示例中使用了双引号""对 from 进行包装。

下图是通过饼图 Pro 类型的图表,绘制的来源页面分布。

图片

SLS 拥有非常强大的可视化分析能力,以上仅是非常简单的示例。实际使用中,可能会涉及到多种指标的同比/环比,漏斗转化实时分析等等。SLS 对此提供了非常灵活和丰富的能力进行支持。更多信息可以参考查询与分析 [ 16] 以及可视化 [ 17]

场景二:日志加工处理

如果从鸿蒙设备上采集到的原始数据格式没有事先约定好,或者数据格式较为复杂,或者需要对个别字段做富化/脱敏等,您可以使用 SLS 数据加工能力对原始数据做富化和清洗。您可以参考以下步骤。

  1. [可选]新增一个 Logstore 用于存储加工处理后的数据,如下:

图片

可根据实际业务的需要,提前对该 Logstore 进行索引等配置。

  1. 进入到数据加工配置页面

图片

您可以通过 Logstore 名称右侧的“数据加工”超链接进入到数据加工配置页面。

  1. 配置数据加工任务

图片

如上图,您可以参考以下步骤配置数据加工任务。

a. 把目标数据加入到测试数据,用于验证数据加工脚本是否符合预期。

b. 在脚本编辑区域,根据实际业务需要输入数据加工脚本规则,示例如下:

# 富化__tag__:__client_ip__字段,提取出省、市、经纬度等信息
e_set("x", geo_parse(v("__tag__:__client_ip__")))
e_json("x", prefix="geo_") # 平铺x节点,并增加geo_前缀e_drop_fields("x")# 平铺content节点
e_json("content")
e_drop_fields("content")

关于数据加工脚本支持的语法,您可以参考数据加工语法 [ 18]

c. 脚本编写完成后,您可以通过右上角“预览数据”按钮验证数据加工的结果。

如下图,是以上数据加工脚本的预览结果:

图片

数据加工预览结果符合预期后,您就可以保存当前数据加工任务了,后续的具体操作请参考创建数据加工任务 [ 19]

其他场景

除了上文中提到的查询与可视化分析、日志加工处理之外,SLS 还支持基于业务日志创建自定义告警监控业务,通过流处理、批处理(定时SQL)功能对数据进一步加工、聚合处理,通过消费与投递功能投递业务数据到 OSS、MaxCompute 等。您可以通过访问日志服务(SLS) [ 20] 官网文档等方式进一步了解 SLS 各种功能,助力您的业务发展。

总结

SLS SDK 通过适配 HarmonyOS NDK,并提供原生 ArkTS 语言原生 API 的方式,使开发者能够确保应用程序在 HarmonyOS 操作系统上实现无缝对接和高效利用 SLS 功能,可以有效提升应用的稳定性和性能。SDK 提供的异步日志写入、日志聚合压缩上传、缓存控制、自定义标识、断点续传、日志上下文查看等丰富特性,可以简化日志管理流程,提升故障排查、性能优化、资源利用监控、安全防范等方面的能力。

此外,借助 SLS 的强大平台功能,如实时查询、可视化分析、数据加工处理等等能力,不仅能够快速定位问题,优化应用性能,还能够在满足数据合规性要求的同时,基于业务日志构建全面的运维监控体系,为数字化运营决策提供有效支持。

除了以上能力外,SLS 还提供基于 OTel(OpenTelemetry)协议的多平台数据采集插件,您可以借助这些插件实现端到端的 Trace 数据采集和分析能力。

  • 通过 OpenTelemetry 接入 Android Trace 数据

https://help.aliyun.com/zh/sls/user-guide/import-trace-data-from-android-apps-to-log-service-1

  • 通过 OpenTelemetry 接入 iOS Trace 数据

https://help.aliyun.com/zh/sls/user-guide/import-trace-data-from-ios-apps-to-log-service-46

  • 通过 OpenTelemetry 接入 Flutter/Dart Trace 数据

https://help.aliyun.com/zh/sls/user-guide/import-trace-data-from-flutter-and-dart-applications-by-using-opentelemetry-sdk-for-flutter

  • 通过 OpenTelemetry 接入 C++ Trace 数据

https://help.aliyun.com/zh/sls/user-guide/import-trace-data-from-cpp-applications-to-log-service

  • 接入 Web Trace 数据

https://help.aliyun.com/zh/sls/user-guide/import-data-from-web-pages-to-log-service

  • 接入小程序 Trace 数据

https://help.aliyun.com/zh/sls/user-guide/import-data-from-mini-programs-to-log-service

更多关于 Trace 数据采集和使用相关的内容,你可以参考 SLS Trace [2****1] 服务。欢迎您试用!

相关链接:

[1] 开通日志服务

https://www.aliyun.com/product/sls

[2] 管理 Project

https://help.aliyun.com/zh/sls/user-guide/manage-a-project

[3] 管理 Logstore

https://help.aliyun.com/zh/sls/user-guide/manage-a-logstore

[4] 访问密钥

https://help.aliyun.com/zh/sls/developer-reference/accesskey-pair#reference-rh5-tfy-zdb

[5] 为 RAM 用户授权

https://help.aliyun.com/zh/sls/create-a-ram-user-and-authorize-the-ram-user-to-access-log-service#section-kxp-1ok-zj4

[6] HarmonyOS 官网开发文档

https://developer.huawei.com/consumer/cn/doc/

[7] 服务入口

https://help.aliyun.com/zh/sls/user-guide/manage-a-project#section-mb8-vvq-67c

[8] 项目(Project)

https://help.aliyun.com/zh/sls/product-overview/project

[9] 日志库(Logstore)

https://help.aliyun.com/zh/sls/product-overview/logstore

[10] 访问密钥

https://help.aliyun.com/zh/sls/developer-reference/accesskey-pair

[11] HarmonyOS SDK

https://help.aliyun.com/zh/sls/developer-reference/harmonyos-sdk/

[12] 创建索引

https://help.aliyun.com/zh/sls/user-guide/create-indexes

[13] 重建索引

https://help.aliyun.com/zh/sls/user-guide/reindex-logs-for-a-logstore

[14] 查询语法

https://help.aliyun.com/zh/sls/user-guide/search-syntax

[15] 分析语法

https://help.aliyun.com/zh/sls/user-guide/sql-syntax-and-functions/

[16] 查询与分析

https://help.aliyun.com/zh/sls/user-guide/index-and-query/

[17] 可视化

https://help.aliyun.com/zh/sls/user-guide/visualization-2/

[18] 数据加工语法

https://help.aliyun.com/zh/sls/user-guide/data-processing-syntax/

[19] 创建数据加工任务

https://help.aliyun.com/zh/sls/user-guide/create-a-data-transformation-job

[20] 日志服务(SLS)

https://help.aliyun.com/zh/sls/product-overview/

[21] SLS Trace

https://help.aliyun.com/zh/sls/user-guide/usage-notes-39

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/299144.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络编程套接字应用分享【Linux C/C++ 】【UDP应用 | TCP应用 | TCP线程池小项目】

目录 前提知识 1. 理解源ip&#xff0c;目的ip和Macip 2. 端口号 3. 初识TCP&#xff0c;UDP协议 4. 网络字节序 5. socket 编程 sockaddr类型 一&#xff0c;基于udp协议编程 1. socket——创建套接字 2. bind——将套接字强绑定 3. recvfrom——接受数据 4. s…

基于jsp+Spring boot+mybatis的图书管理系统设计和实现

基于jspSpring bootmybatis的图书管理系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获…

【精品教程】护网HVV实战教程资料合集(持续更新,共20节)

以下是资料目录&#xff0c;如需下载&#xff0c;请前往星球获取&#xff1a; 01-HW介绍.zip 02-HTTP&Burp课程资料.zip 03-信息收集_3.zip 04-SQL注入漏洞_2.zip 05-命令执行漏洞.zip 06-XSS漏洞.zip 07-CSRF.zip 08-中间件漏洞.zip 09-SSRF.zip 10-XXE.zip 11-Java反序列…

攻防世界 wife_wife

在这个 JavaScript 示例中&#xff0c;有两个对象&#xff1a;baseUser 和 user。 baseUser 对象定义如下&#xff1a; baseUser { a: 1 } 这个对象有一个属性 a&#xff0c;其值为 1&#xff0c;没有显式指定原型对象&#xff0c;因此它将默认继承 Object.prototype。 …

彩虹聚合DNS管理系统,附带系统搭建教程

聚合DNS管理系统&#xff0c;可以实现在一个网站内管理多个平台的域名解析&#xff0c;目前已支持的域名平台有&#xff1a;阿里云、腾讯云、华为云、西部数码、CloudFlare。 本系统支持多用户&#xff0c;每个用户可分配不同的域名解析权限&#xff1b;支持API接口&#xff0…

CSS设置字体样式

目录 前言&#xff1a; 1.font-family&#xff1a; 2.font-style&#xff1a; 3.font-weight&#xff1a; 4.font-size&#xff1a; 5.font-variant&#xff1a; 6.font&#xff1a; 前言&#xff1a; 在网页中字体是重要的组成部分&#xff0c;使用好字体可以让网页更…

17.应用负载压力测试

早些点&#xff0c;下午题考&#xff0c;最近几年出现的少&#xff1b; 备考较为简单&#xff1b;历年真题相似度高&#xff1b; 主要议题&#xff1a; 1.负载压力测试概述 注意这些测试细微的差别&#xff1b; 负载测试和压力测试的方法比较相似&#xff0c;但是目的不同&a…

HTML——5.表单、框架、颜色

一、表单 HTML 表单用于在网页中收集用户输入的数据&#xff0c;例如登录信息、搜索查询等。HTML 提供了一系列的表单元素&#xff0c;允许用户输入文本、选择选项、提交数据等。 <!DOCTYPE html> <html lang"en"> <head> <meta charset&q…

Git 如何去使用

目录 1. Git暂存区的使用 1.1. 暂存区的作用 1.2. 暂存区覆盖工作区&#xff08;注意&#xff1a;完全确认覆盖时使用&#xff09; 1.3. 暂存区移除文件 1.4. 练习 2. Git回退版本 2.1. 概念 2.2. 查看提交历史 2.3. 回退命令 2.4. 注意 3. Git删除文件 3.1. 需求 …

软件设计师-案例分析2

文章目录 除09-1520上-结构化分析20上-数据库分析20上-面向对象分析与设计 除09-15 20上-结构化分析 问题1&#xff1a; 问题2&#xff1a; 问题3&#xff1a; 问题4&#xff1a; 回答1&#xff1a;E1检测设备&#xff1b; E2管理员&#xff1b;E3检测业务员&#xff1b;…

动态属性的响应式问题和行内编辑的问题

动态属性的响应式问题 通过点击给目标添加动态数据&#xff0c;该数据不具备响应式特性 如下图&#xff1a; 点击编辑&#xff0c;前面的数据框会变成输入框&#xff0c;点取消会消失 // 获取数据 async getList () {const res await xxxthis.list res.data.rows// 1. 获…

WindowsPowerShell安装配置Vim的折腾记录

说明 vim一直以来都被称为编辑器之神一样的存在。但用不用vim完全取决于你自己&#xff0c;但是作为一个学计算机的同学来说&#xff0c;免不了会和Linux打交道&#xff0c;而大部分的Linux操作系统都预装了vim作为编辑器&#xff0c;如果是简单的任务&#xff0c;其实vim只要会…

FreeRTOS临界段代码保护和任务调度器的挂起与恢复学习

FreeRTOS临界段代码保护和任务调度器的挂起与恢复学习 临界段代码保护 所谓临界段代码保护就是指必须完成运行&#xff0c;不能被打断的代码段。比如需要严格按照时序除初始化的外设&#xff1a;IIC、SPI&#xff0c;再或者因为系统自身需求和用户需求。 FreeRTOS 在进入临界…

路由策略与路由控制之双点双向重发布(OSPF-ISIS)实验

双点双向重发布在路由协议中&#xff0c;特别是在OSPF&#xff08;开放式最短路径优先&#xff09;与IS-IS&#xff08;中间系统到中间系统&#xff09;等协议之间&#xff0c;指的是在两个协议间或者两个进程间进行路由信息共享的机制。这种机制涉及到在两个不同的协议区域使用…

Chatgpt掘金之旅—有爱AI商业实战篇|专业博客|(六)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业博客领域有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着AI技…

idea通过SSH拉取代码

idea通过SSH拉取代码&#xff1a; 1. 在idea上设置Git.exe 2. 在本机生成SSH的私钥公钥和密码 检查.ssh文件夹是否存在 windows命令&#xff1a;dir %userprofile%\.ssh。如果目录存在&#xff0c;并且下边已经存在文件&#xff0c;直接删除所有的文件。如果不存在新建.ssh文件…

Redis主从集群-主从复制(通俗易懂)

为什么要搭建主从集群&#xff1f; 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;可以搭建主从集群&#xff0c;实现读写分离。一般都是一主多从&#xff0c;主节点负责写数据&#xff0c;从节点负责读数据&#xff0c;主节点写入数据…

C++模版简单认识与使用

目录 前言&#xff1a; 1.泛型编程 2.函数模版 3.类模版 为什么要有类模版&#xff1f;使用typedef不行吗&#xff1f; 类模版只能显示实例化&#xff1a; 注意类名与类型的区别&#xff1a; 注意类模版最好不要声明和定义分离&#xff1a; 总结&#xff1a; 前言&…

nvm保姆级安装使用教程

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 开发环境篇 ✨特色专栏&#xff1a; M…

软考111-上午题-【计算机网络】-URL和DNS

一、URL解析 org&#xff1a;各类组织结构&#xff08;非盈利团队&#xff09; 1-1、顶级域 顶级域名是域名的最后一个部分&#xff0c;即是域名最后一点之后的字母&#xff0c;例如&#xff1a;www.baidu.com这个域名中&#xff0c;顶级域是.com&#xff08;或.COM&#xff…