云日志服务 LTS
云日志服务 LTS
- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 授权IAM用户使用云日志服务LTS
- 购买LTS资源包
- 日志管理
-
日志接入
- 日志接入概述
- 使用ICAgent插件采集日志
-
使用云服务接入LTS
- 云服务接入LTS概述
- 应用运维管理AOM接入LTS
- API网关APIG接入LTS
- Astro轻应用接入LTS
- 云堡垒机CBH接入LTS
- 内容分发网络CDN接入LTS
- 云防火墙CFW接入LTS
- 云审计服务CTS接入LTS
- 分布式缓存服务DCS接入LTS
- 文档数据库服务DDS接入LTS
- DDoS防护 AAD接入LTS
- 分布式消息服务Kafka版接入LTS
- 数据复制服务DRS接入LTS
- 数据仓库服务GaussDB(DWS)接入LTS
- 弹性负载均衡 ELB接入LTS
- 企业路由器ER接入LTS
- 函数工作流FunctionGraph接入LTS
- 云数据库GaussDB接入LTS
- 图引擎服务GES接入LTS
- 云数据库 TaurusDB接入LTS
- 云数据库GeminiDB接入LTS
- 云数据库GeminiDB Mongo接入LTS
- 云数据库GeminiDB Cassandra接入LTS
- 华为HiLens接入LTS
- 设备接入IoTDA接入LTS
- AI开发平台ModelArts接入LTS
- MapReduce服务MRS接入LTS
- 云数据库RDS for MySQL接入LTS
- 云数据库RDS for PostgreSQL接入LTS
- 云数据库RDS for SQLServer接入LTS
- 应用与数据集成平台ROMA Connect接入LTS
- 视频直播Live接入LTS
- 消息通知服务SMN接入LTS
- 安全云脑SecMaster接入LTS
- 对象存储服务OBS接入LTS(邀测)
- 虚拟私有云VPC接入LTS
- Web应用防火墙WAF接入LTS
- 使用API接入LTS
- 使用SDK接入LTS
- 跨IAM账号接入LTS
- 使用KAFKA协议上报日志到LTS
- 使用Flume采集器上报日志到LTS
- 使用匿名写入采集日志
- 自建中间件
- 日志搜索与分析(默认推荐)
- 日志搜索与分析(管道符方式-邀测)
- 日志可视化
- 日志告警
- 日志转储
- 日志消费与加工
- LTS配置中心管理
- 查看LTS审计事件
- 最佳实践
- 开发指南
- API参考
- SDK参考
- 场景代码示例
- 常见问题
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
提取字符串动态键值对
本文档介绍如何使用不同方案提取字符串键值对。
常用方案比较
字符串动态键值对提取分为关键字提取、值提取、关键字加工和值加工,常用方案为采用e_kv函数、e_kv_delimit函数和e_regex函数等。不同提取场景的三种方案如下:
方案 |
关键字提取 |
值提取 |
关键字加工 |
值加工 |
---|---|---|---|---|
e_kv |
使用特定正则表达式 |
支持默认的字符集、特定分隔符或者带(、)或(")分隔 |
支持前后缀 |
支持文本escape |
e_kv_delimit |
使用特定正则表达式 |
使用分隔符 |
支持前后缀 |
默认无 |
e_regex |
组合自定义正则表达式和默认字符集过滤 |
完全自定义 |
自定义 |
自定义 |
大部分键值对的提取使用e_kv函数并配置特定参数就可以很好地满足,尤其是带括字符和反斜杠需要提取并转义时。其他复杂或高级的场景可以用e_regex函数来提取。部分特定场景下的键值对使用e_kv_delimit函数会更简单。
关键字提取
- 示例1
以k1: q=asd&a=1&b=2&__1__=3日志为例,如果要对该格式的日志作为关键字和值提取,三种方案如下:
- e_kv函数
- 原始日志
{ "k1":"q=asd&a=1&b=2&__1__=3" }
- 加工规则
e_kv("k1")
- 加工结果
{ "q": "asd", "a": 1, "b": 2, "k1": "q=asd&a=1&b=2&__1__=3", "__1__": 3 }
- 原始日志
- e_kv_delimit函数
- 原始日志
{ "k1":"q=asd&a=1&b=2&__1__=3" }
- 加工规则
# 以&分隔键值后,用&分隔提取出关键字 e_kv_delimit("k1", pair_sep=r"&")
- 加工结果
{ "q": "asd", "a": 1, "b": 2, "k1": "q=asd&a=1&b=2&__1__=3", "__1__": 3 }
- 原始日志
- e_regex函数
- 原始日志
{ "k1":"q=asd&a=1&b=2&__1__=3" }
- 加工规则
# 自行指定字符集提取关键字和值 e_regex("k1",r"(\w+)=([a-zA-Z0-9]+)",{r"\1": r"\2"})
- 加工结果
{ "q": "asd", "a": 1, "b": 2, "k1": "q=asd&a=1&b=2&__1__=3", "__1__": 3 }
- 原始日志
- e_kv函数
- 示例2
以content:k1=v1&k2=v2?k3:v3为例,需要特定正则提取关键字,方案如下:
- e_kv_delimit函数
- 原始日志
{ "content":"k1=v1&k2=v2?k3:v3" }
- 加工规则
e_kv_delimit("content",pair_sep=r"&?",kv_sep="(?:=|:)")
- 加工结果
{ "k1": "v1", "k2": "v2", "k3": "v3", "content": "k1=v1&k2=v2?k3:v3" }
- 原始日志
- e_regex函数
- 原始日志
{ "content":"k1=v1&k2=v2?k3:v3" }
- 加工规则
e_regex("content",r"([a-zA-Z0-9]+)[=|:]([a-zA-Z0-9]+)",{r"\1": r"\2"})
- 加工结果
{ "k1": "v1", "k2": "v2", "k3": "v3", "content": "k1=v1&k2=v2?k3:v3" }
- 原始日志
- e_kv_delimit函数
值提取
- 动态键值对之间以及关键字与值之间有明确标识,如a=b或a="cxxx"日志格式的,推荐用e_kv函数,示例如下。
- 原始日志
{ "content":"k=\"helloworld\",the change world, k2=\"good\"" }
- 加工规则
这种情况下使用e_kv函数,提取内容不包括the change world:
e_kv("content") # e_regex函数写法 e_regex("content",r"(\w+)=\"(\w+)",{r"\1": r"\2"})
- 加工结果:提取后的日志为:
{ "k2": "good", "k": "helloworld", "content": "k=\"helloworld\",the change world, k2=\"good\"" }
- 原始日志
- 对带"的日志格式content:k1="v1=1"&k2=v2?k3=v3,推荐使用e_kv函数进行提取,例如:
关键字加工
- e_kv函数和e_kv_delimit函数都可以通过prefix="", suffix=""对关键字和值进行加工。
- 原始日志
{ "content":"q=asd&a=1&b=2" }
- 加工规则(各语句分开执行,功能相同)
e_kv("content", sep="=", quote='"', prefix="start_", suffix="_end") e_kv_delimit("content", pair_sep=r"&", kv_sep="=", prefix="start_", suffix="_end") e_regex("content",r"(\w+)=([a-zA-Z0-9]+)",{r"start_\1_end": r"\2"})
- 加工结果
{ "start_b_end": 2, "start_a_end": 1, "start_q_end": "asd", "content": "q=asd&a=1&b=2" }
- 原始日志
- e_regex函数对关键字加工的能力更强,例如:
父主题: 文本解析