华为云用户手册

  • 参数获取方式 上线区域表,使用华为云主机时参考以下信息: 区 域名 称 RegionName Endpoint 华北-北京四 cn-north-4 https://lts-access.cn-north-4.myhuaweicloud.com:8102 华东-上海一 cn-east-3 https://lts-access.cn-east-3.myhuaweicloud.com:8102 华南-广州 cn-south-1 https://lts-access.cn-south-1.myhuaweicloud.com:8102 亚太-新加坡 ap-southeast-3 https://lts-access.ap-southeast-3.myhuaweicloud.com:8102 日志组ID:在 云日志 服务控制台,选择“日志管理”,鼠标悬浮在日志组名称上,可查看日志组名称和日志组ID。 日志流ID:单击日志组名称对应的按钮,鼠标悬浮在日志流名称上,可查看日志流名称和日志流ID。
  • 函数列表 类型 函数 说明 多字符串操作 str_format 按照指定格式对字符串进行格式化。 str_join 通过连接符将输入的字符串连接生成一个新的字符串。 str_zip 将两个值或表达式的字符串进行并发分裂然后再合并成一个字符串。 排序、反转、替换 str_sort 字符串排序。 str_reverse 将一个字符串进行反转。 str_replace 根据规则将旧字符串替换成新字符串。 str_translate 将字符串中的指定字符按照对应关系进行替换。 常见操作 str_strip 删除字符串中指定的字符。 str_lstrip 删除字符串开头的指定字符。 str_rstrip 删除字符串结尾的指定字符。 str_lower 将字符串中所有大写字符转换为小写字符。 str_upper 将字符串中所有小写字符转换为大写字符。 str_title 将所有单词的第一个字母转化为大写,其余字母均为小写。 str_capitalize 将字符串的第一个字母转化为大写,其他字母转化为小写。 str_swapcase 对字符串的大小写字母进行转换。 查找判断 str_count 统计字符串里某个字符出现的次数。 str_find 判断原字符串中是否包含指定的子字符串。 str_rfind 查找字符串中指定字符或者字符串最后一次出现的位置。 str_endswith 判断字符串是否以指定后缀结尾。判断字符串是否以指定后缀结尾。 str_startswith 判断字符串是否以指定字符串开头。 切分 str_split 通过指定分隔符对字符串进行分割。 str_splitlines 通过换行符符对字符串进行分割。 str_partition 根据指定的分隔符将字符串从左往右分割为三部分。 str_rpartition 根据指定的分隔符将字符串从右往左分割为三部分。 格式化 str_center 用指定字符将字符串填充到指定长度。 str_ljust 用指定字符将字符串从结尾填充至指定长度。 str_rjust 用指定字符将原字符串从开头填充至指定长度。 str_zfill 用字符0从开头将字符串填充至指定长度。 str_expandtabs 将字符串中的\t转为空格。 字符集判断 str_isalnum 判断字符串是仅由字母和数字组成。 str_isalpha 判断字符串是否仅由字母组成。 str_isascii 判断字符串由ASCII组成。 str_isdecimal 判断字符串是否仅包含十进制字符。 str_isdigit 判断字符串是否仅由数字组成。 str_isidentifier 判断字符串是否是有效的Python标识符 str_islower 判断字符串是否由小写字母组成。 str_isnumeric 判断字符串是否由数字组成。 str_isprintable 判断字符串中是否所有字符都是可打印字符。 str_isspace 判断字符串是否仅由空格字符组成。 str_istitle 判断字符串中所有单词的拼写首字母是否为大写,且其他字母为小写。 str_isupper 判断字符串中所有的字母是否都为大写。 str_uuid 随机生成UUID。
  • ct_bin 使用ct_bin将字段或表达式的数值转换为二进制数。 函数格式 ct_bin(value) 参数说明 参数名称 参数类型 是否必填 说明 value 数字或数字字符串 是 待转换的值。 返回结果 返回二进制的数值。 函数示例 测试数据 { "number": 123} 加工规则 e_set("ct_bin", ct_bin(v("number"))) 加工结果 number: 123ct_bin: 0b1111011
  • bin2hex 使用bin2hex函数将二进制数转换为十六进制字符串。 函数格式 bin2hex(binary) 参数说明 参数名称 参数类型 是否必填 说明 binary Binary 是 Binary类型的字符串。 返回结果 返回十六进制的字符串。 函数示例 测试数据 { "test": "test"} 加工规则 e_set("new",bin2hex(base64_decoding("ARi8WnFiLAAACHcAGgkADV37Xs8BXftezgAdqwF9"))) 加工结果 test : testnew :0118bc5a71622c00000877001a09000d5dfb5ecf015dfb5ece001dab017d
  • ct_hex 使用ct_hex函数将字段或表达式的数值转换为十六进制数。 函数格式 ct_hex(value) 参数说明 参数名称 参数类型 是否必填 说明 value 数字或数字字符串 是 待转换的值。 返回结果 返回十六进制的数值。 函数示例 测试数据 { "number": 123} 加工规则 e_set("ct_hex", ct_hex(v("number"))) 加工结果 number: 123ct_hex: 0x7b
  • bin2oct 使用bin2oct函数将二进制数转换为八进制数。 函数格式 bin2oct(binary) 参数说明 参数名称 参数类型 是否必填 说明 binary Binary 是 Binary类型的字符串。 返回结果 返回八进制的字符串。 函数示例 测试数据 { "test": "test"} 加工规则 e_set("new",bin2oct(base64_decoding("ARi8WnFiLAAACHcAGgkADV37Xs8BXftezgAdqwF9"))) 加工结果 test : testnew : 214274264705421300000002073400064044000325677327547401273755366340003552600575
  • ct_chr 使用ct_chr函数将字段或表达式的ANSI值、Unicode值转换为对应字符。 函数格式 ct_chr(value) 参数说明 参数名称 参数类型 是否必填 说明 value 数字或数字字符串 是 待转换的值。 返回结果 返回chr类型对应的字符。 函数示例 测试数据 { "num": 78} 加工规则 e_set("ct_chr", ct_chr(v("number"))) 加工结果 number: 78ct_chr: N
  • ct_oct 使用ct_oct函数将字段或表达式的数值转换为八进制数。 函数格式 ct_oct(value) 参数说明 参数名称 参数类型 是否必填 说明 value 数字或数字字符串 是 待转换的值。 返回结果 返回八进制的数值。 函数示例 测试数据 { "number": 123} 加工规则 e_set("ct_oct", ct_oct(v("number"))) 加工结果 number: 123ct_oct: 0o173
  • ct_ord 使用ct_ord函数将字段或表达式的字符转换为对应ANSI值、Unicode值。 函数格式 ct_ord(value) 参数说明 参数名称 参数类型 是否必填 说明 value String 是 待转换的值,长度为1。 返回结果 返回对应的ANSI值或Unicode值。 函数示例 测试数据 { "world": "a"} 加工规则 e_set("ct_ord", ct_ord(v("world"))) 加工结果 world: act_ord: 97
  • ct_int 使用ct_int函数将字段或表达式的值转换为整数。 函数格式 ct_int(value, base=10) 参数说明 参数名称 参数类型 是否必填 说明 value 数字或数字字符串 是 待转换的值。 base Number 否 参数值所代表的进制,默认为十进制。例如base=8,表示将八进制要转成十进制。 返回结果 返回整型数值。 函数示例 示例1:将字符串转换成整型。 测试数据 { "number": 2} 加工规则 e_set("int_number", ct_int(v("number"))) 加工结果 number: 2int_number: 2 示例2:将十六进制转换成十进制。 测试数据 { "number": AB} 加工规则 e_set("int_number", ct_int(v("number"),base=16)) 加工结果 number: ABint_number: 171
  • ct_float 使用ct_float函数将字段或表达式的值转换为浮点数。 函数格式 ct_float(value) 参数说明 参数名称 参数类型 是否必填 说明 value 数字或数字字符串 是 待转换的值。 返回结果 返回浮点类型数值。 函数示例 测试数据 { "price": 2} 加工规则 e_set("price_float", ct_float(v("price"))) 加工结果 price: 2price_float: 2.0
  • 函数列表 表1 转换函数列表 类型 函数名称 功能描述 基础类型转换 ct_int 将字段或表达式的值转换为整数。 ct_float 将字段或表达式的值转换为浮点数。 ct_str 将字段或表达式的值转换为字符串。 ct_bool 将字段或表达式值转换为布尔值。 数字转换 ct_chr 将字段或表达式的ANSI值、Unicode值转换为对应字符。 ct_ord 将字段或表达式的字符转换为对应ANSI值、Unicode值。 ct_hex 将字段或表达式的数值转换为十六进制数。 ct_oct 将字段或表达式的数值转换为八进制数。 ct_bin 将字段或表达式的数值转换为二进制数。 进制转换 bin2oct 将二进制数转换为八进制数。 bin2hex 将二进制数转换为十六进制字符串。
  • dct_get 获取字典中某关键字的值。 函数格式 dct_get(dict,key,default=None) 参数说明 参数名称 数据类型 是否必填 说明 dict dict 是 字典数据。 key String 是 要获取值的关键字。 default String 否 key不存在时,返回该值。 返回结果 返回字典关键字的值。 函数示例 示例1: 测试数据 { "ctx": "{\"k1\":\"v1\",\"k2\":\"v2\"}" } 加工规则 e_set("hello", dct_get(v("ctx"), "k1")) 加工结果 ctx: {"k1":"v1","k2":"v2"}hello: v1 示例2: 测试数据 { "ctx": "{\"k1\":\"v1\",\"k2\":\"v2\"}" } 加工规则 e_set("hello", dct_get(v("ctx"), "k3",default="123")) 加工结果 ctx: {"k1":"v1","k2":"v2"}hello: 123
  • dct_make 构建字典。 函数格式 dct_make(key1, value1, key2, value2, ...) 参数说明 参数名称 数据类型 是否必填 说明 key String 是 作为字典key的字符串。 value String 是 作为字典value的字符串。 返回结果 返回构建的字典。 函数示例 测试数据 { "content": "test"} 加工规则 e_set("hello", dct_make("k1","v1","k2","v2")) 加工结果 content:testhello:{"k1": "v1", "k2": "v2"}
  • dct_update 更新字典。 函数格式 dct_update(dict1, dict2) 参数说明 参数名称 数据类型 是否必填 说明 dict1 dict 是 需要被更新的目标字典。 dict2 dict 是 补充新的字典信息。 返回结果 返回更新的字典。 函数示例 测试数据 { "ctx": "{\"k1\":\"v1\",\"k2\":\"v2\"}" } 加工规则 e_set("hello", dct_update(v("ctx"), {"k3": "v3"})) 加工结果 ctx: {"k1":"v1","k2":"v2"}hello: {"k1": "v1", "k2": "v2", "k3": "v3"}
  • dct_delete 删除字典。 函数格式 dct_delete(dict, key1, key2, ...) 参数说明 参数名称 数据类型 是否必填 说明 dict dict 是 需要删除键值对的目标字典。 key1 String 是 要删除的键值对的关键字。 key2 String 否 要删除的键值对的关键字。 返回结果 返回删除后的字典。 函数示例 测试数据 { "ctx": "{\"k1\":\"v1\",\"k2\":\"v2\"}" } 加工规则 e_set("hello", dct_delete(v("ctx"), "k2")) 加工结果 ctx: {"k1":"v1","k2":"v2"}hello: {"k1":"v1"}
  • dct_keys 获取字典关键字列表。 函数格式 dct_keys(dict) 参数说明 参数名称 数据类型 是否必填 说明 dict dict 是 字典数据。 返回结果 返回获取的字典关键词列表。 函数示例 测试数据 { "ctx": "{\"k1\":\"v1\",\"k2\":\"v2\"}" } 加工规则 e_set("hello", dct_keys(v("ctx"))) 加工结果 ctx: {"k1":"v1","k2":"v2"}hello: ["k1","k2"]
  • dct_values 获取字典值列表。 函数格式 dct_values(dict) 参数说明 参数名称 数据类型 是否必填 说明 dict dict 是 字典数据。 返回结果 返回获取的字典词列表。 函数示例 测试数据 { "ctx": "{\"k1\":\"v1\",\"k2\":\"v2\"}" } 加工规则 e_set("hello", dct_values(v("ctx"))) 加工结果 ctx: {"k1":"v1","k2":"v2"}hello: ["v1","v2"]
  • 功能特性 云日志服务提供数据加工功能,用于数据的规整、富化、脱敏和过滤。 数据规整:针对混乱格式的日志进行字段提取、格式转换,获取结构化数据以支持后续的流处理、 数据仓库 计算。 数据富化:对日志(例如订单日志)和维表(例如用户信息表)进行字段连接(JOIN),为日志添加更多维度的信息,用于数据分析。 数据脱敏:对数据中包含的密码、手机号、地址等敏感信息进行脱敏。 数据过滤:过滤出关键服务的日志,用于重点分析。
  • DNS日志示例以及字段含义 日志示例:2023-07-10 14:30:25 INFO client 192.168.2.50 query: example.org IN A 日志说明:2023年7月10日14时30分25秒,客户端IP地址为192.168.2.50发起了对example.org的A记录查询。 字段含义: 2023-07-10 14:30:25:表示事件发生的时间。 client 192.168.2.50:表示发起查询的客户端的IP地址。 query:表明这是一个查询操作。 example.org:被查询的域名。 IN A:表示查询的是A记录(IPv4地址记录)。
  • 权限配置 LTS-SDK 需要鸿蒙的网络权限,如果没有配置,请将下面内容的写入APP的module.json5 文件中: { "module": { ... "requestPermissions":[ ... { "name": "ohos.permission.INTERNET" }, { "name": "ohos.permission.GET_NETWORK_INFO" } ], ... }
  • 配置参数说明 表4 初始化参数说明 参数名称 类型 是否必填 默认值 描述 projectId string 必填 - 华为云账号的项目ID。 groupId string 必填 - LTS的日志组ID。 streamId string 必填 - LTS的日志流ID。 accessKey string 必填 - 华为云账号的访问密钥,简称AK。注意:认证用的华为云账号AK、SK硬编码到代码中或者明文存储都有很大的安全风险,建议密文存放,使用时解密,确保安全。 secretKey string 必填 - 华为云账号的秘密访问密钥,简称SK。注意:认证用的华为云账号AK、SK硬编码到代码中或者明文存储都有很大的安全风险,建议密文存放,使用时解密,确保安全。 region string 必填 - LTS的服务区域。 url string 选填 null 用于上报的公网地址域名,如未设置,将根据region自动生成链接,格式如下:https://lts-access.{region}.myhuaweicloud.com cacheThreshold number 选填 200条 当本地数据库日志存储条数达到该值会触发上报,取值范围为30-1000条。 timeInterval number 选填 3秒 定时器每隔该值会触发上报,取值范围为1-1800秒。 isReportBackground boolean 选填 true 是否开启APP切入后台时上报功能。
  • 接入调试 在开发过程中可以启用调试模式,借助控制台日志实时查看上报日志的记录情况,观察具体结果并根据需要进行调整。 需要通过调用LTSSDK的静态方法来修改,SDK支持Debug、Info、Warning 、 Error 和 Off 5个级别的 默认为静默输出(Off)。5个级别分别对应的参数:LogLevel.DEBUG、LogLevel.INFO、LogLevel.WARNING、LogLevel.ERROR、LogLevel.OFF。代码示例如下: ltssdk.setLogLevel(LogLevel.DEBUG)
  • 版本更新说明 SDK如何处理个人信息请参考华为云日志服务移动端日志采集SDK隐私声明。 您集成和使用我们的SDK时需要遵从个人信息保护基本要求,详情请参考华为云日志服务移动端日志采集SDK开发者合规指南。 表1 版本更新说明 版本号 下载地址 更新说明 系统 0.0.3 单击下载 将SDK写入和上报日志逻辑迁移到子线程,添加代码混淆与单元测试用例。 HarmonyOS NEXT及以上。 0.0.2 单击下载 将日志状态存入数据库。 HarmonyOS NEXT及以上。 0.0.1 单击下载 LTS鸿蒙SDK上线,支持缓存上报、立即上报等功能。 HarmonyOS NEXT及以上。
  • 安装鸿蒙 SDK 集成接入SDK。SDK包使用语言为ArkTS,只能在ArkTS文件中引入。 鸿蒙仓库集成。 在终端中运行安装命令。 ohpm install lts-harmony-sdk 在app/oh-package.json5中添加依赖。 dependencies { ... "lts-harmony-sdk": "0.0.3" ... } 在终端中运行以下命令使能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 初始化,详细参数请参考表4。 LTSSDK支持多实例日志上报机制,根据不同配置创建实例进行上报。 添加依赖 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 accessKey: string, // 华为云访问密钥 secretKey: string, // 华为云秘密访问密钥 // 选填参数 url: string, // 上报地址 cacheThreshold: number, // 上报条数阈值 timeInterval: number, // 上报时间阈值 isReportBackground: boolean // 是否开启后台上报 }; // 获取ApplicationContext let applicationContext = this.context.getApplicationContext(); // LTS初始化方法 const ltssdk = new LTSSDK(applicationContext, config) 上报日志,LTS提供两种上报日志的方法。 表2 两种上报日志的方法 Method Description report(content, labels) 上报日志:先存入本地数据库,根据配置中设定的策略实施上报。 reportImmediately(content, labels) 立即上报日志。 表3 Parameters参数 Name Description content 日志内容,支持字典和字典数组;键值对最多300个;content转JSON字符串最大支持长度为30*1024,超出部分被截断。 labels 日志标签。支持字典或空值;最外层键值对最多50个;最外层key最大长度为64,支持字母、数字和下划线组合,首字符须是字母;字典转JSON字符串最大支持长度为30720,超出则该条日志无法上报。 ArkTS代码示例如下: 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.reportImmediately(food); // 立即上报单条 不带标签 ltssdk.reportImmediately(food, labels); // 立即上报单条 带标签 ltssdk.report(contents); // 缓存上报多条 不带标签 ltssdk.report(contents, labels); // 缓存上报多条 带标签 ltssdk.reportImmediately(contents); // 立即上报多条 不带标签 ltssdk.reportImmediately(contents, labels); // 立即上报多条 带标签
  • 参数获取方式 区域表 区域名称 RegionName 华北-北京二 cn-north-2 华北-北京四 cn-north-4 华北-北京一 cn-north-1 华东-上海二 cn-east-2 华东-上海一 cn-east-3 华南-广州 cn-south-1 华南-深圳 cn-south-2 西南-贵阳一 cn-southwest-2 亚太-新加坡 ap-southeast-3 日志组ID:在云日志服务控制台,选择“日志管理”,鼠标悬浮在日志组名称上,可查看日志组名称和日志组ID。 日志流ID:单击日志组名称对应的按钮,鼠标悬浮在日志流名称上,可查看日志流名称和日志流ID。
  • 使用说明 当用户修改权限后,权限信息在一天后生效。 SDK支持跨云/本地上报日志,当前仅支持华北-北京四、华东-上海一、华南-广州、西南-贵阳一。使用详情见Appender配置参数说明表中的“enableLocalTest”参数,当该参数为true时,上报日志规格为单个机器200次/秒(即每秒只能发送200次,每次批量发送数量/大小详情见参数“batchSizeThresholdInBytes、batchCountThreshold、lingerMs”)。 通过SDK上报日志到LTS的时间相距当前时间不超过2天,否则上报日志会被LTS删除。
  • 单个producer性能基线 上报日志时,请参考如下参数的测试性能基线,若超出基线值,可能会导致日志上报异常。 totalSizeInBytes:524288000 ioThreadCount:8 maxBlockMs:0 batchSizeThresholdInBytes:524288 batchCountThreshold:4096 lingerMs:2000 按照参数基线值设置后,使用8U16GB的机器规格测试,上报单条日志大小为1KB。 测试结果:SDK上报日志的数据量为60MB/s,速率为6w条/s。 当日志上报量超过单个producer时: 建议拆分日志流,使用多个producer上报日志,分摊流量,以保障SDK处于正常上报状态。 如果maxBlockMs为0时,SDK处于非阻塞状态,会触发保护机制自动降级,可能会对部分日志做丢弃处理。 如果maxBlockMs大于0时,SDK处于阻塞状态,阻塞时间为maxBlockMs,可能会造成prodcuer.send()发送日志方法处于阻塞状态。
  • 注意事项 由于Java-SDK默认对SK明文存储,不符合某些对于安全有更高要求的用户,lts提供了一种用户自定义的加解密方式,建议用户优先使用加解密方式。 加密过程如下: 用户编写一个java类,比如com.demo.DecryptDemo类,在该类中增加一个解密方法,比如decrypt方法,输入和输出均为字符串。 编写decrypt的方法内容,客户自行实现SK加解密算法,返回解密后的值。 当用户调用Java-SDK初始化时,会需要传入SK,这时使用DecryptDemo.decrypt方法即可。
  • e_keep 据条件判断是否保留日志。 函数格式 e_keep(condition=true) 支持固定标识KEEP,等价于e_keep()。 参数说明 参数名称 参数类型 是否必填 说明 condition Bool 否 默认为true,一般传递一个条件判断函数的结果。 返回结果 满足条件则返回原日志,不满足时丢弃日志。 函数示例 示例1:当__programe__字段的值是access的时候保留日志,否则丢弃日志。 测试数据 [{"__programe__": "access" ,"age": 18,"content": 123,"name": "maki" },{"__programe__": "error" ,"age": 18,"content": 123,"name": "maki"}] 加工规则 e_keep(e_search("__programe__==access"))#等价于e_if(e_search("not __programe__==access"), e_drop()) #等价于e_if_else(e_search("__programe__==access"), e_keep(), e_drop()) 加工结果 保留__programe__字段值为access的日志。 __programe__: access age: 18content: 123name: maki 示例2:条件判断结果为true,保留日志。 测试数据 { "k1":"v1" , "k2": "v2", "k3": "k1"} 加工规则 e_keep(e_search("k1==v1")) 加工结果 k1: v1 k2: v2 k3: k1 示例3:条件判断结果为false,丢弃日志。 测试数据 { "k1":"v1" , "k2": "v2", "k3": "k1"} 加工规则 e_keep(e_search("not k1==v1")) 加工结果:丢弃日志。 示例4:判断条件为false。 测试数据 { "k1":"v1" , "k2": "v2", "k3": "k1"} 加工规则 e_keep(false) 加工结果:丢弃日志。 更多参考 支持和其他函数组合使用。
共99354条