导入Amazon S3文件

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

阿里云日志服务SLS支持导入Amazon S3中的日志文件。您可以通过数据导入的方式将Amazon S3的日志文件导入到阿里云的日志服务,实现日志的查询分析、加工等操作。目前日志服务只支持导入单个大小不超过5 GB的S3文件,压缩文件大小按照压缩后的大小计算。

前提条件

  • 已上传日志文件到S3中。

  • 已创建Project和Logstore。具体操作,请参见创建项目Project创建Logstore

  • 自定义权限:参见如下示例,创建具备操作S3资源权限的自定义权限策略。具体操作,请参见AWS创建自定义权限

    说明

    S3配置自定义权限后,才可以将S3的文件导入到日志服务。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::your_bucket_name",
            "arn:aws:s3:::your_bucket_name/*"
          ]
        }
      ]
    }

创建数据导入配置

  1. 登录日志服务控制台

  2. 接入数据区域的数据导入页签中,选择S3-数据导入

  3. 选择目标Project和Logstore,单击下一步

  4. 设置导入配置。

    1. 导入配置步骤中,设置如下参数。

      参数

      说明

      任务名称

      SLS任务的唯一名称。

      显示名称

      任务显示名称。

      任务描述

      导入任务的描述。

      S3区域

      待导入的文件所在Bucket的地域。

      AWS AccessKey ID

      用于访问AWS的AWS AccessKey ID。

      重要

      请确保您的AccessKey具有访问AWS相应资源的权限。

      AWS Secret AccessKey

      用于访问AWS的AWS Secret AccessKey。

      文件路径前缀过滤

      通过文件路径前缀过滤S3文件,用于准确定位待导入的文件。例如待导入的文件都在csv/目录下,则可以指定前缀为csv/。

      如果不设置该参数,则遍历整个S3 Bucket。

      说明

      建议设置该参数。当Bucket中的文件数量非常多时,全量遍历将导致数据导入效率非常低。

      文件路径正则过滤

      通过文件路径的正则表达式过滤S3文件,用于准确定位待导入的文件。只有文件名(包含文件路径)匹配该正则表达式的文件才会被导入。默认为空,表示不过滤。

      例如S3文件为testdata/csv/bill.csv,您可以设置正则表达式为(testdata/csv/)(.*)

      调整正则表达式的方法,请参见如何调试正则表达式

      文件修改时间过滤

      通过文件修改时间过滤S3文件,用于准确定位待导入的文件。

      • 所有:如果您想导入所有符合条件的文件,请选择该项。

      • 某个时间开始:如果您想导入某个时间点后修改过的文件,请选择该项。

      • 特定时间范围:如果您想导入某个时间范围内修改过的文件,请选择该项。

      数据格式

      文件的解析格式,如下所示。

      • CSV:分隔符分割的文本文件,支持指定文件中的首行为字段名称或手动指定字段名称。除字段名称外的每一行都会被解析为日志字段的值。

      • 单行JSON:逐行读取S3文件,将每一行看做一个JSON对象进行解析。解析后,JSON对象中的各个字段对应为日志中的各个字段。

      • 单行文本日志:将S3文件中的每一行解析为一条日志。

      • 跨行文本日志:多行模式,支持指定首行或者尾行的正则表达式解析日志。

      压缩格式

      待导入的S3文件的压缩格式,日志服务根据对应格式进行解压并读取数据。

      编码格式

      待导入的S3文件的编码格式。目前仅支持UTF-8和GBK。

      检查新文件周期

      如果目标S3文件路径中不断有新文件产生,您可以根据需求设置检查新文件周期。设置后,导入任务会一直在后台运行,自动周期性地发现并读取新文件(后台保证不会将同一个S3文件中的数据重复写入到日志服务)。

      如果目标S3文件路径中不再产生新文件,请修改为永不检查,即导入任务读取完所有符合条件的文件后,将自动退出。

      日志时间配置

      时间字段

      当选择数据格式CSV单行JSON时,您可以设置一个时间字段,即设置为文件中代表时间的列名,用于指定导入日志到日志服务时的时间。

      提取时间正则

      您可以使用正则表达式提取日志中的时间。

      例如日志样例为127.0.0.1 - - [10/Sep/2018:12:36:49 0800] "GET /index.html HTTP/1.1"时,则您可以设置提取时间正则[0-9]{0,2}\/[0-9a-zA-Z]+\/[0-9:,]+

      说明

      针对其他类型的数据格式,如果您只需提取时间字段中的部分内容,也可通过正则表达式提取。

      时间字段格式

      指定时间格式,用于解析时间字段的值。

      • 支持Java SimpleDateFormat语法的时间格式,例如yyyy-MM-dd HH:mm:ss。时间格式的语法详情,请参见Class SimpleDateFormat。常见的时间格式,请参见时间格式

      • 支持epoch格式,包括epoch、epochMillis、epochMicro和epochNano。

      时间字段分区

      选择时间字段对应的时区。当时间字段格式为epoch类别时,不需要设置时区。

      如果解析日志时间需要考虑夏令时,可以选择UTC格式;否则,选择GMT格式。

      说明

      默认使用东八区时间。

      当选择数据格式CSV时,需要额外设置相关参数,具体说明如下表所示。

      • CSV特有参数

        参数

        说明

        分隔符

        设置日志的分隔符,默认值为半角逗号(,)。

        引号

        CSV字符串所使用的引号字符。

        转义符

        配置日志的转义符,默认值为反斜线(\)。

        日志最大跨行数

        打开首行作为字段名称开关后,将使用CSV文件中的首行作为字段名称。

        自定义字段列表

        关闭首行作为字段名称开关后,请根据需求自定义日志字段名称,多个字段名称之间用半角逗号(,)隔开。

        跳过行数

        指定跳过的日志行数。例如设置为1,则表示从CSV文件中的第2行开始采集日志。

      • 跨行文本日志特有参数

        参数

        说明

        正则匹配位置

        设置正则表达式匹配的位置,具体说明如下:

        • 首行正则:使用正则表达式匹配一条日志的行首,未匹配部分为该条日志的一部分,直到达到最大行数。

        • 尾行正则:使用正则表达式匹配一条日志的行尾,未匹配部分为下一条日志的一部分,直到达到最大行数。

        正则表达式

        根据日志内容,设置正确的正则表达式。

        调整正则表达式的方法,请参见如何调试正则表达式

        最大行数

        一条日志的最大行数。

    2. 单击预览,预览导入结果。

    3. 确认无误后,单击下一步

  5. 预览数据及创建索引,然后单击下一步

    日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引

    重要

    如果您要查询和分析日志,那么全文索引和字段索引必须至少启用一种。同时启用时,以字段索引为准。

  6. 单击查询日志,进入查询和分析页面,确认是否成功导入S3数据。

    等待1分钟左右,如果有目标S3数据导入,则说明导入成功。

查看导入配置

创建导入配置成功后,您可以在控制台中查看已创建的导入配置及生成的统计报表。

  1. Project列表区域,单击目标Project。

  2. 日志存储 > 日志库中,选择目标日志库下的数据接入 > 数据导入,单击配置名称。

  3. 导入配置概览页面,查看导入配置的基本信息和统计报表。

    image.png

    image.png

在配置的导入配置概览页面,您还可以进行如下操作。

  • 修改配置

    单击修改配置,修改导入配置的相关信息。更多信息,请参见导入配置

  • 开始导入

    单击启动,开始/继续导入数据。

  • 停止导入

    单击停止,停止导入数据。

  • 删除配置

    单击删除配置,删除该导入配置。

    警告

    删除后不可恢复,请谨慎操作。

费用说明

日志服务不针对导入功能收取费用,但导入功能需要访问服务商API,会产生对应的流量费用和请求费用。相关计价模型如下,具体的费用以服务商账单为准。

image

字段

说明

T

每天导入的总数据量,单位:GB。

p_read

每GB数据的外网流出费用。

p_put

每万次的Put类型请求费用。

p_get

每万次的Get类型请求费用。

新文件检查周期,单位:分钟。

您可以在创建数据导入配置时,设置检查新文件周期参数。

N

Bucket中根据前缀可列出的文件数量。

常见问题

问题

可能原因

解决方法

预览时显示无数据。

S3中没有文件、文件中没有数据或者没有符合过滤条件的文件。

  • 检查Bucket下是否存在非空文件(CSV文件是否仅包含headers行)。如果不存在有数据的文件,则可以等待文件有数据后再进行导入。

  • 调整文件路径前缀过滤文件路径正则过滤文件修改时间过滤等配置项。

数据中存在乱码。

数据格式、压缩格式或编码格式配置不符合预期。

确认S3文件的真实格式,然后调整数据格式压缩格式编码格式等配置项。

如果需要修复已有的乱码数据,请创建新的Logstore和导入配置。

日志服务中显示的数据时间和数据本身的时间不一致。

设置导入配置时,没有指定日志时间字段或者设置时间格式、时区有误。

设置指定的日志时间字段以及正确的时间格式和时区。更多信息,请参见日志时间配置

导入数据后,无法查询和分析数据。

  • 数据不在查询范围内。

  • 未配置索引。

  • 索引未生效。

  • 检查待查询数据的时间是否在查询时间范围内。

    如果不在查询范围内,请调整查询范围并重新查询。

  • 检查是否已为Logstore设置索引。

    如果未设置,请先设置索引。具体操作,请参见创建索引重建索引

  • 如果已设置索引,且数据处理流量观测仪表盘中显示的成功导入数据量符合预期,则可能原因是索引未生效,请尝试重建索引。具体操作,请参见重建索引

导入的数据条目数量少于预期。

部分文件存在单行数据大小超过3 MB的数据,导致数据在导入过程中被丢弃。更多信息,请参见采集限制

写入数据到S3文件时,避免单行数据大小超过3 MB。

文件数量和总数据量都很大,但导入数据的速度不及预期(正常情况下,可达到80 MB/s)。

Logstore Shard数量过少。更多信息,请参见性能限制

Logstore Shard数量较少时,请尝试增加Shard的个数(10个及以上),并观察延迟情况。具体操作,请参见管理Shard

部分文件没有导入。

过滤条件设置存在问题或者存在单个文件大小超出5 GB的文件。更多信息,请参见采集限制

  • 检查待导入的文件是否符合过滤条件。如果不符合,请修改过滤条件。

  • 确认待导入文件的大小都小于5 GB。

    如果超过5 GB,请缩小单个文件的大小。

多行文本日志解析错误。

首行正则表达式或尾行正则表达式设置错误。

检查首行正则表达式或尾行正则表达式的正确性。

新文件导入延迟大。

存量文件太多(即符合文件路径前缀过滤的文件数量太多)。

如果符合文件路径前缀过滤条件文件数量太多(超过100万),建议前缀设置的更加详细,同时创建多个任务来进行数据导入。否则,发现新文件的效率非常低。

错误处理机制

错误项

说明

读取文件失败

读文件时,如果遇到文件不完整的错误(例如由网络异常、文件损坏等导致),导入任务会自动重试,重试3次后仍然读取失败,将跳过该文件。

重试间隔和检查新文件周期一致。如果检查新文件周期为永不检查,则重试周期为5分钟。

压缩格式解析错误

解压文件时,如果遇到文件压缩格式无效的错误,导入任务将直接跳过该文件。

数据格式解析错误

解析数据失败时,导入任务会将原始文本内容存放到日志的content字段中。

S3 Bucket不存在

导入任务会定期重试,即重建Bucket后,导入任务会自动恢复导入。

权限错误

从S3 Bucket读取数据或者写数据到日志服务Logstore存在权限错误时,导入任务会定期重试,即修复权限问题后,导入任务会自动恢复。

遇到权限错误时,导入任务不会跳过任何文件,因此修复权限问题后,导入任务会自动将Bucket中还未被处理的文件中的数据导入到日志服务Logstore中。