日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

阿里云云栖号發表於2024-04-25

背景資訊

隨著數字化新時代的全面展開以及 5G 與物聯網(IoT)技術的迅速普及,作業系統正面臨前所未有的變革需求。在這個背景下,華為公司自主研發的鴻蒙作業系統(HarmonyOS)應運而生,旨在滿足萬物互聯時代的多元化裝置接入、高效協同和安全可靠執行的需求。

HarmonyOS 不僅著眼於智慧手機市場,更是全球首個面向全場景智慧生態的作業系統,支援從手機、平板電腦到智慧家居、穿戴裝置乃至工業控制等多種終端形態。2024 年 1 月 18 日正式推出 HarmonyOS NEXT 鴻蒙星河開發者預覽,深圳市於 2024 年 3 月 3 日也釋出了支援開源鴻蒙原生應用發展的 2024 年行動計劃。

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

日誌服務(SLS)介紹

日誌服務(SLS,後文簡稱 SLS)是雲原生觀測與分析平臺,為 Log、Metric、Trace 等資料提供大規模、低成本、實時的平臺化服務。SLS 一站式提供資料採集、加工、查詢與分析、視覺化、告警、消費與投遞等功能,全面提升您在研發、運維、運營、安全等場景的數字化能力。

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

在構建複雜而龐大的應用和智慧生態系統過程中,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 NEXT 日誌採集最佳實踐

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方式獲取時才需要
)

引數說明:

引數名稱 說明
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]。

日誌使用

場景一:查詢和視覺化分析

資料透過 SDK 採集上來之後,我們可以透過 SLS 控制檯進行日誌的查詢和分析。

首先在 SLS 控制檯 Project 列表中找到您的 Project,並進入到 Project 頁面。如下:

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

接著,在左側日誌庫選單中找到您的 Logstore。如下:

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

如果 Logstore 沒有開啟索引,在您開啟 Logstore 頁面之後,會收到一個“未開啟日誌庫索引”的提示框。您可以透過 Logstore 頁面右上角的開啟索引按鈕來配置相關欄位的索引。配置索引的具體方式可以參考建立索引[12]這篇文件。本文示例的 Logstore 已經對以下欄位進行了索引配置:

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

索引開啟後,即可在 Logstore 頁面看到我們上報的日誌資訊,如下:

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

注意:如果您的日誌是在開啟索引之前寫入的,您需要重建索引後才能看到歷史寫入的資料。如何重建索引?您可以參考文件重建索引[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”型別的圖表,按照時間升序展示每分鐘的頁面訪問次數。

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

視覺化分析示例二:分析 CartPage 頁面的訪問來源

基於示例資料,可以使用如下查詢分析語句查詢 Cart 頁面的來源分佈:

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

備註:因為 from 是 SQL 的保留欄位,因此示例中使用了雙引號""對 from 進行包裝。

下圖是透過餅圖 Pro 型別的圖表,繪製的來源頁面分佈。

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

SLS 擁有非常強大的視覺化分析能力,以上僅是非常簡單的示例。實際使用中,可能會涉及到多種指標的同比/環比,漏斗轉化實時分析等等。SLS 對此提供了非常靈活和豐富的能力進行支援。更多資訊可以參考查詢與分析[16]以及視覺化[17]。

場景二:日誌加工處理

如果從鴻蒙裝置上採集到的原始資料格式沒有事先約定好,或者資料格式較為複雜,或者需要對個別欄位做富化/脫敏等,您可以使用 SLS 資料加工能力對原始資料做富化和清洗。您可以參考以下步驟。

1. [可選]新增一個 Logstore 用於儲存加工處理後的資料,如下:

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

可根據實際業務的需要,提前對該 Logstore 進行索引等配置。

2. 進入到資料加工配置頁面

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

您可以透過 Logstore 名稱右側的“資料加工”超連結進入到資料加工配置頁面。

3. 配置資料加工任務

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

如上圖,您可以參考以下步驟配置資料加工任務。

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. 指令碼編寫完成後,您可以透過右上角“預覽資料”按鈕驗證資料加工的結果。

如下圖,是以上資料加工指令碼的預覽結果:

日誌服務 HarmonyOS NEXT 日誌採集最佳實踐

資料加工預覽結果符合預期後,您就可以儲存當前資料加工任務了,後續的具體操作請參考建立資料加工任務[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[21]服務。歡迎您試用!

相關連結:

[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

作者:高玉龍(元泊)

原文連結

本文為阿里雲原創內容,未經允許不得轉載。

相關文章