腾讯云日志服务(Cloud Log Service,CLS)现已支持自动配置索引,可以自动识别日志字段并完成索引配置,无需手动配置。
提高效率的同时,避免了手动配置可能出现的人为错误,提高了索引配置准确性,降低了使用门槛和日志维护成本,可以有效解决日志查询过程中索引难以理解、配置和维护的问题。
日志服务配置索引难题
配置索引是使用日志服务查询日志的必要条件,但在实际使用中,其存在一些使用难点,特别是对于初次使用的用户来说尤为明显:
1. 难理解:配置索引时,用户需了解全文索引、键值索引、分词符等概念,这需要一定的学习过程门槛。
2. 难配置:由于日志结构的多样性,准确掌握所有日志结构和对应的字段是一项挑战,可能导致配置索引时遗漏部分字段。掌握所有可能的日志结构和字段是一项复杂的工作,手动配置时工作量大,容易出错,且易遗漏部分字段。
3. 难维护:应用更新可能导致日志结构变化,新增字段时,索引也需相应调整,提高了日志的维护成本。
为解决上述问题,CLS 在索引配置中推出了“自动配置”功能。
“自动配置”使用技巧
如上图,在索引配置中,开启“键值索引”后,再开启“自动配置”功能,即可完成索引配置。CLS 将自动识别日志中的字段,并将它们添加到键值索引中,用户无需手动添加日志字段。
例如以下原始日志:
10.135.46.111 - - [22/Jan/2019:19:19:30 +0800] "GET /my/course/1 HTTP/1.1" 127.0.0.1 200 782 9703 "http://127.0.0.1/course/explore?filter%5Btype%5D=all&filter%5Bprice%5D=all&filter%5BcurrentLevelId%5D=all&orderBy=studentNum" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0" 0.354 0.354
使用 LogListener 采集日志,并使用正则提取模式对日志进行结构化处理,可得到以下日志字段:
body_bytes_sent: 9703http_host: 127.0.0.1http_protocol: HTTP/1.1http_referer: http://127.0.0.1/course/explore?filter%5Btype%5D=all&filter%5Bprice%5D=all&filter%5BcurrentLevelId%5D=all&orderBy=studentNumhttp_user_agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0remote_addr: 10.135.46.111request_length: 782request_method: GETrequest_time: 0.354request_url: /my/course/1status: 200time_local: [22/Jan/2019:19:19:30 +0800]upstream_response_time: 0.354
🌟正则提取模式是一种模式匹配的方式,可以用来从日志中提取有用的信息。当使用LogListener收集日志,并使用正则表达式进行结构化处理后,可以得到一系列的日志字段,这些字段是经过处理后的、更易于理解和分析的日志数据。
如果不使用“自动配置”功能,需手动添加13个字段到键值索引中,过程非常繁琐。使用该功能后,则无需手动添加这些字段。CLS 会自动识别这些字段并确定其类型,完成相关配置,用户可直接使用这些字段进行日志检索和分析。
如果未来日志新增字段,“动态添加字段”功能也将自动添加新字段,无需修改索引配置。
JSON 格式日志“自动配置”使用技巧
当 JSON 日志字段层级深且结构较复杂时,易出现以下问题:
1. 字段数量过多:如果为所有的 JSON 子级字段添加索引,容易导致索引字段数量过多,超出底层限制,导致部分日志写入失败。
2. 字段类型不一致:JSON 日志中部分字段类型可能会频繁变化,有时是字符串,有时是对象),这种不一致性容易导致索引失败。 为避免这些问题,CLS 默认仅对 JSON 日志的第一级字段创建索引。如需为 JSON 中的子级字段创建索引,可手动配置进行调整。
例如以下原始日志共三个字段:
key1:textValuekey2:123key3:{"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 字段下的 ip 字段单独创建索引,可在索引配置中手动将 key3 字段修改为 key3.ip,动态添加字段功能将自动为 key3.ip 及其同级字段创建索引,最终的字段列表为:
字段名称 | 字段类型 | 分词符 | 包含中文 | 开启统计 |
---|---|---|---|---|
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\\ | 包含 | 开启 |
结合上述功能逻辑,用户可以灵活控制需要为哪一层级的 JSON 字段创建索引。
操作手册:点击文末「阅读原文」获取
END
点击「阅读原文」领取操作手册