一、前提条件
·已开通日志服务(Cloud Log Service,CLS),并创建对应资源(如 日志集 和 日志主题)。
·已在 AWS S3存储桶中准备待导入的日志文件,可前往 AWS 控制台 查看。
·已获取可访问目标存储桶的 AWS IAM 用户访问密钥。该 IAM 用户需具备列举目标对象和读取对象的权限(s3:ListBucket 和 s3:GetObject)。
二、规格与限制
请参见 AWS S3 数据导入规格限制。
三、配置流程
1. 选择日志主题:可以选择现有的日志主题或者创建新的日志主题,用于存储从 AWS S3导入到 CLS 的数据。
2. 配置数据源:填写 AWS S3地域、存储桶、访问密钥、文件路径前缀和压缩模式,并预览待导入的数据。
3. 解析配置:配置导入文件的解析格式,目前支持单行全文/多行全文/单行正则/多行正则/JSON/分隔符。
4. 索引配置:配置目前 topic 的索引配置,且检索必须开启索引配置。如果选择已存在的日志主题,则新索引配置只对修改后的数据生效。
四、步骤1:创建/选择日志主题
创建新的日志主题使用现有的日志主题如果你想创建新的日志主题,可执行如下操作:1. 登录 日志服务控制台。2. 在左侧导航栏中,选择概览,进入概览页面。3. 在快速接入中,选择数据导入,找到并单击 AWS S3数据导入,进入采集配置流程。4. 在创建日志主题页面,根据实际需求,输入日志主题名称,配置日志存储时间,选择日志集等信息,单击下一步。如果你想选择现有的日志主题,可执行如下操作:1. 登录 日志服务控制台。2. 在左侧导航栏中,单击日志主题,选择需要导入的日志主题,单击日志主题名称,进入日志主题管理页面。3. 选择采集配置页签,单击新增。4. 选择数据导入,找到并单击 AWS S3数据导入,进入采集配置流程。
五、步骤2:配置数据源
1. 在数据源配置页面,依次配置如下信息:
| 配置项 | 是否必填 | 说明 |
| 任务名称 | 是 | 导入任务的名称,支持字母、数字、_和-。 |
| 任务类型 | 否 | 选择一次性导入或持续性导入。一次性导入适用于单次迁移或验证;持续性导入适用于持续接入后续新增的匹配对象。 |
| 地域 | 是 | AWS S3存储桶所在地域。例如 ap-southeast-1。 |
| 存储桶名称 | 是 | 待导入日志所在的 S3 存储桶名称。例如 example-log-bucket。 |
| 访问密钥 ID(Access Key ID) | 是 | AWS IAM 用户的访问密钥 ID。 |
| 秘密访问密钥(Secret Access Key) | 是 | 与 Access Key ID 对应的秘密访问密钥。可通过登录 AWS 控制台后,右上角点击自己的用户名进入 Security credentials(安全凭证),在 Access keys(访问密钥)中点击 Create access key,创建后立即保存 Access Key ID 和 Secret Access Key。 |
| 自定义端点 | 否 | 不填写时使用 AWS S3标准 Endpoint。如需使用 S3兼容存储或自建端点可在此处填写。 |
| 文件路径前缀 | 否 | 用于限定导入范围。可填写目录前缀,例如 logs/app/;也可填写完整对象路径,例如 logs/app/app.log,留空时匹配存储桶中的全部对象。 |
| 压缩模式 | 否 | 选择与对象实际压缩格式一致的模式。支持 gzip、lzop、snappy、bzip2、zip、zstd、deflate、lz4 (frame)。 |
2. 单击预览,系统会选择符合配置规则的一条路径数据进行展示,并提示输入的文件前缀下共有多少文件。如下:
3. 确认预览无误后,单击下一步。
注意:不同格式无法共用同一解析规则时,请按目录或完整对象路径拆分为多个导入任务。
六、步骤3:解析配置
在解析配置页面,配置如下主要信息:
1. 提取模式:可选择以下几种提取模式。
单行全文单行-完全正则多行全文多行-完全正则JSON分隔符
单行全文日志是指一行日志内容为一条完整的日志。日志服务在采集的时候,将使用换行符 \\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+).*
·采集到日志服务的数据为:
ody_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
配置单行-完全正则模式:
1. 在采集配置页面,将“提取模式”设置为单行-完全正则,并在“日志样例”文本框中,输入日志样例。如下:
2. 根据如下规则,定义正则表达式:
系统有手动模式和自动模式两种方式定义正则表达式。系统会根据你选择的模式以及定义好的正则表达式,提取 key-value 进行正则表达式的验证。
手动模式自动模式你可以手动输入表达式提取 key-value 进行验证:(1)在“正则表达式”的文本框中,输入正则表达式。(2)单击验证,系统将判断日志样例与正则表达式是否匹配。你可以单击自动正则表达式工具切换为自动模式:(1)在弹出的“正则表达式自动生成”模态视图中,根据实际的检索分析需求,鼠标左键选中需要提取 key-value 的日志内容,并在弹出的文本框中,输入键(key)名,单击确认提取。如下:系统将自动对该部分内容提取一个正则表达式,自动提取结果会出现在右侧 key-value 表格中,根据自动提取结果自动生成的提取正则表达式会出现在下侧表格中。如下:(2)重复上述步骤,直到提取完所有的 key-value 对。如下:(3)单击确定,系统将根据提取好的 key-value 对自动生成完整的正则表达式。
注意:说明:
更多日志验证:
1. 当你有多条复杂日志样例数据时,可以将匹配更多日志设置为开启 ,即可验证你的正则表达式样例的通过率。
2. 输入待验证日志样例,以换行符分开多条数据,单击验证,系统将验证样例通过率。出现时,即为验证通过:
多行全文日志是指一条完整的日志数据可能跨占多行(例如 Java stacktrace)。在此情况下,为了能让日志系统明确区分开每条日志,采用首行正则的方式进行匹配。当某行日志匹配上预先设置的正则表达式,就认为是一条日志的开头,而下一个行首出现作为该条日志的结束标识符。
多行全文也会设置一个默认的键值__CONTENT__,但日志数据本身不再进行日志结构化处理,也不会提取日志字段,日志属性的时间项由日志采集的时间决定。
·假设一条多行日志原始数据为:
2019-12-15 17:13:06,043 [main] ERROR com.test.logging.FooFactory:java.lang.NullPointerException at com.test.logging.FooFactory.createFoo(FooFactory.java:15) at com.test.logging.FooFactoryTest.test(FooFactoryTest.java:11)
·首行正则表达式为如下:
\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2},\\d{3}\\s.+
·采集到日志服务的数据为:
__CONTENT__:2019-12-15 17:13:06,043 [main] ERROR com.test.logging.FooFactory:\\njava.lang.NullPointerException\\n at com.test.logging.FooFactory.createFoo(FooFactory.java:15)\\n at com.test.logging.FooFactoryTest.test(FooFactoryTest.java:11)
配置多行全文格式:
1. 在“采集配置”页面,将提取模式设置为多行全文。如下:
2. 根据如下规则,定义正则表达式。你可选择自动生成或者手动输入两种方式定义首行正则表达式,系统会根据样例内容进行正则表达式的验证。
·自动生成:在文本框中,输入日志样例,单击自动生成,系统自动在置灰的文本框中生成行首正则表达式。
·手动输入:在文本框中,输入日志样例,输入首行正则表达式,单击验证,系统将判断表达式是否通过。
配置上传解析失败日志:
建议开启上传解析失败日志。开启后,LogListener 会上传各式解析失败的日志。若关闭上传解析失败日志,则会丢弃失败的日志。
开启后需要配置解析失败的 Key 值(默认为 LogParseFailure),所有解析失败的日志,均以输入内容作为键名称(Key),原始日志内容作为值(Value)进行上传。
·假设你的一条日志原始数据为:
[2018-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened at TestPrintStackTrace.f(TestPrintStackTrace.java:3) at TestPrintStackTrace.g(TestPrintStackTrace.java:7) at TestPrintStackTrace.main(TestPrintStackTrace.java:16)
·行首正则表达式为:
\\[\\d+-\\d+-\\w+:\\d+:\\d+,\\d+]\\s\\[\\w+]\\s.*
·配置的自定义正则表达式为:
\\[(\\d+-\\d+-\\w+:\\d+:\\d+,\\d+)\\]\\s\\[(\\w+)\\]\\s(.*)
·系统根据()捕获组提取对应的 key-value 后,你可以自定义每组的 key 名称如下所示:
time: 2018-10-01T10:30:01,000`level: INFO`msg:java.lang.Exception: exception happened at TestPrintStackTrace.f(TestPrintStackTrace.java:3) at TestPrintStackTrace.g(TestPrintStackTrace.java:7) at TestPrintStackTrace.main(TestPrintStackTrace.java:16)
配置多行-完全正则模式:
1. 在采集配置页面,将提取模式设置为多行-完全正则,并在日志样例文本框中,输入日志样例。如下:
2. 根据如下规则,定义首行正则表达式:你可选择是否开启自动生成方式定义行首正则表达式(不开启可以手动输入),确定跨行日志边界。待表达式验证成功后,系统会为你判断行首正则表达式匹配的日志条数。
·自动生成:开启自动生成,系统自动在置灰的文本框中生成行首正则表达式。如下:
·手动输入:在文本框中,手动输入行首正则表达式,单击验证,系统将判断表达式是否通过。如下:
提取正则表达式:
系统有手动模式和自动模式两种方式定义正则表达式。你可手动输入表达式提取 key-value 进行验证,也可单击正则表达式自动生成切换为自动模式。系统会根据你选择的模式以及定义好的正则表达式,提取 key-value 进行正则表达式的验证。
手动模式自动模式(1)在“提取正则表达式”的文本框中,输入正则表达式。(2)单击验证,系统将判断日志样例与正则表达式是否匹配。(1)在弹出的“正则表达式自动生成”模态视图中,根据实际的检索分析需求,选中需要提取 key-value 的日志内容,并在弹出的文本框中,输入键(key)名,单击确认提取。如下:(2)系统将自动对该部分内容提取一个正则表达式,自动提取结果会出现在 key-value 表格中。如下:(3)重复上述步骤,直到提取完所有的 key-value 对。如下:(4)单击确定,系统将根据提取好的 key-value 对自动生成完整的正则表达式。如下:
注意:说明:
注意:无论选择自动模式还是手动模式,正则提取模式均在完成定义并验证通过后,将提取结果展示在“抽取结果”中。你只需定义每一组 key-value 对的 key 名称,即可将该名称用于日志检索分析。
匹配更多日志:
1. 当你的日志数据复杂时,可以开启匹配更多日志,即可验证你的正则表达式样例的通过率。
2. 输入多个待验证日志样例,单击验证,系统将验证样例通过率。出现时,即为验证通过:
配置日志时间戳来源:
你可选择以日志采集时间或者指定日志字段两种时间作为日志的时间戳:
日志采集时间指定日志字段
使用日志采集的时间作为日志时间。
使用日志中指定字段的值作为日志的时间。
·在日志时间字段中选择已经提取的 Value 值作为日志时间。
·在时间格式解析中手动输入或选择该值对应的解析表达式。例如:日志中代表时间的值为 07/Jul/2025:19:19:30 +0800,解析格式为:%d/%b/%Y :%H:%M:%S %z。更多请参见 配置时间格式。
·单击验证。
注意:若时间格式填写错误,日志时间将以采集时间为准。
配置上传解析失败日志:
建议开启上传解析失败日志。开启后,LogListener 会上传各式解析失败的日志。若关闭上传解析失败日志,则会丢弃失败的日志。
开启后需要配置解析失败的 Key 值(默认为 LogParseFailure),所有解析失败的日志,均以输入内容作为键名称(Key),原始日志内容作为值(Value)进行上传。
·假设你的一条 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: –
配置日志时间戳来源:
日志采集时间指定日志字段
使用日志采集的时间作为日志时间。
使用日志中指定字段的值作为日志的时间。
·在日志时间字段中手动输入 JSON 中指定的时间字段作为日志时间。
·在时间格式解析中手动输入或选择该值对应的解析表达式。例如:日志中代表时间的值为 07/Jul/2025:19:19:30 +0800,解析格式为:%d/%b/%Y :%H:%M:%S %z。更多请参见 配置时间格式。
·单击验证。
注意:若时间格式填写错误,日志时间将以采集时间为准。
配置上传解析失败日志:
建议开启上传解析失败日志。开启后,LogListener 会上传各式解析失败的日志。若关闭上传解析失败日志,则会丢弃失败的日志。
开启后需要配置解析失败的 Key 值(默认为 LogParseFailure),所有解析失败的日志,均以输入内容作为键名称(Key),原始日志内容作为值(Value)进行上传。
·假设你的一条日志原始数据为:
10.20.20.10 – ::: [Tue Jan 22 14:49:45 CST 2019 +0800] ::: GET /online/sample HTTP/1.1 ::: 127.0.0.1 ::: 200 ::: 647 ::: 35 ::: http://127.0.0.1/
·当日志解析的分隔符指定为:::,该条日志会被分割成八个字段,并为这八个字段定义唯一的 key,如下所示:
IP: 10.20.20.10 -bytes: 35host: 127.0.0.1length: 647referer: http://127.0.0.1/request: GET /online/sample HTTP/1.1status: 200time: [Tue Jan 22 14:49:45 CST 2019 +0800]
配置分隔符模式:
1. 将“提取模式”设置为分隔符。
2. 选择分隔符,并在“日志样例”文本框中,输入日志样例,单击提取。
系统根据确定的分隔符将日志样例进行切分,并展示在抽取结果栏中,你需要为每个字段定义唯一的 key。目前,日志采集支持多种分隔符,常见的分隔符有:空格、制表符、逗号、分号、竖线,若你的日志数据所采用的分隔符是其他符号,例如 ::: ,也可以通过自定义分词符进行解析。
配置日志时间戳来源:
日志采集时间指定日志字段
使用日志采集的时间作为日志时间。
使用日志中指定字段的值作为日志的时间。
·在日志时间字段中选择已经提取的 Value 值作为日志时间。
·在时间格式解析中手动输入或选择该值对应的解析表达式。例如:日志中代表时间的值为 07/Jul/2025:19:19:30 +0800,解析格式为:%d/%b/%Y :%H:%M:%S %z。更多请参见 配置时间格式。
·单击验证。
注意:若时间格式填写错误,日志时间将以采集时间为准。
配置上传解析失败日志:
建议开启上传解析失败日志。开启后,LogListener 会上传各式解析失败的日志。若关闭上传解析失败日志,则会丢弃失败的日志。
开启后需要配置解析失败的 Key 值(默认为 LogParseFailure),所有解析失败的日志,均以输入内容作为键名称(Key),原始日志内容作为值(Value)进行上传。
2. 过滤器:
·过滤器可以帮助你根据业务需要添加日志采集过滤规则,为你筛选出有价值的日志数据。过滤规则为 Perl 正则表达式,所创建的过滤规则为命中规则,即匹配上正则表达式的日志才会被采集上报。
·分隔符格式日志需要根据所自定义的键值对来配置过滤规则。例如,样例日志使用分隔符模式解析后,你希望 status 字段为 400 或 500 的所有日志数据被采集,那么 key 处配置 status,过滤规则处配置 400|500。
3. 元数据:包括 bucket(存储桶名称)和 object(完整对象路径)两种类型。选中元数据将以 __TAG__.{元数据}:xxx 的形式与日志一起导入。如:__TAG__.object: csv/object.gz。
4. 如你需要对采集到的 CLS 日志进一步处理,如结构化、脱敏、过滤,然后再写入日志主题,你可单击页面下方的数据加工,添加数据加工,最后配置索引。
·数据加工相关操作请参见 创建加工任务 文档中【前置数据加工】TAB 页面。
·数据加工脚本的编写请参见 数据加工函数总览,或者 加工实战案例。
·数据加工会产生费用,详情请参见 计费概述。
5. 单击下一步。
七、步骤4:索引配置
1. 在索引配置页面,设置如下信息。配置详情请参见 索引配置。
注意:检索必须开启索引配置,否则无法检索。
2. 单击提交,进入编辑索引配置确认页面。单击确定。
如果你设置的索引配置仅需对新写入的日志生效,单击确定。如果你想对历史数据使配置生效,单击确定后,详情请参见 重建索引,做进一步设置。
3. 操作成功,完成采集配置。