日志字段动态增加时,手动维护完整的字段索引配置成本高且易遗漏。自动发现字段索引功能持续识别新写入日志中尚未配置字段索引的字段,并自动创建 text 类型字段索引,无需事先枚举所有字段即可支持查询和 SQL 分析。
背景信息
使用字段索引时,通常需要事先确定字段名称,并为每个字段配置索引类型、分词和统计等属性。但以下场景难以提前维护完整的字段索引配置:
日志字段数量较多,事先无法获取完整的字段列表。
业务持续迭代,日志中会不断增加新字段,手动更新索引配置的维护成本较高。
部分字段只在特定场景出现,可能不会出现在一开始用于自动生成索引的日志样本中。
这类场景下,用户往往到需要分析时,才发现某些字段没有索引。新创建索引仅对新写入数据生效,重建索引有时间范围限制,历史没有索引的数据分析起来非常不便。
针对上述问题,日志服务提供自动发现字段索引功能。开启该功能后,日志服务会持续识别新写入日志中未配置字段索引的顶层字段,自动创建 text 类型字段索引并开启统计。字段生效后,可以使用 字段名:字段值 进行字段查询,也可以通过 SQL 语句进行过滤、分组和聚合分析。该功能对应的控制台开关名称为非指定字段自动发现,已发现的字段显示在索引配置页面的自动探测字段区域。
非指定字段自动发现与控制台页面上的自动生成索引不是同一个功能。自动生成索引根据预览日志一次性生成推荐的字段索引配置,经用户确认后保存;非指定字段自动发现开启后,会持续发现新写入的新字段并直接自动创建字段索引。创建索引的完整操作参见创建索引。
功能优势
优势 | 说明 |
降低维护成本 | 无需事先枚举全部字段,也无需在每次新增日志字段后立即手动更新索引配置。 |
持续适应字段变化 | 功能开启后持续发现后续新写入日志中的字段,不局限于开启索引时的日志样本。 |
减少历史数据索引缺口 | 新字段随日志写入时及时发现并创建索引,减少因发现不及时导致部分历史数据无法通过索引查询和分析的问题。 |
支持快速查询和分析 | 自动发现字段使用字段索引进行查询,并支持 SQL 统计分析。 |
支持精细化配置 | 对于需要数值范围查询、特定分词方式或其他类型的稳定字段,可以进一步将其配置为指定字段索引。 |
前提条件
自动发现字段索引功能灰度开放中,如有使用需求,请提交工单联系开启。
已创建标准型(Standard)LogStore。查询型(Query)LogStore 不支持自动发现字段索引。
已为 LogStore 开启全文索引。自动发现字段索引依赖全文索引配置。具体操作参见创建索引。
当前账号具备修改 LogStore 索引配置的权限。
开启自动发现字段索引
登录日志服务控制台。
单击 Project 列表中的目标 Project。
选择页签,单击目标 LogStore。
查询和分析页面,选择。
如果尚未创建索引,请先单击开启索引,并确保全文索引已开启。
勾选非指定字段自动发现(需开启全文索引)开关,然后单击确定。
开启后,日志服务会持续检查新写入日志中的顶层字段。对于尚未配置字段索引的字段,系统会自动创建 text 类型字段索引,字段属性(是否大小写敏感、分词符、是否包含中文)继承全文索引配置,并自动开启统计。
查看自动探测字段
自动发现并创建的字段索引显示在索引配置页面的自动探测字段区域,独立于上方的指定字段查询区域。自动探测字段已创建索引数据,可以直接用于查询和分析:
字段查询:使用
字段名:字段值语法进行查询。快速分析:查询页面左侧字段列表中可查看字段值分布。
SQL 分析:通过 SQL 语句对字段进行过滤、分组和聚合分析。
将自动探测字段提升为指定字段索引
如需修改自动探测字段的类型、大小写敏感、分词符或是否包含中文等属性,可以将其提升为指定字段索引。
索引配置页面的自动探测字段区域,单击目标字段旁的 + 图标。该字段移动到上方的指定字段查询区域。
根据需要修改字段的数据类型和索引属性,然后单击确定。
提升为指定字段索引后,可以将字段类型设置为 long、double 或 JSON 等类型。各字段数据类型的说明参见数据类型。
SQL 中的数值类型转换
自动探测字段索引配置中始终为 text 类型。执行 SQL 分析时,当数值意图明确(例如 sum(order_amount) 或 order_amount > 3),SQL 引擎会尝试将字段值转换为目标数值类型;无法转换的值按 NULL 处理。该行为不会修改字段的索引类型,能够按字符串执行的表达式仍保留字符串语义。
* | SELECT product_category, sum(order_amount) AS total GROUP BY product_category纯索引查询不支持数值范围比较(如 key > 3),只能按文本方式匹配。如需数值范围查询,建议将字段提升为指定字段索引并设置为 long 或 double 类型。
使用限制
限制项 | 说明 |
字段层级 | 仅自动发现日志的顶层字段,不自动展开 JSON 字符串中的子字段。JSON 子字段请手动配置 JSON 类型字段索引。 |
字段类型 | 自动索引字段统一为 text 类型。需要 long、double 或 JSON 类型时,请手动配置字段索引。 |
字段名长度 | 字段名长度不能超过 128 个字符。 |
字段名字符 | 字段名只能包含英文字母、数字和 |
字段数量 | 单个 Logstore 最多自动创建 1024 个字段索引。达到上限后不再发现新字段。 |
大小写 | 如果日志中存在仅大小写不同的字段名(例如 |
生效范围 | 仅对开启后新写入的数据生效。历史数据需要重建索引。 |
生效时间 | 当日志中出现新字段时,底层会立即生成相应的索引数据,但页面上要看到探测出的字段配置,需要等待数分钟后并刷新页面。 |
字段名以数字开头或包含特殊字符时,SQL 中需要使用双引号包裹。例如:
sql
* | SELECT "service-name", count(*) GROUP BY "service-name"
常见问题
开启自动发现字段索引后,为什么没有发现新字段?
请依次检查以下项目:
Logstore 是否为标准型(Standard)。
是否已经开启全文索引和非指定字段自动发现。
开启后,是否有包含该字段的新日志写入。
字段名是否符合长度和字符限制,且不是系统保留字段。
自动索引字段数量是否已达到上限(1024 个)。
写入后是否已等待数分钟,并刷新索引配置页面。
为什么自动探测字段不能直接进行数值范围查询?
所有自动发现字段均按 text 类型创建,纯索引查询只能按文本方式匹配,不支持 key > 3 这样的数值范围查询。SQL 引擎会对探测字段自动进行数值类型转换,因此可以通过 SQL 使用 * | SELECT xxx WHERE key > 3。对于确定的数值字段,建议将其提升为指定字段索引并配置为 long 或 double 类型。
关闭自动发现字段索引后,已探测出的字段还能查询吗?
可以。关闭开关只停止发现新字段,不会删除已创建的自动探测字段索引,已有字段仍可继续进行查询和分析。
自动发现字段索引如何计费?
自动发现字段索引功能本身不单独收费。开启后,日志服务会自动为新发现的字段创建 text 类型字段索引,相关费用按照现有索引计费规则计算。由于该功能依赖已开启的全文索引,通常不会产生明显的额外费用,实际费用以索引存储量及 Logstore 计费模式为准。