有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

操作场景

索引配置是使用日志服务(Cloud Log Service,CLS)进行检索分析的必要条件,只有开启索引才能对日志进行检索分析。而且不同的索引规则也会产生不同的日志检索分析效果,本文档会详细介绍索引的配置规则及原理。

功能介绍

索引配置的核心是对原始日志进行“分词”,以快速且便捷地根据特定的检索条件检索日志。同时在索引配置中还可以针对特定的字段“开启统计”,便于使用 SQL 对日志进行统计分析。
检索一个较长的日志时,通常只使用其中一部分内容进行检索。例如:需要检索出包含sample的如下完整日志:
10.20.20.10;[2018-07-16 13:12:57];GET /online/sample HTTP/1.1;200
由于日志全文很长,除sample外还有很多其他内容,其与检索条件并不是直接相等,因此不能直接使用sample作为检索条件来检索该日志。为满足该检索需求,需要将日志全文切分为多个片段,每个片段称之为一个“词”,而这个过程称之为“分词”。
例如:按符号对上述示例日志进行切分,只要出现了@&()='",;:<>[]{}/ \\n\\t\\r\\\\范围内的符号,就切分日志,将得到如下的词:


检索条件为sample时,上述分词后的日志包含sample,即认为符合检索条件。
检索条件本身也会进行分词,例如下图2种检索条件:


检索条件A:"/online/sample"
双引号表示日志需同时存在这两个词,且两个词顺序严格一致才符合检索条件。
上述示例日志同时包含onlinesample,且词的顺序与检索条件一致,符合该检索条件。
检索条件B:"/online/login"
上述示例日志不包含login不符合该检索条件。
日志服务包含以下两类索引:
类别
描述
全文索引
全文索引将日志全文整体切分为多个分词进行索引构建,检索时直接通过关键词进行检索(即全文检索),例如使用error检索所有出现过 error 的日志。
键值索引
键值索引将原始日志按字段(即 key:value)分别切分为多个分词进行索引构建,检索时基于键值方式进行检索(即键值检索),例如使用level:error AND timeCost:>1000检索日志级别(level)为 error 且耗时(timeCost)大于 1000ms 的日志。
某些日志中还包含一类特殊的“元数据字段”,这类字段配置索引的方式与普通字段一致。
注意
索引配置较为复杂,建议您使用 操作步骤 中的推荐配置,能够满足大多数使用需求。
索引关闭时采集的日志数据无法被检索,从开启索引到支持日志检索分析存在约一分钟延迟。
索引规则编辑(包括新增/编辑/删除字段、调整分词符配置等在内的所有操作)后仅对新写入的日志生效,已有数据不会更新。
下划线开头为系统保留用法,若您的日志中包含下划线开头的字段,开启索引后,将会在字段前加上@符号。
低频存储 仅支持全文索引,不支持键值索引。

全文索引

配置项
功能描述
全文分词符
对原始日志进行分词的字符集合,仅支持英文符号,控制台默认分词符为@&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
大小写敏感
检索时是否对大小写敏感。例如日志为 Error,若大小写敏感,则使用 error 无法检索到该条日志。
是否包含中文
日志中包含中文且需要对中文进行检索时可开启该功能。例如日志为“用户登录接口超时”,若未开启该功能,搜索"超时"无法检索到该日志,只有完整地搜索"用户登录接口超时"才能检索到该日志,开启该功能后便可通过搜索“超时”检索到该日志。

键值索引

配置项
功能描述
整体配置
大小写敏感
检索时是否对大小写敏感。例如日志为“level:Error”,若大小写敏感,则使用level:error无法检索到该条日志。
自动配置
是否启用键值索引自动配置,启用后将自动将日志内的字段添加到键值索引中,包括日志中后续新增的字段。字段添加规则详见 自动配置
字段配置
字段名称
结构化日志 中的字段名称,单个日志主题键值索引最多可添加300个字段。
仅支持字母、数字及_-./@,且不能以_开头(__CONTENT__字段例外)。
不允许同时包含 JSON 父子级字段,例如aa.b
字段别名
使用别名代替原始字段名称进行检索分析,例如为__SOURCE__字段添加别名ip
别名仅支持字母、数字和下划线,且需以字母开头。
仅支持 CQL 语法,不支持 Lucene 语法。
字段类型
字段的数据类型,包括 text、long、double 三种类型。
text 类型支持使用通配符进行模糊检索,不支持范围比较。
long、double 类型支持范围比较,不支持模糊检索。
分词符
对字段值进行分词的字符集合,仅支持英文符号,控制台默认分词符为@&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
包含中文
字段中包含中文且需要对中文进行检索时可开启该功能。例如日志为“message:用户登录接口超时”,若未开启该功能,使用message:"超时"无法检索到该日志,只有使用message:"用户登录接口超时"才能检索到该日志,开启该功能后便可使用message:"超时"检索该日志。
开启统计
开启后可对该字段使用 SQL 进行统计分析,text 类型字段开启统计时,如果值过长,仅前32766个字符参与统计运算。
开启统计不会额外产生费用,建议您开启。
说明:
已开启全文索引时,键值索引不产生任何额外索引流量/存储费用,建议您尽量多地为字段开启键值索引,以获得更好的检索分析体验。
为满足最基本的日志检索要求,日志服务针对日志中部分内置保留字段自动创建了键值索引,但不会产生索引流量,不会增加费用,具体如下:
内置保留字段
说明
键值索引配置
__FILENAME__
日志采集的文件名,可以利用该字段检索特定文件下的日志,例如__FILENAME__:"/var/log/access.log" 检索 /var/log/access.log 文件的日志。
text 类型、无分词符、不包含中文、已开启统计
__SOURCE__
日志采集的源 IP,可以利用该字段检索特定机器下的日志,例如 __SOURCE__:192.168.10.10 检索192.168.10.10 机器的日志。
text 类型、无分词符、不包含中文、已开启统计
__HOSTNAME__
日志来源机器名称,可以利用该字段检索特定机器下的日志,例如
__HOSTNAME__:localhost 检索 localhost机器的日志。
注意:需使用2.7.4及以上版本的 Loglistener 才会采集该字段。
text 类型、无分词符、不包含中文、已开启统计
__TIMESTAMP__
日志时间戳(毫秒级别 Unix 时间戳),按时间范围检索日志时,将自动使用该时间对日志进行检索,无需在检索语句中指定。在控制台显示为“日志时间”。
long 类型,已开启统计
__INDEX_STATUS__
值非空时代表当前日志创建索引出现异常,原始日志被存储在__RAWLOG__中,__INDEX_STATUS__为创建索引异常原因。
使用__INDEX_STATUS__:*可以查询所有索引创建异常的日志。
text 类型、无分词符、不包含中文、已开启统计

自动配置

开启自动配置开关后,将自动把日志内的字段添加到键值索引字段列表中,包括日志中新增的字段。
添加字段时,将根据字段值自动判断字段类型,将字段类型设置为 text、long 或 double,并使用如下配置。如果以下配置不满足使用需求(例如字段类型不正确),可在添加后的字段上手动修改。
字段类型
分词符
包含中文
开启统计
text
@&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
包含
开启
long
不涉及
不涉及
开启
double
不涉及
不涉及
开启
说明:
日志字段名称仅支持字母、数字、下划线和-./@,且不能以下划线开头,不符合该规则的字段不会添加到键值索引字段列表中。
日志字段为 json 字符串时,默认不会解析 json。如需将 json 中的子级字段添加至键值索引,请手动添加其中的任意子级字段,后续将自动把该子级字段的同级别字段添加到键值索引字段列表中。
例如原始日志共三个字段:
key1:textValue
key2:123
key3:{"ip":"123.123.123.132","url":"class/132.html","detail":{"status_code":"500","id":13}}
自动添加的键值索引字段列表为:
字段名称
字段类型
分词符
包含中文
开启统计
key1
text
@&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
包含
开启
key2
long
不涉及
不涉及
开启
key3
text
@&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
包含
开启
如果手动将字段 key3 修改为 key3.ip,将自动把 ip 同级的字段 url 及 detail 添加到键值索引字段列表中,最终的列表为:
字段名称
字段类型
分词符
包含中文
开启统计
key1
text
@&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
包含
开启
key2
long
不涉及
不涉及
开启
key3.ip
text
@&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
包含
开启
key3.url
text
@&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
包含
开启
key3.detail
text
@&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
包含
开启

高级设置

为满足部分特殊使用场景,索引配置提供如下高级设置。实际使用过程中,建议您采用推荐配置。通过控制台新建索引配置时,也会默认采用推荐配置。
配置项
含义
推荐配置
内置保留字段包含至全文索引
包含:全文索引包含__FILENAME____HOSTNAME____SOURCE__这三个内置字段,同时支持全文检索及键值检索,例如"/var/log/access.log"__FILENAME__:"/var/log/access.log"
不包含:全文索引不包含上述三个内置字段,只能使用键值检索,例如__FILENAME__:"/var/log/access.log"
包含
元数据字段包含至全文索引
包含:全文索引包含所有元数据字段(前缀为__TAG__的字段),可直接使用全文检索的方式检索相关日志字段,例如ap-beijing
不包含:全文索引不包含任何元数据字段,只能使用键值检索的方式检索相关日志字段,例如__TAG__.region:ap-beijing。低频日志主题不支持键值检索,此时将无法检索这些字段。
仅包含开启键值索引元数据字段:全文索引包含开启了键值索引的元数据字段,不包含未开启键值索引的元数据字段,低频日志主题无该选项。
包含
日志创建索引异常存储规则
日志创建索引过程中如果出现异常,CLS 为了确保日志不丢失,会将原始日志存储在__RAWLOG__中。如果此时仅部分字段创建索引失败,可将失败的部分存储在指定字段中(默认为 RAWLOG_FAIL_PART),详见 创建索引出现异常是什么意思?
启用

操作步骤

编辑索引配置

2. 在左侧导航栏中,单击日志主题,进入日志主题列表页。
3. 单击需要配置索引的日志主题 ID/名称,进入日志主题管理页。
4. 选择索引配置然后单击编辑,进入编辑索引配置页面。



配置项
推荐配置
说明
索引状态
整体开关
开启
不开启时无法检索日志,开启后会产生索引流量、索引存储及相应费用。
全文索引
整体开关
开启
配置项说明详见 全文索引
大小写敏感
不开启
全文分词符
@&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
是否包含中文
开启
键值索引
整体开关
开启
已开启全文索引时,键值索引不会产生额外费用。
大小敏感
不开启
检索时是否对大小写敏感。例如日志为“level:Error”,若大小写敏感,则使用 level:error无法检索到该条日志。
自动配置
开启
将自动把日志内的字段添加到键值索引字段列表中,包括日志中新增的字段。
字段添加规则详见 自动配置
字段列表
无需手动添加
开启“自动配置”时,将自动根据日志获取字段列表,因此无需手动添加字段。
如需手动添加字段,对应配置项说明详见 键值索引

导入索引配置

2. 在左侧导航栏中,单击日志主题,进入日志主题列表页。
3. 单击需要配置索引的日志主题 ID/名称,进入日志主题管理页。
4. 选择索引配置页签,单击导入配置规则



5. 在对话框中,选择需要导入的日志主题索引配置,单击确定,将选中的日志主题的索引配置填写至当前日志主题的索引配置中。
6. 确认无误后,单击确定,即可保存当前日志主题的索引配置。

费用说明

开启索引后会产生索引流量及索引存储费用,详见 计费概述。如需降低相关费用,可参见 节省产品使用成本

规格与限制

索引的规格与限制,请参见 规格与限制

常见问题

创建索引出现异常是什么意思?__RAWLOG__及__INDEX_STATUS__是什么?

日志创建索引过程中,如果原始日志格式异常或索引配置与原始日志不匹配,可能会导致日志
创建索引异常
,此时 CLS 为了确保日志不丢失,会将原始日志存储在__RAWLOG__中,作为兜底的异常处理方式。__INDEX_STATUS__则为创建索引异常的原因。
__RAWLOG__仅支持全文检索(需开启全文索引),不支持键值检索、键值索引和统计分析。
__INDEX_STATUS__支持全文检索及键值检索,使用__INDEX_STATUS__:*可以查询所有索引创建异常的日志。
说明:
产生异常的日志,开启全文索引后,仍按照原始日志全文计算索引流量、索引存储及对应费用,不产生额外费用。
创建索引异常包含两类情况:
1. 日志中所有的字段均未按照索引配置成功创建索引,此时日志中仅具备__RAWLOG__字段,只能使用全文检索。


2. 日志中部分字段未成功创建索引,部分字段成功创建索引,此时日志中既具备__RAWLOG__字段,又具备创建索引成功的部分字段。


索引配置-高级设置中还可以将异常部分的字段存储在指定字段中(默认为 RAWLOG_FAIL_PART,支持配置键值索引及统计分析)。



CLS 会不断优化索引配置对原始日志的兼容性,尽量避免日志出现上述异常情况。随着产品迭代升级,具体的异常处理规则可能会发生变化。