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

准备工作

  • 日志服务

    开通日志服务,并且创建您的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中获取您的AccessKey ID和AccessKey Secret。

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

  • 云服务器和容器服务

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

搭建服务

  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. 单击创建。部署服务需要一些时间,可以在服务列表中查看其状态。

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