ACK集群与阿里云日志服务SLS深入集成,通过提供日志采集组件来简化容器日志的收集和管理。本文介绍如何安装日志采集组件并完成日志采集配置,包括日志的自动采集、查询和分析,以提升运维效率,降低管理成本。
场景指引
日志采集组件可通过以下两种方式来采集容器日志。
DaemonSet:适用于日志分类明确、功能较单一的集群。您可参见本文了解。
Sidecar:适用于大型、混合型集群。详情请参见通过Sidecar方式采集Kubernetes容器文本日志。
关于两种方式的差异,请参见采集方式。
索引
操作步骤 | 操作链接 |
步骤一:安装日志采集组件 | 在以下两个日志采集组件中选择一个进行安装。
|
步骤二:创建采集配置 | 根据采集需求选择文本日志或标准输出。 |
步骤三:查询分析日志 | 通过控制台进行日志查询与分析。 |
步骤一:安装日志采集组件
安装LoongCollector
LoongCollector组件目前处于灰度发布阶段,在安装前,请确认其支持的地域。
LoongCollector采集:LoongCollector是日志服务推出的新一代采集Agent,是Logtail的升级版,未来还将融合Arms的相关采集Agent能力,包括Prometheus抓取和eBPF无侵入采集等。
已有的ACK集群中安装loongcollector组件
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理。
在日志与监控页签中,找到 loongcollector,然后单击安装。
说明LoongCollector组件和logtail-ds组件不能同时存在。如果集群之前已经安装logtail-ds组件,暂时无法直接升级到LoongCollector组件(升级方案即将发布)。
安装完成后,日志服务会自动生成名为k8s-log-${your_k8s_cluster_id}
的Project,并在该Project下生成如下资源,您可登录日志服务控制台查看。
资源类型 | 资源名称 | 作用 | 示例 |
机器组 | k8s-group- | loongcollector-ds的机器组,主要用于日志采集场景。 | k8s-group-my-cluster-123 |
k8s-group- | loongcollector-cluster的机器组,主要用于指标采集场景。 | k8s-group-my-cluster-123-cluster | |
k8s-group- | 单实例机器组,主要用于部分单实例采集配置。 | k8s-group-my-cluster-123-singleton | |
Logstore | config-operation-log | 用于采集和存储loongcollector-operator组件日志。 重要 请勿删除名为 | config-operation-log |
安装Logtail
Logtail采集:Logtail是日志服务提供的日志采集Agent,用于采集阿里云ECS、自建IDC或其他云厂商等服务器上的日志。Logtail基于日志文件,无侵入式采集日志。您无需修改应用程序代码,且采集日志不会影响您的应用程序运行。
已有的ACK集群中安装Logtail组件
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
在日志与监控页签中,找到logtail-ds,然后单击安装。
新建ACK集群时安装Logtail组件
登录容器服务管理控制台,在左侧导航栏选择集群列表。
单击创建集群,在组件配置页面,选中使用日志服务。
本文只描述日志服务相关配置,关于更多配置项说明,请参见创建ACK托管集群。
当选中使用日志服务后,会出现创建项目(Project)的提示。
使用已有Project
您可以选择一个已有的Project来管理采集到的容器日志。
创建新Project
日志服务自动创建一个Project来管理采集到的容器日志。其中
ClusterID
为您新建的Kubernetes集群的唯一标识。
在组件配置页中,默认开启控制面组件日志,开启此配置会在Project中自动配置并采集集群控制面组件日志并遵循按量计费,因此请您根据自身情况选择是否需要开启,相关信息请参考管理控制面组件日志。
安装完成后,自动生成名为k8s-log-<YOUR_CLUSTER_ID>
的Project,并在该Project下生成如下资源,您可登录日志服务控制台查看资源。
资源类型 | 资源名称 | 作用 | 示例 |
机器组 | k8s-group- | logtail-daemonset的机器组,主要用于日志采集场景。 | k8s-group-my-cluster-123 |
k8s-group- | logtail-statefulset的机器组,主要用于指标采集场景。 | k8s-group-my-cluster-123-statefulset | |
k8s-group- | 单实例机器组,主要用于部分单实例采集配置。 | k8s-group-my-cluster-123-singleton | |
Logstore | config-operation-log | 用于存储Logtail组件中的alibaba-log-controller日志。建议不要在此Logstore下创建采集配置。该Logstore可以删除,删除后不会再采集alibaba-log-controller的运行日志。该Logstore的收费标准和普通的Logstore收费标准是一致的,具体请参见按写入数据量计费模式计费项。 | 无 |
步骤二:创建采集配置
采集文本日志
以下为您介绍四种采集配置方式。建议您只使用一种方法管理日志采集配置:
配置方式 | 配置说明 | 场景适用 |
(推荐)CRD-AliyunPipelineConfig | 通过K8s CRD管理日志采集配置。 | 适用于需要复杂采集和处理需求以及在ACK集群中确保日志与应用版本一致性的场景。 |
CRD-AliyunLogConfig | 旧版CRD管理方式。 | 支持已知场景的旧版管理方式。 需要逐渐迁移到新版本CRD-AliyunPipelineConfig以享受更好的扩展性和稳定性。两类CRD采集方式对比请参见CRD类型。 |
日志服务控制台 | 图形化界面直接管理,快速部署配置。 | 适合少量采集配置的创建和管理,部分高级功能和自定义需求无法通过实现。 |
环境变量 | 通过环境变量快速配置日志参数。 | 进行简单配置调整,不支持复杂处理逻辑,仅支持单行文本日志。可满足以下定制需求:
|
当您使用(推荐)CRD-AliyunPipelineConfig配置方式时,需要logtail-ds组件版本高于1.8.10。升级详情请参见升级Logtail latest版本。对于LoongCollector组件,则无版本限制。
CRD-AliyunPipelineConfig(推荐)
您只需要创建AliyunPipelineConfig自定义资源即可创建采集配置,资源创建完成后自动生效。
对于通过自定义资源创建的采集配置,其修改只能通过更新相应的自定义资源来实现,在日志服务控制台上对采集配置的修改不会同步到自定义资源中。
登录容器服务管理控制台。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 自定义资源。
在自定义资源页面,单击资源定义(CustomResourceDefinition)页签,然后单击使用YAML创建资源。
根据实际情况修改以下示例YAML的参数,将其复制并粘贴到模板中,然后单击创建完成操作。
该示例YAML以多行文本模式采集default命名空间下,标签为
app: ^(.*test.*)$
的Pod中/data/logs/app_1
路径下的test.LOG
文件内容,并将其发送到名为k8s-log-<YOUR_CLUSTER_ID>
的Project中的名为k8s-file
(自动创建)的Logstore。您需根据实际情况修改YAML中的以下参数:project
,示例:k8s-log-<YOUR_CLUSTER_ID>
。登录日志服务控制台,确定您安装的日志采集组件生成的Project的名称。
IncludeK8sLabel
,示例:app: ^(.*test.*)$
。用于筛选目标Pod的标签,当前条件指定标签键为app,值中包含test的Pod会被采集。说明如果需要采集集群中名称包含test的所有Pod,可以将IncludeK8sLabel替换为K8sContainerRegex,并使用通配符配置值,如:
K8sContainerRegex: ^(.test.)$
。FilePaths
,示例:/data/logs/app_1/**/test.LOG
。更多详情请参见容器文件路径映射。Endpoint
(访问域名)和Region
(地域ID),示例:cn-hangzhou.log.aliyuncs.com
和cn-hangzhou
。
有关YAML文件中
config
项的详情,包括支持的输入、输出、处理插件类型和容器过滤方式,请参见PipelineConfig。完整的YAML参数详情请参见CR参数说明。apiVersion: telemetry.alibabacloud.com/v1alpha1 kind: ClusterAliyunPipelineConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。该名称也是创建出的采集配置名,如果名称重复则不会生效。 name: example-k8s-file spec: # 指定目标Project project: name: k8s-log-<YOUR_CLUSTER_ID> logstores: # 创建名为 k8s-file的Logstore - name: k8s-file # 定义采集配置 config: # 日志样例(可不填写) sample: | 2024-06-19 16:35:00 INFO test log line-1 line-2 end # 定义输入插件 inputs: # 使用input_file插件采集容器内多行文本日志 - Type: input_file # 容器内的文件路径 FilePaths: - /data/logs/app_1/**/test.LOG # 启用容器发现功能。 EnableContainerDiscovery: true # 添加容器信息过滤条件,多个选项之间为“且”的关系。 CollectingContainersMeta: true ContainerFilters: # 指定待采集容器所在 Pod 所属的命名空间,支持正则匹配。 K8sNamespaceRegex: default # 指定待采集容器的名称,支持正则匹配。 IncludeK8sLabel: app: ^(.*app.*)$ # 开启多行日志采集,单行日志采集请删除该配置 Multiline: # 选择自定义行首正则表达式模式 Mode: custom # 配置行首正则表达式 StartPattern: '\d+-\d+-\d+\s\d+:\d+:\d+' # 定义处理插件 processors: # 使用正则解析插件解析日志 - Type: processor_parse_regex_native # 源字段名 SourceKey: content # 解析用的正则表达式,用捕获组"()"捕获待提取的字段 Regex: (\d+-\d+-\d+\s\S+)(.*) # 提取的字段列表 Keys: ["time", "detail"] # 定义输出插件 flushers: # 使用flusher_sls插件输出到指定Logstore。 - Type: flusher_sls # 需要确保该 Logstore 存在 Logstore: k8s-file # 需要确保 endpoint 正确 Endpoint: cn-beijing.log.aliyuncs.com Region: cn-beijing TelemetryType: logs
CRD-AliyunLogConfig
您只需要创建AliyunLogConfig自定义资源即可创建采集配置,创建完成后自动生效。
对于通过自定义资源创建的采集配置,其修改只能通过更新相应的自定义资源来实现,在日志服务控制台上对采集配置的修改不会同步到自定义资源中。
登录容器服务管理控制台。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 自定义资源。
在自定义资源页面,单击资源定义(CustomResourceDefinition)页签,然后单击使用YAML创建资源。
根据实际情况修改以下示例YAML的参数,将其复制并粘贴到模板中,然后单击创建完成操作。
该示例YAML将创建名为
example-k8s-file
的采集配置,并对集群内名称开头为app
的所有容器,以极简文本模式采集/data/logs/app_1
路径下的test.LOG
文件内容,发送到名为k8s-log-<YOUR_CLUSTER_ID>
的Project中的名为k8s-file
(自动创建)的Logstore。您需根据实际情况修改示例中容器内文件路径,更多详情请参见容器文件路径映射。
logPath
:采集日志路径。示例:/data/logs/app_1
。filePattern
:采集日志文件名称。示例:test.LOG
。
有关YAML文件中的Config项提供的配置详情,如支持的输入,输出,处理插件类型与容器过滤方式等,请参见AliyunLogConfigDetail,完整的YAML参数详情请参见CR参数说明。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。 name: example-k8s-file # 设置资源所在命名空间。 namespace: kube-system spec: # 设置目标project名称(可不填写,默认为k8s-log-<your_cluster_id>) # project: k8s-log-test # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。 logstore: k8s-file # 设置采集配置。 logtailConfig: # 设置采集的数据源类型。采集文本日志时,需设置为file。 inputType: file # 设置采集配置的名称,必须与metadata.name一致。 configName: example-k8s-file inputDetail: # 指定通过极简模式采集文本日志。 logType: common_reg_log # 设置日志文件所在路径。 logPath: /data/logs/app_1 # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。 filePattern: test.LOG # 采集容器的文本日志时,需设置dockerFile为true。 dockerFile: true # 开启多行日志采集。单行日志采集删除该配置 # 行首正则表达式,以该正则表示一行日志的开始。 logBeginRegex: \d+-\d+-\d+.* #设置容器过滤条件。 advanced: k8s: K8sPodRegex: '^(app.*)$'
日志服务控制台
此方式适合少量采集配置的创建和管理,无需登录Kubernetes集群,操作步骤简单但无法批量配置。
登录日志服务控制台。
选择Project列表中您在安装日志采集组件时所使用的Project,如
k8s-log-<YOUR_CLUSTER_ID>
。在Project页面中单击目标Logstore的Logtail配置,添加采集配置,并单击Kubernetes-文件的立即接入。在机器组配置页面K8s场景的ACK Daemonset方式下勾选k8s-group-${your_k8s_cluster_id}机器组并单击>添加到应用机器组,单击下一步。
创建采集配置,按下文填写必须配置后单击下一步即可,采集配置生效大概需要1分钟,请耐心等待。此处仅介绍主要配置,详细配置请参见Logtail采集配置。
全局配置
在全局配置中输入配置名称。
输入配置
Logtail部署模式:选择DaemonSet。
文件路径类型:选择待采集的文件路径是容器内路径或宿主机路径。对于通过hostPath方式挂载数据卷的容器,如果您希望直接采集其在宿主机上映射的日志文件,请选择宿主机路径,其余情况请选择容器内路径。
文件路径:代表日志采集的路径,日志路径必须以正斜线(/)开头,例如下图
/data/wwwlogs/main/**/*.Log
表示/data/wwwlogs/main
目录下后缀名为.Log的文件。如果需要设置日志目录被监控的最大深度,即文件路径中通配符**
匹配的最大目录深度。可以修改最大目录监控深度的取值,0代表只监控本层目录。
创建索引和预览数据:日志服务默认开启全文索引,此时查询会索引日志中所有字段。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将生成字段索引,通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。更多信息请参见创建索引。
环境变量
此方式仅支持单行文本,如果要配置多行文本或其他日志格式,必须使用自定义资源方式或在日志服务控制台配置。
创建应用时配置日志服务。
通过容器控制台配置
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。
在无状态页面,单击使用镜像创建。
在应用基本信息页签,设置应用名称,单击下一步,进入容器配置页面,设置镜像名称。
以下仅介绍日志服务相关的配置。关于其他的应用配置,请参见创建无状态工作负载Deployment。
在日志配置区域,配置日志相关信息。
设置采集配置。
单击采集配置创建新的采集配置,每个采集配置由日志库和容器内日志路径两项构成。
日志库:配置Logstore名称,用于指定所采集的日志存储于该Logstore。如果该Logstore不存在,ACK将会自动为您在集群关联的日志服务Project下创建相应的Logstore。
说明新创建的Logstore中的日志默认保存时间为90天。
容器内日志路径:指定希望采集的日志所在的路径,例如使用/usr/local/tomcat/logs/catalina.*.log来采集Tomcat的文本日志。
每一项采集配置都会被自动创建为对应Logstore的一个采集配置,默认采用极简模式(按行)进行采集。
设置自定义Tag。
单击自定义Tag创建新的自定义Tag,每一个自定义Tag都是一个键值对,会拼接到所采集到的日志中,您可以使用它来为容器的日志数据进行标记,例如版本号。
通过YAML模板
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。
在无状态页面上方的命名空间下拉框中设置命名空间,然后单击页面右上角的使用YAML创建资源。
配置YAML文件。
YAML模板的语法同Kubernetes语法,但是为了给容器指定采集配置,需要使用
env
来为容器增加采集配置和自定义Tag,并根据采集配置,创建对应的volumeMounts
和volumes
。以下是一个简单的Pod示例:apiVersion: v1 kind: Pod metadata: name: my-demo spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 配置环境变量 - name: aliyun_logs_log-varlog value: /var/log/*.log - name: aliyun_logs_mytag1_tags value: tag1=v1 # 配置volume mount volumeMounts: - name: volumn-sls-mydemo mountPath: /var/log # 如果Pod不断重启,启动参数可以添加sleep command: ["sh", "-c"] # 使用 shell 来运行命令 args: ["sleep 3600"] # 设置休眠时间为 1 小时(3600 秒) volumes: - name: volumn-sls-mydemo emptyDir: {}
通过环境变量来创建您的采集配置和自定义Tag,所有与配置相关的环境变量都采用
aliyun_logs_
作为前缀。创建采集配置的规则如下:
- name: aliyun_logs_log-varlog value: /var/log/*.log
示例中创建了一个采集配置,格式为
aliyun_logs_{key}
,对应的{key}
为log-varlog
。aliyun_logs_log-varlog
:该env表示创建一个Logstore
名为log-varlog
,日志采集路径为/var/log/*.log的配置,对应的日志服务采集配置名称也是log-varlog
,目的是将容器的/var/log/*.log文件内容采集到log-varlog
这个Logstore
中。
创建自定义Tag的规则如下:
- name: aliyun_logs_mytag1_tags value: tag1=v1
配置Tag后,当采集到该容器的日志时,会自动附加对应的字段到日志服务。其中
mytag1
为任意不包含'_'的名称
。
如果您的采集配置中指定了非stdout的采集路径,需要在此部分创建相应的
volumeMounts
。示例中采集配置添加了对/var/log/*.log的采集,因此相应地添加了/var/log的
volumeMounts
。
当YAML编写完成后,单击创建,即可将相应的配置交由Kubernetes集群执行。
配置环境变量的高级参数。
通过容器环境变量配置采集支持多种配置参数。您可以根据实际需求设置高级参数,以满足日志采集的特殊需求。
重要通过容器环境变量配置采集日志的方式不适用于边缘场景。
字段
说明
示例
注意事项
aliyun_logs_{key}
必选项。{key}只能包含小写字母、数字和-。
若不存在aliyun_logs_{key}_logstore,则默认创建并采集到名为{key}的logstore。
当值为stdout时表示采集容器的标准输出;其他值为容器内的日志路径。
- name: aliyun_logs_catalina value: stdout
- name: aliyun_logs_access-log value: /var/log/nginx/access.log
默认采集方式为极简模式。如需解析日志内容,建议使用日志服务控制台,或者CRD进行配置。
{key}表示日志服务中LoongCollector采集配置的名称,需保持在K8s集群内唯一。
aliyun_logs_{key}_tags
可选。值为{tag-key}={tag-value}类型,用于对日志进行标识。
- name: aliyun_logs_catalina_tags value: app=catalina
不涉及。
aliyun_logs_{key}_project
可选。值为指定的日志服务Project。当不存在该环境变量时,为您安装时所选的Project。
- name: aliyun_logs_catalina_project value: my-k8s-project
Project需与您的LoongCollector工作所在的Region一致。
aliyun_logs_{key}_logstore
可选。值为指定的日志服务Logstore。当不存在该环境变量时,Logstore和{key}一致。
- name: aliyun_logs_catalina_logstore value: my-logstore
不涉及。
aliyun_logs_{key}_shard
可选。值为创建Logstore时的shard数,取值范围为[1 , 10]。当不存在该环境变量时,值为2。
说明若logstore已经存在,则该参数不生效。
- name: aliyun_logs_catalina_shard value: '4'
不涉及。
aliyun_logs_{key}_ttl
可选。值为指定的日志保存时间,取值范围为[1 , 3650]。
当取值为3650时,指定日志的保存时间为永久保存。
当不存在该环境变量时,默认指定日志的保存时间为90天。
说明若Logstore已经存在,则该参数不生效。
- name: aliyun_logs_catalina_ttl value: '3650'
不涉及。
aliyun_logs_{key}_machinegroup
可选。值为应用的机器组。当不存在该环境变量时与安装LoongCollector的默认机器组一致。关于该参数的详细使用方法,请参见下文的采集ACK集群容器日志。
- name: aliyun_logs_catalina_machinegroup value: my-machine-group
不涉及。
aliyun_logs_{key}_logstoremode
可选。值为指定的日志服务Logstore的类型,不指定该参数的话,默认值为standard,取值:
说明若Logstore已经存在,则该参数不生效。
standard:支持日志服务一站式数据分析功能,适用于实时监控、交互式分析以及构建完整的可观测性系统等场景。
query:支持高性能查询,索引流量费用约为standard的一半,但不支持SQL分析,适用于数据量大、存储周期长(周、月级别以上)、无日志分析的场景。
- name: aliyun_logs_catalina_logstoremode value: standard
- name: aliyun_logs_catalina_logstoremode value: query
不涉及。
定制需求1:将多个应用数据采集到同一Logstore
如果您需要将多个应用数据采集到同一Logstore,可以设置 aliyun_logs_{key}_logstore参数,例如以下配置将2个应用的stdout采集到stdout-logstore中。
示例中应用1的
{key}
为app1-stdout
,应用2的{key}
为app2-stdout
。应用1设置的环境变量为:
# 配置环境变量 - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_logstore value: stdout-logstore
应用2设置的环境变量为:
# 配置环境变量 - name: aliyun_logs_app2-stdout value: stdout - name: aliyun_logs_app2-stdout_logstore value: stdout-logstore
定制需求2:将不同应用数据采集到不同的Project
如果您需要将不同应用的数据采集到多个Project中,您需要进行以下操作:
在每个Project中创建一个机器组,选择自定义标识,标识名为
k8s-group-{cluster-id}
,其中{cluster-id}
为您的集群ID,机器组名称可以自定义配置。在每个应用的环境变量中配置project、logstore、machinegroup信息,其中机器组名称为您在上一步创建的机器组名称。
如下示例中应用1的
{key}
为app1-stdout
,应用2的{key}
为app2-stdout
。其中如果两个应用在同一个K8s集群中,对应的machinegroup可以使用同一个machinegroup。应用1设置的环境变量为:
# 配置环境变量 - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_project value: app1-project - name: aliyun_logs_app1-stdout_logstore value: app1-logstore - name: aliyun_logs_app1-stdout_machinegroup value: app1-machine-group
应用2设置的环境变量为:
# 应用2 配置环境变量 - name: aliyun_logs_app2-stdout value: stdout - name: aliyun_logs_app2-stdout_project value: app2-project - name: aliyun_logs_app2-stdout_logstore value: app2-logstore - name: aliyun_logs_app2-stdout_machinegroup value: app1-machine-group
采集标准输出
以下为您介绍四种采集配置方式。建议您只使用一种方法管理日志采集配置:
配置方式 | 配置说明 | 场景适用 |
(推荐)CRD-AliyunPipelineConfig | 通过K8s CRD管理日志采集配置。 | 适用于需要复杂采集和处理需求以及在ACK集群中确保日志与应用版本一致性的场景。 |
CRD-AliyunLogConfig | 旧版CRD管理方式。 | 支持已知场景的旧版管理方式。 需要逐渐迁移到新版本CRD-AliyunPipelineConfig以享受更好的扩展性和稳定性。两类CRD采集方式对比请参见CRD类型。 |
日志服务控制台 | 图形化界面直接管理,快速部署配置。 | 适合少量采集配置的创建和管理,部分高级功能和自定义需求无法通过实现。 |
环境变量 | 通过环境变量快速配置日志参数。 | 进行简单配置调整,不支持复杂处理逻辑,仅支持单行文本日志。可满足以下定制需求:
|
当您使用(推荐)CRD-AliyunPipelineConfig时,需要logtail-ds组件版本高于1.8.10。升级详情请参见升级Logtail latest版本。对于LoongCollector组件,则无版本限制。
CRD-AliyunPipelineConfig(推荐)
您只需要创建AliyunPipelineConfig自定义资源即可创建采集配置,资源创建完成后自动生效。
对于通过自定义资源创建的采集配置,其修改只能通过更新相应的自定义资源来实现,在日志服务控制台上对采集配置的修改不会同步到自定义资源中。
登录容器服务管理控制台。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 自定义资源。
在自定义资源页面,单击资源定义(CustomResourceDefinition)页签,然后单击使用YAML创建资源。
根据实际情况修改以下示例YAML的参数,将其复制并粘贴到模板中,然后单击创建完成操作。
说明您可用采集配置生成器生成目标场景YAML脚本,该工具可帮您快速完成配置,减少手动操作。
以下示例YAML文件以多行文本模式采集default命名空间下,标签为
app: ^(.*test.*)$
的Pod中的标准输出,并将其发送到名为k8s-log-<YOUR_CLUSTER_ID>
的Project中的名为k8s-stdout
(自动创建)的Logstore。您需根据实际情况修改YAML中的以下参数:project
,示例:k8s-log-<YOUR_CLUSTER_ID>
。登录日志服务控制台,确定您安装的日志采集组件生成的Project的名称。
IncludeK8sLabel
,示例:app: ^(.*test.*)$
。用于筛选目标Pod的标签,当前条件指定标签键为app,值中包含test的Pod会被采集。Endpoint
和Region
,示例:cn-hangzhou.log.aliyuncs.com
和cn-hangzhou
。
有关YAML文件中
config
项的详情,包括支持的输入、输出、处理插件类型和容器过滤方式,请参见PipelineConfig。完整的YAML参数详情请参见CR参数说明。apiVersion: telemetry.alibabacloud.com/v1alpha1 # 创建一个 ClusterAliyunPipelineConfig kind: ClusterAliyunPipelineConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。该名称也是创建出的日志采集配置名。如果名称重复则不会生效。 name: example-k8s-stdout spec: # 指定目标project project: name: k8s-log-<YOUR_CLUSTER_ID> # 创建用于存储日志的 Logstore logstores: - name: k8s-stdout # 定义日志采集配置 config: # 日志样例(可不填写) sample: | 2024-06-19 16:35:00 INFO test log line-1 line-2 end # 定义输入插件 inputs: # 使用service_docker_stdout插件采集容器内文本日志 - Type: service_docker_stdout Stdout: true Stderr: true # 配置容器信息过滤条件,多个选项之间为“且”的关系。 # 指定待采集容器所在 Pod 所属的命名空间,支持正则匹配。 K8sNamespaceRegex: "^(default)$" # 启用容器元数据预览 CollectContainersFlag: true # 采集Pod标签符合条件的容器。多个条目之间为或的关系 IncludeK8sLabel: app: ^(.*test.*)$ # 配置多行切分配置,单行日志采集无效配置 # 配置行首正则表达式 BeginLineRegex: \d+-\d+-\d+.* # 定义输出插件 flushers: # 使用flusher_sls插件输出到指定Logstore。 - Type: flusher_sls # 需要确保该 Logstore 存在 Logstore: k8s-stdout # 需要确保 endpoint 正确 Endpoint: cn-hangzhou.log.aliyuncs.com Region: cn-hangzhou TelemetryType: logs
CRD-AliyunLogConfig
您只需要创建AliyunLogConfig自定义资源即可创建采集配置,创建完成后自动生效。
对于通过自定义资源创建的采集配置,其修改只能通过更新相应的自定义资源来实现,在日志服务控制台上对采集配置的修改不会同步到自定义资源中。
登录容器服务管理控制台。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 自定义资源。
在自定义资源页面,单击资源定义(CustomResourceDefinition)页签,然后单击使用YAML创建资源。
根据实际情况修改以下示例YAML的参数,将其复制并粘贴到模板中,然后单击创建完成操作。
该YAML脚本将创建名为
simple-stdout-example
的采集配置,并对集群内名称开头为app
的所有容器,以多行模式采集标准输出,发送到名为k8s-log-<YOUR_CLUSTER_ID>
的Project中的名为k8s-stdout
的Logstore。有关YAML文件中的logtailConfig项提供的详情,如支持的输入,输出,处理插件类型与容器过滤方式等,请参见AliyunLogConfigDetail,完整的YAML参数详情请参见CR参数说明。
# 标准输出配置 apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。 name: simple-stdout-example spec: # 设置目标project名称(可不填写,默认为k8s-log-<your_cluster_id>) # project: k8s-log-test # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。 logstore: k8s-stdout # 设置日志采集配置。 logtailConfig: # 设置采集的数据源类型。采集标准输出时,需设置为plugin。 inputType: plugin # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。 configName: simple-stdout-example inputDetail: plugin: inputs: - type: service_docker_stdout detail: # 指定采集stdout和stderr。 Stdout: true Stderr: true # 指定待采集容器所在 Pod 所属的命名空间,支持正则匹配。 K8sNamespaceRegex: "^(default)$" # 指定待采集容器的名称,支持正则匹配。 K8sContainerRegex: "^(app.*)$" # 配置多行切分配置 # 配置行首正则表达式 BeginLineRegex: \d+-\d+-\d+.*
日志服务控制台
登录日志服务控制台。
选择Project列表中您在安装日志采集组件时所使用的Project,如
k8s-log-<YOUR_CLUSTER_ID>
。在Project页面中点击目标Logstore的Logtail配置,添加采集配置,并单击Kubernetes-标准输出-旧版的立即接入。由于上一步骤中已为ACK集群安装日志采集组件,请单击使用现有机器组。
在机器组配置页面K8s场景的ACK Daemonset方式下勾选k8s-group-${your_k8s_cluster_id}机器组并单击>添加到应用机器组中,点击下一步。
创建Logtail采集配置,按下文填写必须配置后点击下一步即可,Logtail采集配置生效大概需要1分钟,请耐心等待。
此处仅介绍必须配置,详细配置请参见Logtail采集配置。
全局配置
在全局配置中输入配置名称。
创建索引和预览数据:日志服务默认开启全文索引,此时查询会索引日志中所有字段。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将生成字段索引,通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。更多信息请参见创建索引。
环境变量
创建应用时配置日志服务。
通过控制台配置
登录容器服务管理控制台,在左侧导航栏单击集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。
在无状态页面上方的命名空间下拉框中设置命名空间,然后单击页面右上角的使用镜像创建。
在应用基本信息页签,设置应用名称,单击下一步,进入容器配置页面。
以下仅介绍日志服务相关的配置。关于其他的应用配置,请参见创建无状态工作负载Deployment。
在日志配置区域,配置日志相关信息。
设置采集配置。
单击+图标创建新的采集配置,每个采集配置由日志库和容器内日志路径两项构成。
日志库:配置Logstore名称,用于指定所采集的日志存储于该Logstore。如果该Logstore不存在,ACK将会自动为您在集群关联的日志服务Project下创建相应的Logstore。
说明新创建的Logstore中的日志默认保存时间为90天。
容器内日志路径:指定为stdout时,表示采集容器的标准输出和标准错误输出。
每一项采集配置都会被自动创建为对应Logstore的一个采集配置,默认采用极简模式(按行)进行采集。
设置自定义Tag。
单击+图标创建新的自定义Tag,每一个自定义Tag都是一个键值对,会拼接到所采集到的日志中,您可以使用它来为容器的日志数据进行标记,例如版本号。
当完成所有配置后,可单击右上角的下一步进入后续流程。
后续操作,可参见创建无状态工作负载Deployment。
通过YAML模板
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。
在无状态页面上方的命名空间下拉框中设置命名空间,然后单击页面右上角的使用YAML创建资源。
配置YAML文件。
YAML模板的语法同Kubernetes语法,但是为了给容器指定采集配置,需要使用
env
来为容器增加采集配置和自定义Tag,并根据采集配置,创建对应的volumeMounts
和volumes
。以下是一个简单的Pod示例:apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: '1' labels: app: deployment-stdout cluster_label: CLUSTER-LABEL-A name: deployment-stdout namespace: default spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: deployment-stdout strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: deployment-stdout cluster_label: CLUSTER-LABEL-A spec: containers: - args: - >- while true; do date '+%Y-%m-%d %H:%M:%S'; echo 1; echo 2; echo 3; echo 4; echo 5; echo 6; echo 7; echo 8; echo 9; sleep 10; done command: - /bin/sh - '-c' - '--' env: - name: cluster_id value: CLUSTER-A - name: aliyun_logs_log-stdout value: stdout image: 'mirrors-ssl.aliyuncs.com/busybox:latest' imagePullPolicy: IfNotPresent name: timestamp-test resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30
通过环境变量来创建您的采集配置和自定义Tag,所有与配置相关的环境变量都采用
aliyun_logs_
作为前缀。创建采集配置的规则如下:
- name: aliyun_logs_log-varlog value: /var/log/*.log
示例中创建了一个采集配置,格式为
aliyun_logs_{key}
,对应的{key}
为log-varlog
。aliyun_logs_log-varlog
:该env表示创建一个Logstore
名为log-varlog
,日志采集路径为/var/log/*.log的配置,对应的日志服务采集配置名称也是log-varlog
,目的是将容器的/var/log/*.log文件内容采集到log-varlog
这个Logstore
中。
创建自定义Tag的规则如下:
- name: aliyun_logs_mytag1_tags value: tag1=v1
配置Tag后,当采集到该容器的日志时,会自动附加对应的字段到日志服务。其中
mytag1
为任意不包含'_'的名称
。
如果您的采集配置中指定了非stdout的采集路径,需要在此部分创建相应的
volumeMounts
。示例中采集配置添加了对/var/log/*.log的采集,因此相应地添加了/var/log的
volumeMounts
。
当YAML编写完成后,单击创建,即可将相应的配置交由Kubernetes集群执行。
配置环境变量的高级参数。
通过容器环境变量配置采集支持多种配置参数。您可以根据实际需求设置高级参数,以满足日志采集的特殊需求。
重要通过容器环境变量配置采集日志的方式不适用于边缘场景。
字段
说明
示例
注意事项
aliyun_logs_{key}
必选项。{key}只能包含小写字母、数字和-。
若不存在aliyun_logs_{key}_logstore,则默认创建并采集到名为{key}的logstore。
当值为stdout时表示采集容器的标准输出;其他值为容器内的日志路径。
- name: aliyun_logs_catalina value: stdout
- name: aliyun_logs_access-log value: /var/log/nginx/access.log
默认采集方式为极简模式。如需解析日志内容,建议使用日志服务控制台,并参见通过DaemonSet方式采集Kubernetes容器文本日志或通过DaemonSet方式采集Kubernetes容器标准输出(旧版)进行配置。
{key}表示日志服务中日志采集配置的名称,需保持在K8s集群内唯一。
aliyun_logs_{key}_tags
可选。值为{tag-key}={tag-value}类型,用于对日志进行标识。
- name: aliyun_logs_catalina_tags value: app=catalina
不涉及。
aliyun_logs_{key}_project
可选。值为指定的日志服务Project。当不存在该环境变量时,为您安装时所选的Project。
- name: aliyun_logs_catalina_project value: my-k8s-project
Project需与您的日志采集组件工作所在的Region一致。
aliyun_logs_{key}_logstore
可选。值为指定的日志服务Logstore。当不存在该环境变量时,Logstore和{key}一致。
- name: aliyun_logs_catalina_logstore value: my-logstore
不涉及。
aliyun_logs_{key}_shard
可选。值为创建Logstore时的shard数,取值范围为[1 , 10]。当不存在该环境变量时,值为2。
说明若logstore已经存在,则该参数不生效。
- name: aliyun_logs_catalina_shard value: '4'
不涉及。
aliyun_logs_{key}_ttl
可选。值为指定的日志保存时间,取值范围为[1 , 3650]。
当取值为3650时,指定日志的保存时间为永久保存。
当不存在该环境变量时,默认指定日志的保存时间为90天。
说明若Logstore已经存在,则该参数不生效。
- name: aliyun_logs_catalina_ttl value: '3650'
不涉及。
aliyun_logs_{key}_machinegroup
可选。值为应用的机器组。当不存在该环境变量时与安装日志采集组件的默认机器组一致。关于该参数的详细使用方法,请参见下文的采集ACK集群容器日志。
- name: aliyun_logs_catalina_machinegroup value: my-machine-group
不涉及。
aliyun_logs_{key}_logstoremode
可选。值为指定的日志服务Logstore的类型,不指定该参数的话,默认值为standard,取值:
说明若Logstore已经存在,则该参数不生效。
standard:支持日志服务一站式数据分析功能,适用于实时监控、交互式分析以及构建完整的可观测性系统等场景。
query:支持高性能查询,索引流量费用约为standard的一半,但不支持SQL分析,适用于数据量大、存储周期长(周、月级别以上)、无日志分析的场景。
- name: aliyun_logs_catalina_logstoremode value: standard
- name: aliyun_logs_catalina_logstoremode value: query
该参数需要logtail-ds镜像版本>=1.3.1。
定制需求1:将多个应用数据采集到同一Logstore
如果您需要将多个应用数据采集到同一Logstore,可以设置 aliyun_logs_{key}_logstore参数,例如以下配置将2个应用的stdout采集到stdout-logstore中。
示例中应用1的
{key}
为app1-stdout
,应用2的{key}
为app2-stdout
。应用1设置的环境变量为:
# 配置环境变量 - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_logstore value: stdout-logstore
应用2设置的环境变量为:
# 配置环境变量 - name: aliyun_logs_app2-stdout value: stdout - name: aliyun_logs_app2-stdout_logstore value: stdout-logstore
定制需求2:将不同应用数据采集到不同的Project
如果您需要将不同应用的数据采集到多个Project中,您需要进行以下操作:
在每个Project中创建一个机器组,选择自定义标识,标识名为
k8s-group-{cluster-id}
,其中{cluster-id}
为您的集群ID,机器组名称可以自定义配置。在每个应用的环境变量中配置project、logstore、machinegroup信息,其中机器组名称为您在上一步创建的机器组名。
如下示例中应用1的
{key}
为app1-stdout
,应用2的{key}
为app2-stdout
。其中如果两个应用在同一个K8s集群中,对应的machinegroup可以使用同一个machinegroup。应用1设置的环境变量为:
# 配置环境变量 - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_project value: app1-project - name: aliyun_logs_app1-stdout_logstore value: app1-logstore - name: aliyun_logs_app1-stdout_machinegroup value: app1-machine-group
应用2设置的环境变量为:
# 应用2 配置环境变量 - name: aliyun_logs_app2-stdout value: stdout - name: aliyun_logs_app2-stdout_project value: app2-project - name: aliyun_logs_app2-stdout_logstore value: app2-logstore - name: aliyun_logs_app2-stdout_machinegroup value: app1-machine-group
步骤三:查询分析日志
登录日志服务控制台。
在Project列表中,单击目标Project,进入对应的Project详情页面。
在对应的日志库右侧的
图标,选择查询分析,查看Kubernetes集群输出的日志。
日志默认字段
文本日志
每条容器文本日志默认包含的字段如下表所示。
字段名称 | 说明 |
__tag__:__hostname__ | 容器宿主机的名称。 |
__tag__:__path__ | 容器内日志文件的路径。 |
__tag__:_container_ip_ | 容器的IP地址。 |
__tag__:_image_name_ | 容器使用的镜像名称。 |
__tag__:_pod_name_ | Pod的名称。 |
__tag__:_namespace_ | Pod所属的命名空间。 |
__tag__:_pod_uid_ | Pod的唯一标识符(UID)。 |
标准输出
Kubernetes集群的每条日志默认上传的字段如下所示。
字段名称 | 说明 |
_time_ | 日志采集时间。 |
_source_ | 日志源类型,stdout或stderr。 |
_image_name_ | 镜像名 |
_container_name_ | 容器名 |
_pod_name_ | Pod名 |
_namespace_ | Pod所在的命名空间 |
_pod_uid_ | Pod的唯一标识 |
相关文档
当您完成日志内容的采集后,您可以在日志服务中使用查询与分析功能,来帮助您了解日志情况,请参考查询与分析快速指引。
当您完成日志内容的采集后,您可以在日志服务中使用可视化功能, 来帮助您直观地统计与了解日志情况,请参考快速创建仪表盘。
当您完成日志内容的采集后,您可以在日志服务中使用告警功能, 来自动提醒您日志中的异常情况,请参考快速设置日志告警。
日志服务仅采集增量日志,历史日志文件采集请参见导入历史日志文件。
容器采集异常排查思路:
查看控制台是否有报错信息,具体操作,请参见如何查看Logtail采集错误信息。
如果控制台无报错信息,排查机器组心跳、Logtail采集配置等内容。具体操作,请参见如何排查容器日志采集异常。