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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 鸿蒙操作系统(HarmonyOS)上的日志服务(SLS)SDK 提供了针对 IoT、移动端到服务端的全场景日志采集、处理和分析能力,旨在满足万物互联时代下应用的多元化设备接入、高效协同和安全可靠运行的需求。



1. 背景信息


随着数字化新时代的全面展开以及 5G 与物联网(IoT)技术的迅速普及,操作系统正面临前所未有的变革需求。在这个背景下,华为公司自主研发的鸿蒙操作系统(HarmonyOS)应运而生,旨在满足万物互联时代的多元化设备接入、高效协同和安全可靠运行的需求。


HarmonyOS 不仅着眼于智能手机市场,更是全球首个面向全场景智能生态的操作系统,支持从手机、平板电脑到智能家居、穿戴设备乃至工业控制等多种终端形态。2024 年 1 月 18 日正式推出 HarmonyOS NEXT 鸿蒙星河开发者预览,深圳市于 2024 年 3 月 3 日也发布了支持开源鸿蒙原生应用发展的 2024 年行动计划。

image.png

2. 日志服务(SLS)介绍


日志服务(SLS,后文简称 SLS)是云原生观测与分析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务。SLS 一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能,全面提升您在研发、运维、运营、安全等场景的数字化能力。

image.png

在构建复杂而庞大的应用和智能生态系统过程中,SLS 作为开发调试、性能优化、运维监控和故障排查的重要基础设施。为确保各类应用程序能够在鸿蒙操作系统上实现无缝对接并高效利用 SLS,对 SLS SDK 进行 HarmonyOS 原生适配成为必然之举。


此举不仅可以提升鸿蒙生态下应用的稳定性和可靠性,也有助于开发者更好地遵循统一的标准和最佳实践,进一步促进鸿蒙操作系统生态的繁荣与发展。在这种情况下,基于 SLS 的移动应用日志管理和分析将成为不可或缺的工具,基于对 SLS+ 移动应用日志可以帮助开发人员快速定位和解决问题,优化应用性能。


2.1 SDK 特性介绍

HarmonyOS 下的 SLS SDK 基于共同的基座 C Core SDK 适配,底层适配鸿蒙NDK。C Core 部分使用纯 C 语言编写,对性能进行了极端优化(包括缓存管理、文件管理、PB 序列化等),能够适用于 IoT、移动端、服务端等各种场景。SDK 提供 ArkTS 语言原生调用 API。SDK 具备以下特性:


  • 异步
  • 客户端线程写入无阻塞
  • 日志队列异步发送
  • 聚合&压缩上传
  • 日志聚合发送(支持按超时时间、日志数、日志大小聚合)
  • 支持 lz4、zstd 压缩
  • 多实例
  • 支持创建多个实例分别发送到不同的目标
  • 可以实例配置独立,互不影响
  • 缓存
  • 支持设置可允许占用的缓存内存上限
  • 超过内存缓存上限时,日志写入会失败
  • 自定义标识
  • 支持设置自定义 Tag 和 Topic
  • 断点续传
  • 支持日志缓存到本地文件,只有发送成功才会删除,确保日志上传 At Least Once
  • 日志上下文
  • 支持查看某条日志的上下文,可以更好的定位问题

image.png

HarmonyOS SDK 通过 OpenHarmony 三方库中心托管发布,当前支持 HarmonyOS NEXT API 9.0 及以上,仅支持 stage 模式。


3. SDK 使用最佳实践


3.1 准备工作

在使用 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]


3.2 日志采集

安装 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方式获取时才需要
)


参数说明:


参数名称

说明

endpoint

SLS 所在地域的访问域名,请参见服务入口[7]

project

SLS 的资源管理单元,请参见项目(Project)[8]

logstore

SLS 中日志数据的采集、存储和查询单元,请参见日志库(Logstore)[9]

accesskey

调用 API 访问云资源的安全口令,请参见访问密钥[10]


日志采集

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


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


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


3.3 日志使用

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

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


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

image.png

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

image.png

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

image.png

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

image.png

注意:如果您的日志是在开启索引之前写入的,您需要重建索引后才能看到历史写入的数据。如何重建索引?您可以参考文档重建索引[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”类型的图表,按照时间升序展示每分钟的页面访问次数。

image.png

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

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


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


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


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

image.png

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


场景二:日志加工处理

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


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

image.png

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


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

image.png

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


3. 配置数据加工任务

image.png

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


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. 脚本编写完成后,您可以通过右上角“预览数据”按钮验证数据加工的结果。


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

image.png

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


3.4 其他场景

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


4. 总结


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


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


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



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


相关链接:

[1] 开通日志服务

[2] 管理 Project

[3] 管理 Logstore

[4] 访问密钥

[5] 为 RAM 用户授权

[6] HarmonyOS 官网开发文档

[7] 服务入口

[8] 项目(Project)

[9] 日志库(Logstore)

[10] 访问密钥

[11] HarmonyOS SDK

[12] 创建索引

[13] 重建索引

[14] 查询语法

[15] 分析语法

[16] 查询与分析

[17] 可视化

[18] 数据加工语法

[19] 创建数据加工任务

[20] 日志服务(SLS)

[21] SLS Trace


作者:高玉龙(元泊)

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8天前
|
Prometheus 运维 Kubernetes
Kubernetes 集群的监控与日志管理最佳实践
【5月更文挑战第23天】 在容器化和微服务架构日益普及的当下,Kubernetes 已成为众多企业的首选平台。随之而来的是对集群性能、资源利用和运行状况的持续监控需求,以及日志管理的重要性。本文将探讨在 Kubernetes 环境中实现有效监控和日志管理的策略,涵盖关键组件的选择、配置优化及故障排查流程,旨在为运维工程师提供一套综合解决方案,确保集群的稳定性和高可用性。
|
12天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与日志管理最佳实践
【5月更文挑战第19天】 在现代微服务架构中,容器编排平台如Kubernetes已成为部署、管理和扩展应用程序的关键工具。随着其应用范围不断扩大,集群的稳定性和性能监控变得至关重要。本文将探讨针对Kubernetes集群的监控策略,并深入分析日志管理的实现方法。通过介绍先进的技术堆栈和实用工具,旨在为运维专家提供一套完整的解决方案,以确保集群运行的透明度和可靠性。
45 3
|
14天前
|
关系型数据库 MySQL 数据库
mysql数据库bin-log日志管理
mysql数据库bin-log日志管理
|
14天前
|
存储 关系型数据库 数据库
关系型数据库文件方式存储LOG FILE(日志文件)
【5月更文挑战第11天】关系型数据库文件方式存储LOG FILE(日志文件)
76 1
|
15天前
|
运维 监控 安全
Java一分钟之-Log4j与日志记录的重要性
【5月更文挑战第16天】Log4j是Java常用的日志框架,用于灵活地记录程序状态和调试问题。通过设置日志级别和过滤器,可避免日志输出混乱。为防止日志文件过大,可配置滚动策略。关注日志安全性,如Log4j 2.x的CVE-2021-44228漏洞,及时更新至安全版本。合理使用日志能提升故障排查和系统监控效率。
73 0
|
16天前
|
C++
JNI Log 日志输出
JNI Log 日志输出
56 1
|
16天前
|
存储 运维 大数据
聊聊日志硬扫描,阿里 Log Scan 的设计与实践
泛日志(Log/Trace/Metric)是大数据的重要组成,伴随着每一年业务峰值的新脉冲,日志数据量在快速增长。同时,业务数字化运营、软件可观测性等浪潮又在对日志的存储、计算提出更高的要求。
263 6
|
16天前
|
XML Java Maven
Springboot整合与使用log4j2日志框架【详解版】
该文介绍了如何在Spring Boot中切换默认的LogBack日志系统至Log4j2。首先,需要在Maven依赖中排除`spring-boot-starter-logging`并引入`spring-boot-starter-log4j2`。其次,创建`log4j2-spring.xml`配置文件放在`src/main/resources`下,配置包括控制台和文件的日志输出、日志格式和文件切分策略。此外,可通过在不同环境的`application.yml`中指定不同的log4j2配置文件。最后,文章提到通过示例代码解释了日志格式中的各种占位符含义。
|
16天前
|
运维 监控 Go
Golang深入浅出之-Go语言中的日志记录:log与logrus库
【4月更文挑战第27天】本文比较了Go语言中标准库`log`与第三方库`logrus`的日志功能。`log`简单但不支持日志级别配置和多样化格式,而`logrus`提供更丰富的功能,如日志级别控制、自定义格式和钩子。文章指出了使用`logrus`时可能遇到的问题,如全局logger滥用、日志级别设置不当和过度依赖字段,并给出了避免错误的建议,强调理解日志级别、合理利用结构化日志、模块化日志管理和定期审查日志配置的重要性。通过这些实践,开发者能提高应用监控和故障排查能力。
98 1
|
16天前
|
弹性计算 运维 Shell
http://www.vxiaotou.com