本章节主要介绍如何使用日志数据传送服务。

服务详情查看

  1. 登录容器服务控制台
  2. 单击页面左侧的Swarm > 服务 ,进入服务列表。
  3. 单击服务名称栏下面的服务名称(例如示例中创建的loghub-shipper),进入服务详情页面。请根据需要,在容器列表栏中执行如下操作:
    • 查看服务日志

      单击操作栏下的日志,查看传送服务的实时日志。

    • 查看运行状态及报警规则
      1. 单击操作栏下的监控,查看容器的运行状态。
      2. 单击查看历史监控数据/设置报警规则,查看监控图表和报警规则。您还可以在该页面创建报警规则。

使用示例

以使用如下的配置为例:
loghub:{"endpoint":"https://lhshipper-test.cn-hangzhou.log.aliyuncs.com", "logstore":"test-store","consumer_group":"defaultcg"}
tablestore:{"endpoint":"https://lhshipper-test.cn-hangzhou.ots.aliyuncs.com", "instance":"lhlshipper-test", "target_table":"loghub_target", "status_table":"loghub_status"}
exclusive_columns: ["__source__", "__time__"]
transform: {"rename":"original", "trans-pkey":"(->int 10 original)"}

写入数据

使用日志服务的API在日志服务中写入一条数据,如下所示。
LogItem log = new LogItem();
log.PushBack("original", "12345");
log.PushBack("keep", "hoho");
ArrayList logs = new ArrayList<LogItem>();
logs.add(log);
loghub.PutLogs("lhshipper-test", "test-store", "smile", logs, "");

这条日志有两个用户字段,其中original字段的值为12345,keep字段的值为hoho。此外,还有三个日志服务添加的字段,其中topic为smile,而__source__和__time__字段随环境变化而变化。

数据查看

使用工具即可看到表格存储中数据表已有一条数据(转成JSON格式方便描述)。

[{"rename": "12345", "trans-pkey": 12345, "keep": "hoho"},
{"__topic__": "smile", "original": "12345"}]

其中,rename、trans-pkey、keep为主键列,__topic__与original为属性列。

根据环境变量中的配置:

  • 在transform中定义 "rename": "original",日志数据中original的值为12345,因此表格存储中该行的rename的值也为 12345。
  • 在transform中定义"trans-pkey": "(->int 10 original)",传送服务将original的值以十进制的方式转成整数写入表格存储中的trans-pkey列。
  • keep没有任何转换规则,在表格存储中,属性类keep的值与日志数据中的保持一致。
  • 日志数据中的__source__和__time__字段由于在exclusive_columns中配置了[“__source__“, “__time__“ ],这两个字段的数据不会写入数据表中。
  • __topic__和original两个字段以属性列的方式写入数据表。

同步状态查询

每个传送服务的进程每隔5分钟会在状态表中添加一行状态数据,状态数据示例如下(转成JSON格式方便描述):

[{"project_logstore": "lhshipper-test|test-store", "shard": 0, "target_table": "loghub_target", "timestamp": 1469100705202},
{"skip_count": 0, "shipper_id": "fb0d62cacc94-loghub-shipper-loghub-shipper-1", "cu_count": 1, "row_count": 1, "__time__": 1469100670}]

其含义为传送服务的某个worker(”shipper_id”: “fb0d62cacc94-loghub-shipper-loghub-shipper-1”), 在2016-07-21 T11:31:45.202000Z添加了该状态(”timestamp”: 1469100705202)。

在之前的5分钟里,该worker从名为lhshipper-test的日志Project中名称为test-store的Logstore(“project_logstore”: “lhshipper-test|test-store”)0号Shard(“shard”: 0)消费了1条日志,其中跳过日志0条(“skip_count”: 0),向数据表写入1条日志(“row_count”: 1),消耗了1个CU(“cu_count”: 1)。

错误格式日志提醒

在状态表中,会给出最近5分钟内跳过日志的条数信息,这是因为系统异常或者系统升级等会不可避免地输出一些不符合格式规范的日志数据,导致传送服务无法对这些日志进行转换,这部分日志则会被跳过。

例如写入如下的日志数据:

LogItem log = new LogItem()
log.PushBack("original", "abcd")
log.PushBack("keep", "hoho")
ArrayList logs = new ArrayList<LogItem>()
logs.add(log)
loghub.PutLogs("lhshipper-test", "test-store", "smile", logs, "")

由于在环境设置中将日志中的original字段转成整数写入数据表中的trans-pkey列,但是该条日志中original并不是一个数字,所以状态表中的数据如下:

[{"project_logstore": "lhshipper-test|test-store", "shard": 0, "target_table": "loghub_target", "timestamp": 1469102805207},
{"skip_sample": "{\"__time__\":1469102565,\"__topic__\":\"smile\",\"__source__\":\"10.0.2.15\",\"original\":\"abcd\",\"keep\":\"hoho\"}", "skip_count": 1, "shipper_id": "fb0d62cacc94-loghub-shipper-loghub-shipper-1", "cu_count": 0, "row_count": 0, "__time__": 0}]

在状态表中,skip_count为1,属性列skip_sample表示被忽略的原始日志数据。

同时在容器服务的日志中也可以查看到如下的日志信息。日志中详细描述了该数据被跳过的原因为abcd is not 10-based int。

loghub-shipper_loghub-shipper_1 | 2016-07-21T12:02:56.113581003Z 12:02:56.111 [pool-4-thread-3] ERROR shipper.error - abcd is not 10-based int
loghub-shipper_loghub-shipper_1 | 2016-07-21T12:02:56.114039933Z 12:02:56.111 [pool-4-thread-3] INFO  shipper.core - skip 1 rows
loghub-shipper_loghub-shipper_1 | 2016-07-21T12:02:56.139854766Z 12:02:56.139 [pool-4-thread-3] INFO  shipper.core - skip: {"__time__" 1469102565, "__topic__" "smile", "__source__" "10.0.2.15", "original" "abcd", "keep" "hoho"}

改变配置

  1. 登录容器服务控制台
  2. 单击服务,进入服务页面。
  3. 找到传送服务,单击其右侧操作栏下的变更配置,进入修改页面。
  4. 单击确定

升级镜像

  1. 登录容器服务控制台
  2. 单击应用,进入应用页面。
  3. 找到传送服务,单击其右侧操作栏下的重新部署
  4. 单击确定

扩容和缩容

传送服务具有良好的扩展性,会自动根据容器实例的数量进行Shard分配,当传送服务的数据传送能力达不到业务要求时,可以方便地进行扩容与缩容。

以下是两种有效的扩容方式。如果用户需要频繁扩容、缩容,可以考虑使用弹性伸缩以及资源编排

  • 增加节点
    1. 登录容器服务控制台
    2. 单击集群,进入集群列表页面。
    3. 找到传送服务所在的集群,单击其右侧操作栏下的管理
    4. 单击页面右侧的集群扩容增加按量付费的云服务器,或者单击添加已有节点将已有的云服务器加入集群。
      说明 关于添加已有节点的具体操作,请参见添加已有节点
  • 增加传送服务的容器

    增加集群节点本身并不会增加传送服务的容器,增加传送服务容器需在改变传送服务的配置,具体步骤如下:

    1. 登录容器服务控制台
    2. 单击服务,进入服务页面。
    3. 找到传送服务,单击其右侧操作栏下的变更配置,进入修改页面。
    4. 修改容器数量,然后单击确定

缩容的步骤和扩容相反,具体步骤如下:

  1. 登录容器服务控制台
  2. 单击页面左侧的服务,进入服务列表页面。
  3. 单击传送服务右侧操作栏下的变更配置,进入更新服务页面。
  4. 减少容器数量
  5. 单击确定,返回服务列表页面。
  6. 单击传送服务右侧操作栏下的重新调度
  7. 单击页面左侧的节点,进入节点列表页面。
  8. 找到容器减少的云服务器,并单击其右侧操作栏下的更多 > 移除节点
  9. 和扩容不同,容器服务并不会主动释放摘除的云服务器。需要您通过ECS控制台手工释放。