本文为日志数据传送服务的搭建指南,介绍如何将日志服务中的日志数据转换为结构化数据,存储在表格存储中,以提供准确、高性能的日志实时检索服务。

准备工作

  • 日志服务

    开通日志服务,并且申请您的Project和Logstore。传送服务不会修改您日志服务内的日志数据,所以也可以使用您生产用的Project和Logstore。教程里我们假设Project是lhshipper-test,Logstore是test-store,地域为华东1(杭州)。

  • 表格存储

    开通表格存储服务,并预先建好两张表:

    • 第一张是数据表,用来存储从日志服务中同步过来的日志数据。教程里我们假设这张表有三个主键列,分别是:

      • rename:类型是STRING。

      • trans-pkey:类型是INTEGER。

      • keep:类型是STRING。

    • 第二张表是传送服务的状态表,用来存储每个日志服务Project以及各个Shard上日志数据的同步进度。您的服务与多个Project和LogStore的传送服务可以复用同一张状态表。我们建议您将这张表的数据生命周期设置为1天或2天,这样可以降低使用成本。状态表的主键有四列,分别为:

      • project_logstore:类型为STRING。

      • shard:类型为INTEGER。

      • target_table:类型为STRING。

      • timestamp:类型为INTEGER。

  • 访问控制

    从访问控制RAM中获取您的AccesskeyId和AccessKeySecret。

    出于安全的考虑,我们建议您在生产中使用子账户来搭建传送服务,并授权该RAM用户读取日志服务数据的权限(AliyunLogReadOnly)和将日志数据写入表格存储的权限(AliyunTableStoreWriteOnlyAccess)。

  • 云服务器和容器服务

    开通云服务器ECS和容器服务。 后续步骤中您需要创建一台按量付费的云服务器,所以请确保账户的余额不少于100元。

搭建服务

  1. 登录容器服务控制台
  2. 单击页面左侧的集群,进入集群列表页面。
  3. 单击页面右上角的创建集群,进入创建集群页面。
  4. 设置集群的基本信息,请注意如下事项:
    • 尽量选择和日志服务与表格存储相同的地域,这样可以使用私网地址,避免产生公网下行流量费用和公网延迟的不确定性。

    • 本教程不选中Swarm Mode集群以方便演示。

      生产上建议您选中Swarm Mode 集群,性能更佳。

    • 本教程选择创建节点以方便演示。

      生产上建议您选择添加已有节点,来添加现有的云服务器。

    • 传送服务并不需要高配置的实例,一般情况下,选择 1核1 GB 即可。

    • 传送服务可以完全动态地水平扩容缩容,您可以选择多台云服务器。

    • 传送服务不是一个HTTP服务,不需要暴露任何端口,所以无需选择创建负载均衡。

  5. 设置完成后,单击页面右侧的创建集群

    集群进入初始化阶段,需要一些时间,您可以在集群列表页面查看集群状态。

说明 如果已经有云服务器,可以将已购买的云服务器添加到指定集群。具体操作,请参见添加已有云服务器

创建应用

  1. 登录容器服务控制台
  2. 单击左侧导航栏的应用
  3. 单击页面右上角的创建应用
  4. 设置应用的基本信息(示例使用的应用名称为loghub-shipper),请注意如下事项:
    • 部署集群项中选择在哪个集群上创建该应用。
    • 建议勾选检查最新 Docker 镜像,便于以后的版本升级。
  5. 单击使用镜像创建
    说明 本教程选择镜像创建是为了说明核心流程。但在生产上,一个应用可能包含多种服务,此时选择使用编排模板创建会更灵活便利。
  6. 进行应用配置。请注意如下事项:
    • 在搜索框中输入loghub-shipper并单击全局搜索,可快速找到传送服务的镜像。
    • 环境变量栏中填写如下变量信息:
      • access_key_id
      • access_key_secret
      • loghub:表示日志服务相关信息,信息内容为一个JSON字符串,需要包括endpoint、logstore和consumer_group。其中,consumer_group可以是任意字符串,同一个传送服务中的多个容器实例共用一个,多个传送服务使用的consumer_group不能重复。该变量值示例内容如下:
        {"endpoint": "https://lhshipper-test.cn-hangzhou.log.aliyuncs.com",
        "logstore": "test-store",
        "consumer_group": "defaultcg"}
      • tablestore:表示表格存储的相关信息,信息内容为一个JSON字符串,需要包括 endpoint(访问表格存储的域名)、instance(访问表格存储的实例名)、target_table(数据表名)和status_table(状态表名)。该变量值示例内容如下:
        {"endpoint": "https://lhshipper-test.cn-hangzhou.ots.aliyuncs.com",
        "instance": "lhshipper-test",
        "target_table": "loghub_target",
        "status_table": "loghub_status"}
      • exclusive_columns:该字段表示日志数据中不导入表格存储的字段信息,该内容为一个JSON字符串。该变量值的示例内容如下:
        ["__source__","time"]
      • transform:该字段表示日志数据中需要做的格式转换信息(日志数据中所有数据均为字符串型),例如重命名及某个属性类型转换,该内容为一个JSON字符串。该变量值的示例内容如下:
        {"rename": "original",
        "trans-pkey": "(->int 10 original)"}

      上述示例表示,将日志数据中字段为original的数据变成数据表中rename的属性列,将日志数据中字段为original的数据转成十进制整数成为数据表中trans-pkey的属性列,更多类型转换定义请参见用户手册。

      说明 在配置中不需要指定数据表的主键信息,传送服务会自动读取数据表的schema 信息。但日志数据或者transform中需要包括所有的主键字段,否则该条日志信息将会被丢弃。
  7. 单击创建。部署服务需要一些时间,可以在服务列表中查看其状态。

上述操作均已成功完成后,传送服务即会就绪。