一键开启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等创建、配置在这个项目里。
-name: aliyun_logs_project -value: {project 名称} 项目名约束:
1.项目名称仅支持小写字母、数字和连字符(-)
2.必须以小写字母和数字开头和结尾
3.名称长度为3-63个字符
注:校验不通过的,会直接忽略,使用ECI默认的。
Logstore 非必填参数。默认会为用户创建一个默认logSrtore,配置ECI容器标准的输出日志。如果用户配置了该参数,ECI就不会为用户生成默认的,相应容器的日志会被收集到指定的logstore。实际上是ECI会创建/修改配置应用到相应的机器组。注:如果用户没有设置volume日志目录(见下文),则此处设置的自定义收集目录只能为var/log/eci/目录下的子目录
-name: aliyun_log_logstore_{Logstore 名称} or aliyun_logs_{Logstore 名称} -value: {日志采集路径} 日志库名约束:
1.日志库名称仅支持小写字母、数字、连字符(-)和下划线(_)
2.必须以小写字母和数字开头和结尾
3.名称长度为3-63个字符
注:校验不通过的,会直接忽略,使用ECI默认的。
Logstore设置分区数 什么是分区(Shard)?
设置方法:
-name: aliyun_logs_{Logstore 名称}_shard -value: {shard数值} 默认值为2,可选范围是[1,10]
Logstore设置日志保留时间 设置方法:
-name: aliyun_logs_{Logstore 名称}_ttl -value: {ttl数值} 默认值为90,可选范围是[1,3650]
*机器组名称 非必填参数。默认情况,ECI实例会加入到ECI帮用户创建的默认机器组,一个region对应一个。如果单一的机器组不能满足需求,还可以选择将ECI加入不同的机器组,机器组可以是已经创建好的,也可以是还未创建的。当基于ECI部署了多种不同的应用或者服务的时候,日志收集的配置往往需要分开设置,为ECI设置机器组就非常有用。收集设置的格式如下:
-name: aliyun_logs_machinegroup -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: 'Volume.1.Name': 'default-volume', 'Volume.1.Type': 'EmptyDirVolume', 将Volume挂载至容器目录: 'Container.1.VolumeMount.1.Name': 'default-volume', 'Container.1.VolumeMount.1.MountPath': '/pod/data/', 'Container.1.VolumeMount.1.ReadOnly': False, 配置日志仓库 ‘aliyun_log_logstore_Store’为ECI的容器的标准输出的收集目录,’aliyun_log_logstore_Store2’为Volume的日志收集目录,模糊匹配/pod/data/目录下的任意文件。
'Container.1.EnvironmentVar.1.Key': 'aliyun_log_logstore_Store', 'Container.1.EnvironmentVar.1.Value': '/var/log/eci//.log', #'Container.1.EnvironmentVar.1.Key': 'aliyun_log_logstore_Store', #'Container.1.EnvironmentVar.1.Value': 'stdout', 'Container.1.EnvironmentVar.2.Key': 'aliyun_log_logstore_Store2', '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类型的日志收集。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。