全部产品
云市场

日志收集

更新时间:2019-12-10 17:30:37

一键开启ECI日志收集

ECI已经开始支持用户日志收集,通过openAPI创建ECI的时候设置SlsEnable参数为true即可开启ECI的用户日志收集功能。默认情况下,用户无需任何其他的设置,就可以将该ECI容器的标准输出、错误日志收集到用户账号下的日志服务的日志仓库。日志收集非常方便。效果如下:

默认项目:

eci-log-default-project-开头的project即为ECI为用户创建的默认的project(每个region都会创建默认的)。eci-sls-1

日志仓库:

eci-log-default-log-store-开头的logStore为默认的日志仓库,会收集ECI的标准输出和错误输出,能满足大部分用户的使用场景。eci-sls-2

机器组:

eci-log-default-machine-group开头的机器组即为ECI默认机器组,开启sls日志收集的ECI都会加入到这个默认机器组。通过查看机器组状态可以看到应用的ECI实例。

eci-sls-3

配置:

eci-log-default-config开头的为默认的logTail配置。我们默认生成的logTail配置是极简模式,如果用户对日志收集有更复杂的配置,可以自行到控制台自定义配置其他的模式即可。

eci-sls-4

日志收集结果:

eci-sls-5

以上均为ECI为用户生成的默认配置,可以满足大多数用户的基本需求。

用户自定义设置

尽管ECI默认可以为用户设置了必须的基本参数,但是用户依然会有一些特别的需求,比如,默认条件下,用户的ECI都会加入到默认项目下的默认机器组,日志也都是收集到默认的日志库。用户现在需需要将ECI的日志收集到自定义项目下的自定义日志库里,针对不同的应用和服务可能还需要将ECI实例加入不同的机器组。有两种办法可以实现:

通过日志服务控制台(API)手动设置

用户可以自行登录日志服务控制台,创建自定义项目,创建自定义日志库,以及自定的机器组,为日志库创建自定义config并应用到选择的机器组。这样日志内容就可以导向新的日志库了。这里需要注意的是,同一个日志文件不能被多个config引用,导向新的日志库的时候,切记要删掉默认的日志库以及配置,不然收集会失败。

如果觉得通过日志服务控制台配置太繁琐,依然可以通过ECI代创建和配置。

通过ECI自定义

ECI除了具备为用户生成所有默认设置外,还支持为用户生成自定义的配置。比如项目名、日志库名、机器组名、以及日志收集目录等。具体的参数通过ECI内第一个容器的环境变量传入,格式如下:

项目名

非必填参数,我们会为每个用户创建一个默认的ECI project,如果用户创建ECI的时候不指定,我们就默认加入这个project;如果指定了,但是不存在,我们会代创建;如果存在,直接将logStore和config等创建、配置在这个项目里。

  1. -name: aliyun_logs_project
  2. -value: {project 名称}

项目名约束:

1.项目名称仅支持小写字母、数字和连字符(-)

2.必须以小写字母和数字开头和结尾

3.名称长度为3-63个字符

注:校验不通过的,会直接忽略,使用ECI默认的。

Logstore

非必填参数。默认会为用户创建一个默认logSrtore,配置ECI容器标准的输出日志。如果用户配置了该参数,ECI就不会为用户生成默认的,相应容器的日志会被收集到指定的logstore。实际上是ECI会创建/修改配置应用到相应的机器组。注:如果用户没有设置volume日志目录(见下文),则此处设置的自定义收集目录只能为var/log/eci/目录下的子目录

  1. -name: aliyun_log_logstore_{Logstore 名称} or aliyun_logs_{Logstore 名称}
  2. -value: {日志采集路径}

日志库名约束:

1.日志库名称仅支持小写字母、数字、连字符(-)和下划线(_)

2.必须以小写字母和数字开头和结尾

3.名称长度为3-63个字符

注:校验不通过的,会直接忽略,使用ECI默认的。

Logstore设置分区数

什么是分区(Shard)?

设置方法:

  1. -name: aliyun_logs_{Logstore 名称}_shard
  2. -value: {shard数值}

默认值为2,可选范围是[1,10]

Logstore设置日志保留时间

设置方法:

  1. -name: aliyun_logs_{Logstore 名称}_ttl
  2. -value: {ttl数值}

默认值为90,可选范围是[1,3650]

*机器组名称

非必填参数。默认情况,ECI实例会加入到ECI帮用户创建的默认机器组,一个region对应一个。如果单一的机器组不能满足需求,还可以选择将ECI加入不同的机器组,机器组可以是已经创建好的,也可以是还未创建的。当基于ECI部署了多种不同的应用或者服务的时候,日志收集的配置往往需要分开设置,为ECI设置机器组就非常有用。收集设置的格式如下:

  1. -name: aliyun_logs_machinegroup
  2. -value: {机器组名}

机器组名约束:

1.机器组名称仅支持字母、数字、连字符(-)和下划线(_)

2.必须以小写字母和数字开头和结尾

3.名称长度为3-63个字符

注:校验不通过的,会直接忽略,使用ECI默认的。

用户Volume日志收集

默认情况下,我们会为用户配置标准的输出、错误日志,并收集到默认日志仓库。但是我们除了支持这种基本的日志收集外还支持用户的Volume日志收集。用户的Volume日志的收集相对比较灵活,对应的收集目录需要用户自行设定。

ECI的容器的标准输出的日志目录为:var/log/eci/*/*.log,默认情况下ECI会代用户设置,这个目录基本是固定不变的。而ECI Volume的标准日志收集目录为Volume挂载的目录下的子目录,具体取决于用户自己的设定。

比如,用户有个EmptyDirVolume,挂载到了容器的/pod/data/目录下,那么Volume的日志收集可以指定是/pod/data/下的任意子目录下的任意文件。通过这种方式,用户可以灵活的调整挂载目录并配合自己的业务,实现自定义的日志收集目录。

创建EmptyDirVolume:

  1. 'Volume.1.Name': 'default-volume',
  2. 'Volume.1.Type': 'EmptyDirVolume',

将Volume挂载至容器目录:

  1. 'Container.1.VolumeMount.1.Name': 'default-volume',
  2. 'Container.1.VolumeMount.1.MountPath': '/pod/data/',
  3. 'Container.1.VolumeMount.1.ReadOnly': False,

配置日志仓库

‘aliyun_log_logstore_Store’为ECI的容器的标准输出的收集目录,’aliyun_log_logstore_Store2’为Volume的日志收集目录,模糊匹配/pod/data/目录下的任意文件。

  1. 'Container.1.EnvironmentVar.1.Key': 'aliyun_log_logstore_Store',
  2. 'Container.1.EnvironmentVar.1.Value': '/var/log/eci/*/*.log',
  3. #'Container.1.EnvironmentVar.1.Key': 'aliyun_log_logstore_Store',
  4. #'Container.1.EnvironmentVar.1.Value': 'stdout',
  5. 'Container.1.EnvironmentVar.2.Key': 'aliyun_log_logstore_Store2',
  6. 'Container.1.EnvironmentVar.2.Value': '/pod/data/*/*.*',

注:设置环境变量时,stdout 等价于 /var/log/eci/*/*.log

效果

如下图所示,在Volume的挂载目录下创建一个文件,输入任意内容:

eci-sls-6

然后打开对应的日志仓库,无需任何配置,可以看到内容已经被自动收集到了日志仓库。

eci-sls-7

注:

1、日志项目必须和ECI所在的region相同,如果传入其他region的项目,会被忽略,而使用ECI默认的项目。

2、只有用户当没有通过ECI的环境变量配置日志仓库的情况下,我们才会默认代用户配置ECI的标准输出、错误日志的收集。如果用户通过ECI的环境变量自行配置了任何自定义日志仓库,我们将不会代用户配置ECI标准的输出、错误日志收集。

3、目前对收集目录没有数量限制,但是切记不要在多个日志库logTail的config里面引用到了同一机器组同一个文件(明确指定和模糊匹配到的都不允许),否则会收集失败。这种情况下,需要用户自行到日志服务控制台纠正才能恢复ECI正常的日志收集。

4、目前仅支持EmptyDirVolume一种Volume类型的日志收集。