日志服务(Cloud Log Service,CLS)目前已支持主动订阅自建 Kafka 或腾讯云 CKafka 生产的日志。本文将介绍如何通过 Kafka 数据订阅将日志接入日志服务。
前提条件
已有可用的自建 Kafka 集群或腾讯云 CKafka 集群。
Kafka 版本 > 0.10.2.0。
操作步骤
步骤1:登录控制台
1. 登录 日志服务控制台。
2. 在左侧导航栏中,单击日志主题,进入日志主题管理页面。
步骤2:创建 Kafka 数据订阅任务
1. 在日志主题管理页中,找到目标日志主题,单击日志主题名称,进入日志主题详情页。
2. 在日志主题详情页中, 选择采集配置页签, 找到 Kafka 数据订阅配置。
3. 单击新增,创建 Kafka 数据订阅任务。
步骤3:配置 Kafka 数据订阅任务
1. 在配置集群步骤中, 配置如下参数:
参数 | 是否必填 | 说明 |
Kafka 类型 | 是 | 目标 Kafka 的类型,支持选择腾讯云 Ckafka 或自建 Kafka。 |
Ckafka 实例 | 是 | 若 Kafka 类型选择为腾讯云 CKafka,则需要在下拉框中选择目标 Ckafka 实例 。 |
Kafka Topic 列表 | 是 | 若 Kafka 类型为腾讯云 Ckafka,需在下拉框中单选或多选 Kafka Topic。 若 Kafka 类型为自建 Kafka,需填写单个或多个 Kafka Topic;多个 Topic 通过逗号隔开。 |
消费组 | 否 | 若为空,将自动创建消费组,命名规则为 cls-${taskid}。若不为空,则使用指定的消费组消费。 注意: 若为空,确保 Kafka 集群可自动创建消费组。 若不空,请确保当前指定消费组没有被其他任务消费,否则会导致数据缺失。 |
起始位置 | 是 | 最早:从最早的 offset 开始消费。 最晚:从最新的 offset 开始消费。 注意:起始位置仅支持创建订阅任务时配置,后续不可修改。 |
参数 | 是否必填 | 说明 |
Kafka 类型 | 是 | 目标 Kafka 的类型,支持选择腾讯云 Ckafka 或自建 Kafka。 |
服务地址 | 是 | 若 Kafka 类型选择为自建 Kafka,则需填写目标 Kafka 的公网 IP 地址或域名。 注意:当目标 Kafka 为 CLS Kafka 消费端,建议使用内网 IP 地址或域名。 |
是否需要鉴权 | 是 | 目标 Kafka 集群是否需要鉴权才能访问。 |
协议类型 | 是 | 若目标 Kafka 集群需要鉴权才能访问,则需选择鉴权协议类型: plaintext sasl_plaintext sasl_ssl |
认证机制 | 是 | 若目标 Kafka 集群需要鉴权才能访问,且协议类型为 sasl_plaintext 或 sasl_ssl,则需选择鉴权认证机制: PLAIN SCRAM-SHA-256 SCRAM-SHA-512 |
用户名/密码 | 是 | 若目标 Kafka 集群需要鉴权才能访问,则需填写访问目标 Kafka 集群所需的用户名与密码。 |
Kafka Topic 列表 | 是 | 若 Kafka 类型为腾讯云 Ckafka,需在下拉框中单选或多选 Kafka Topic。 若 Kafka 类型为自建 Kafka,需填写单个或多个 Kafka Topic;多个 Topic 通过逗号隔开。 |
消费组 | 否 | 若为空,将自动创建消费组,命名规则为 cls-${taskid}。若不为空,则使用指定的消费组消费。 注意: 若为空,确保 Kafka 集群可自动创建消费组。 若不空,请确保当前指定消费组没有被其他任务消费,否则会导致数据缺失。 |
起始位置 | 是 | 最早:从最早的 offset 开始消费。 最晚:从最新的 offset 开始消费。 注意:起始位置仅支持创建订阅任务时配置,后续不可修改。 |
2. 完成集群配置之后,可单击预览,如下图所示:
3. 确认集群配置无误后,单击下一步进入订阅规则配置步骤。
4. 在订阅规则配置步骤中,配置如下参数:
参数 | 是否必填 | 说明 |
配置名称 | 是 | Kafka 数据订阅配置名称。 |
数据提取模式 | 是 | |
日志样例 | 是 | 若数据提取模式选择为单行完全正则,需手动填写或自动获取一条日志样例,用于验证正则表达式,并提取键值。 |
正则表达式 | 是 | |
抽取结果 | 是 | 若数据提取模式选择为单行完全正则,需配置或修改基于正则表达式提取出来的字段的字段名。 |
手动验证 | 否 | 若数据提取模式选择为单行完全正则,可选择额外填写单条或多条日志样例来验证正则表达式的正确性。 |
上传解析失败日志 | 是 | 若数据提取模式选择为 JSON 或单行完全正则,若开启上传解析失败日志,在日志解析失败时,LogListener 会上传解析失败的日志;若关闭,则会丢弃解析失败的日志。 |
解析失败日志的键名称 | 是 | 若开启了上传解析失败日志,您可指定一个字段名作为 Key,解析失败的日志将作为您指定字段的 Value 进行上传。 |
编码格式 | 是 | 基于您的日志,您可选择以下两种编码格式: UTF-8 GBK |
使用默认时间 | 是 | 开启后将使用系统当前时间或 Kafka 消息时间戳作为日志的时间戳;关闭则将使用日志中的时间字段作为日志时间戳。 |
默认时间来源 | 是 | 当开启了使用默认时间,您可以选择以下两默认事件作为日志时间戳: 系统当前时间 Kafka 消息时间戳 |
时间字段 | 是 | 当关闭了使用默认时间,且数据提取模式为 JSON 或正则时,您可以指定日志中代表时间的字段名,该字段的值将会用作日志的时间戳。 |
时间提取正则 | 是 | 当关闭了使用默认时间,且数据提取模式单行全文时,您可通过正则表达式定义日志中代表时间的字段。 注意:若正则匹配到多个字段, 将使用第一个。 例子:日志原文为:message with time 2022-08-08 14:20:20,则您可以设置提取时间正则为\\d\\d\\d\\d-\\d\\d-\\d\\d\\d\\d:\\d\\d:\\d\\d |
时间字段格式 | 是 | |
时间字段时区 | 是 | 当关闭了使用默认时间,并确认了日志中的时间字段与格式,需选择以下两种不同的时区标准: UTC (协调世界时) GMT (格林威治标准时间) |
解析失败使用时间 | 是 | 当关闭了使用默认时间,若时间提取正则或时间字段格式解析失败,支持用户选择以下两种默认时间代替作为日志时间戳: 系统当前时间 Kafka 消息时间戳 |
Kafka 元数据 | 否 | 支持勾选以下4种 Kafka 相关元数据与日志一起上传: kafka_topic kafka_partition kafka_offset kafka_timestamp 注意: 若日志原文中存在与以上元数据同名的字段,将会被覆盖。 |
5. 完成订阅规则配置后,您可单击预览,预览导出结果。如下图所示:
如您需要对采集到的 CLS 日志进一步处理,如结构化、脱敏、过滤,然后再写入日志主题,您可点击页面下方的数据加工,添加数据加工,最后配置索引。
6. 预览无误后, 单击下一步,进入索引配置步骤。
7. 在索引配置页面,设置如下信息。
索引状态:确认是否开启。
注意
若要对日志进行检索,索引状态需未开启,否则无法检索日志。
全文索引:全文索引将日志全文整体切分为多个分词进行索引构建,检索时直接通过关键词进行检索(即全文检索),例如使用
error
检索所有出现过 error 的日志。配置项 | 功能描述 |
全文分词符 | 对原始日志进行分词的字符集合,仅支持英文符号,控制台默认分词符为 @&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\ 。 |
大小写敏感 | 检索时是否对大小写敏感。例如日志为 Error,若大小写敏感,则使用 error 无法检索到该条日志。 |
是否包含中文 | 日志中包含中文且需要对中文进行检索时可开启该功能。例如日志为“用户登录接口超时”,若未开启该功能,搜索 "超时" 无法检索到该日志,只有完整地搜索"用户登录接口超时" 才能检索到该日志,开启该功能后便可通过搜索“超时”检索到该日志。 |
键值索引:键值索引将原始日志按字段(即 key:value)分别切分为多个分词进行索引构建,检索时基于键值方式进行检索(即键值检索),例如使用
level:error AND timeCost:>1000
检索日志级别(level)为 error 且耗时(timeCost)大于 1000ms 的日志。某些日志中还包含一类特殊的“元数据字段”,这类字段配置索引的方式与普通字段一致。配置项 | 功能描述 |
字段名称 | 字段名称,单个日志主题键值索引最多可添加300个字段。 仅支持字母、数字、下划线和-./@,且不能以下划线开头。 |
字段类型 | 字段的数据类型,包括 text、long、double 三种类型。 text 类型支持使用通配符进行模糊检索,不支持范围比较。 long、double 类型支持范围比较,不支持模糊检索。 |
分词符 | 对字段值进行分词的字符集合,仅支持英文符号,控制台默认分词符为 @&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\ 。 |
包含中文 | 字段中包含中文且需要对中文进行检索时可开启该功能。例如日志为“message:用户登录接口超时”,若未开启该功能,使用 message:"超时" 无法检索到该日志,只有使用message:"用户登录接口超时" 才能检索到该日志,开启该功能后便可使用message:"超时" 检索该日志。 |
开启统计 | 开启后可对该字段使用 SQL 进行统计分析,text 类型字段开启统计时,如果值过长,仅前32766个字符参与统计运算。 开启统计不会额外产生费用,建议您开启。 |
大小写敏感 | 检索时是否对大小写敏感例如日志为“level:Error”,若大小写敏感,则使用 level:error 无法检索到该条日志。 |
8. 索引相关的更多详情,请参见 索引配置。
9. 完成索引配置后,单击提交,即可完成 Kafka 数据订阅任务的创建。
步骤4:查看 Kafka 数据订阅任务
完成 Kafka 数据订阅任务后,您可在日志主题详情页 > 采集配置页签中找到所有已创建的 Kafka 数据订阅任务。
步骤5:检索分析日志
完成 Kafka 数据订阅任务后,即可开始使用日志的检索与分析,以及更高阶的仪表盘告警等功能了。
检索分析
监控告警
仪表盘
数据加工
规格与限制
最佳实践
附录
正则表达式自动生成
1. 在弹出的正则表达式自动生成模态视图中,根据实际的检索分析需求,选中需要提取 key-value 的日志内容,并在弹出的文本框中,输入键(key)名,单击确认提取。如下图所示:
系统将自动对该部分内容提取一个正则表达式,自动提取结果会出现在 key-value 表格中。如下图所示:
2. 重复步骤1,直到提取完所有的 key-value 对。 如下图所示:
3. 单击确定,系统将根据提取好的 key-value 对自动生成完整的正则表达式。 如下图所示:
数据提取模式
Kafka 数据订阅提供多种解析方式,如下表所示:
假设您的一条 JSON 日志原始数据为:
{"remote_ip":"10.135.46.111","time_local":"22/Jan/2019:19:19:34 +0800","body_sent":23,"responsetime":0.232,"upstreamtime":"0.232","upstreamhost":"unix:/tmp/php-cgi.sock","http_host":"127.0.0.1","method":"POST","url":"/event/dispatch","request":"POST /event/dispatch HTTP/1.1","xff":"-","referer":"http://127.0.0.1/my/course/4","agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0","response_code":"200"}
经过日志服务结构化处理后,该条日志将变为如下:
agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0body_sent: 23http_host: 127.0.0.1method: POSTreferer: http://127.0.0.1/my/course/4remote_ip: 10.135.46.111request: POST /event/dispatch HTTP/1.1response_code: 200responsetime: 0.232time_local: 22/Jan/2019:19:19:34 +0800upstreamhost: unix:/tmp/php-cgi.sockupstreamtime: 0.232url: /event/dispatchxff: -
单行全文日志是指一行日志内容为一条完整的日志。日志服务在采集的时候,将使用换行符 \\n 来作为一条日志的结束符。为了统一结构化管理,每条日志都会存在一个默认的键值__CONTENT__,但日志数据本身不再进行日志结构化处理,也不会提取日志字段,日志属性的时间项由日志采集的时间决定。
假设一条日志原始数据为:
Tue Jan 22 12:08:15 CST 2019 Installed: libjpeg-turbo-static-1.2.90-6.el7.x86_64
采集到日志服务的数据为:
__CONTENT__:Tue Jan 22 12:08:15 CST 2019 Installed: libjpeg-turbo-static-1.2.90-6.el7.x86_64
单行完全正则格式通常用来处理结构化的日志,指将一条完整日志按正则方式提取多个 key-value 的日志解析模式。
假设一条日志原始数据为:
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
配置的正则表达式为如下:
(\\S+)[^\\[]+(\\[[^:]+:\\d+:\\d+:\\d+\\s\\S+)\\s"(\\w+)\\s(\\S+)\\s([^"]+)"\\s(\\S+)\\s(\\d+)\\s(\\d+)\\s(\\d+)\\s"([^"]+)"\\s"([^"]+)"\\s+(\\S+)\\s(\\S+).*
采集到日志服务的数据为:
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