日志服务提供DaemonSet与Sidecar两种方式部署Logtail以供采集K8s日志,两种方式的差异请参考K8s集群场景Logtail安装采集指引。本文介绍如何通过DaemonSet方式部署Logtail采集自建K8s集群文本日志的流程。
前提条件
注意事项
如果您需要采集集群标准输出日志,请参考采集自建K8s集群标准输出-旧版(DaemonSet方式部署Logtail)。
当您的集群是阿里云ACK集群时,请参考采集阿里云ACK集群文本日志(DaemonSet方式部署Logtail)。
方案概览
在使用DaemonSet方式部署Logtail并采集K8s集群文本日志时,主要有三个步骤:
安装Logtail组件:为您的K8s集群安装Logtail组件,包含DaemonSet logtail-ds,ConfigMap alibaba-log-configuration,Deployment alibaba-log-controller等,以供后续日志服务下发采集配置到Logtail并执行日志采集操作。
创建Logtail采集配置:Logtail组件会根据采集配置将增量日志采集并处理后上传到Logstore中。本文介绍CRD-AliyunPipelineConfig(推荐)、CRD-AliyunLogConfig、控制台三种创建采集配置的方式。
查询分析日志:配置成功后会为您自动创建Logstore,您可以查看日志数据。
步骤一:安装Logtail
目前,alibaba-log-controller组件只支持Kubernetes 1.6及以上版本。
请确保用于执行脚本的机器中,已安装kubectl命令。
登录日志服务控制台,创建Project。具体操作,请参见创建项目Project。
建议创建一个以
k8s-log-
开头的Project,例如k8s-log-${your_k8s_cluster_id}
。登录您的Kubernetes集群,执行如下命令安装Logtail及其他依赖组件。
下载安装包并解压。
中国地域
wget https://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/0.5.3/alibaba-cloud-log-all.tgz; tar xvf alibaba-cloud-log-all.tgz; chmod 744 ./alibaba-cloud-log-all/k8s-custom-install.sh
海外地域
wget https://logtail-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/kubernetes/0.5.3/alibaba-cloud-log-all.tgz; tar xvf alibaba-cloud-log-all.tgz; chmod 744 ./alibaba-cloud-log-all/k8s-custom-install.sh
修改配置文件
./alibaba-cloud-log-all/values.yaml
。# ===================== 必需要补充的内容 ===================== # 目标Project名称。 SlsProjectName: # Project所属地域。 Region: # Project所属阿里云账号ID,需使用双引号("")包裹。 AliUid: "11**99" # 阿里云账号或RAM用户的AccessKey ID和AccessKey Secret,需具备AliyunLogFullAccess权限。 AccessKeyID: AccessKeySercret: # 自定义集群ID,命名只支持大小写,数字,短划线(-)。 ClusterID: # ========================================================== # 是否开启指标采集相关组件,可选参数: true、false, 默认true。 SlsMonitoring: true # 网络类型,可选参数:Internet、Intranet,默认使用Internet。 Net: Internet # 容器运行时是否为containerd,可选参数: true, false, 默认false。 SLS_CONTAINERD_USED: true
命令中各参数说明如下所示,请根据实际情况替换。
参数
说明
参数
说明
SlsProjectName
配置为您在上文中创建的Project名称。
Region
您的Project所在的地域ID。例如华东1(杭州)的地域ID为
cn-hangzhou
。更多信息,请参见开服地域。AliUid
Project所属账号的阿里云账号(主账号)ID,需使用双引号包裹(""),例如
AliUid: "11**99"
。如何获取,请参见获取日志服务所在的阿里云账号(主账号)ID。AccessKeyID
Project所属账号的阿里云账号的AccessKey ID。推荐使用RAM用户的AccessKey,并授予RAM用户AliyunLogFullAccess权限。相关操作,请参见创建RAM用户及授权。
AccessKeySercret
Project所属账号的阿里云账号的AccessKey Secret。推荐使用RAM用户的AccessKey并授予RAM用户AliyunLogFullAccess权限。相关操作,请参见创建RAM用户及授权。
ClusterID
自定义集群ID,命名只支持大小写字母、数字、短划线(-)。该参数对应后面操作中的
${your_k8s_cluster_id}
。不同的Kubernetes集群,请勿配置相同的集群ID。
SlsMonitoring
是否开启指标采集相关组件,可选项:
true(默认值):开启。
false:不开启。
Net
网络类型。可选项:
Internet(默认值):公网。
Intranet:内网。
SLS_CONTAINERD_USED
容器运行时是否为containerd,可选项:
true:开启。
false(默认值):不开启。
在使用containerd作为容器运行时的自建Kubernetes集群中,若未开启相关参数,可能导致日志无法被Logtail采集。
安装Logtail及其他依赖组件。
bash k8s-custom-install.sh; kubectl apply -R -f result
安装完成后,在该Project下自动创建如下日志服务资源。
在自建Kubernetes集群上安装时,默认为Logtail授予
privileged
权限,主要是为避免删除其他Pod时可能出现的container text file busy
错误。更多信息,请参见Bug 1468249、Bug 1441737和 issue 34538。
资源类型 | 资源名称 | 作用 | 示例 |
资源类型 | 资源名称 | 作用 | 示例 |
机器组 | 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收费标准是一致的,具体请参见按写入数据量计费模式计费项。 | 无 |
步骤二:创建Logtail采集配置
这里为您介绍三种采集配置方式。建议您只使用一种方法管理Logtail采集配置:
配置方式 | 配置说明 | 场景适用 |
配置方式 | 配置说明 | 场景适用 |
(推荐)CRD-AliyunPipelineConfig | 通过K8s CRD管理日志采集配置。 | 适用于需要复杂采集和处理需求以及在自建集群中确保日志与应用版本一致性的场景。 需要logtail组件版本高于0.5.1。升级详情参见升级Logtail。 |
日志服务控制台 | 图形化界面直接管理,快速部署配置。 | 适合少量Logtail采集配置的创建和管理,部分高级功能和自定义需求无法通过实现。 |
CRD-AliyunLogConfig | 旧版CRD管理方式。 | 支持已知场景的旧版管理方式。 需要逐渐迁移到新版本CRD-AliyunPipelineConfig以享受更好的扩展性和稳定性。两类CRD采集方式对比请参见CRD类型。 |
您只需要创建AliyunPipelineConfig自定义资源即可创建Logtail采集配置,资源创建完成后自动生效。
对于通过自定义资源创建的Logtail采集配置,其修改只能通过更新相应的自定义资源来实现,在日志服务控制台上对Logtail采集配置的修改不会同步到自定义资源中。
登录您的Kubernetes集群。
创建名为example-k8s-file.yaml的文件。
您可用采集配置生成器生成目标场景YAML脚本,或参考如下示例手动编写。
以下示例YAML文件以多行文本模式采集default命名空间下,标签为
app: ^(.*test.*)$
的Pod中/data/logs/app_1
路径下的test.LOG
文件内容,并将其发送到名为k8s-log-test
的Project中的名为k8s-file
(自动创建)的Logstore。您需根据实际情况修改YAML中的以下参数:project
,示例:k8s-log-test
。登录日志服务控制台,确定您安装的Logtail生成的Project的名称,通常格式为
k8s-log-<YOUR_CLUSTER_ID>
。IncludeK8sLabel
,示例:app: ^(.*test.*)$
。用于筛选目标Pod的标签,当前条件指定标签键为app,值中包含test的Pod会被采集。如果需要采集集群中名称包含test的所有Pod,可以将IncludeK8sLabel替换为K8sContainerRegex,并使用通配符配置值,如:
K8sContainerRegex: ^(.test.)$
。FilePaths
,示例:/data/logs/app_1/**/test.LOG
。更多详情请参见容器文件路径映射。Endpoint
和Region
,示例:cn-hangzhou.log.aliyuncs.com
和cn-hangzhou
。
有关YAML文件中
config
项的详情,包括支持的输入、输出、处理插件类型和容器过滤方式,请参见PipelineConfig。完整的YAML参数详情请参见CR参数说明。apiVersion: telemetry.alibabacloud.com/v1alpha1 kind: ClusterAliyunPipelineConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。该名称也是创建出的Logtail采集配置名,如果名称重复则不会生效。 name: example-k8s-file spec: # 指定目标Project project: name: k8s-log-test logstores: # 创建名为 k8s-file的Logstore - name: k8s-file # 定义Logtail采集配置 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
执行
kubectl apply -f example.yaml
,其中example.yaml
替换为您创建的 YAML 文件名称,Logtail开始采集容器上的文本日志,并发送到日志服务中。
您只需要创建AliyunLogConfig自定义资源即可创建Logtail采集配置,创建完成后自动生效。
对于通过自定义资源创建的Logtail采集配置,其修改只能通过更新相应的自定义资源来实现,在日志服务控制台上对Logtail采集配置的修改不会同步到自定义资源中。
登录您的Kubernetes集群。
创建名为example-k8s-file.yaml的文件。
该YAML脚本将创建名为
example-k8s-file
的Logtail采集配置,并对集群内名称开头为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文件中的logtailConfig项提供的Logtail的详情,如支持的输入,输出,处理插件类型与容器过滤方式等,请参见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 # 设置Logtail采集配置。 logtailConfig: # 设置采集的数据源类型。采集文本日志时,需设置为file。 inputType: file # 设置Logtail采集配置的名称,必须与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.*)$'
执行
kubectl apply -f example.yaml
,其中example.yaml
替换为您创建的 YAML 文件名称,Logtail开始采集容器上的文本日志,并发送到日志服务中。
此方式适合少量Logtail采集配置的创建和管理,无需登录Kubernetes集群,操作步骤简单但无法批量配置。
登录日志服务控制台。
选择Project列表中您在安装Logtail组件时所使用的Project,如
k8s-log-<your_cluster_id>
。在Project页面中点击目标Logstore的Logtail配置,添加Logtail配置,并点击Kubernetes-文件的立即接入。在机器组配置页面K8s场景的ACK Daemonset方式下勾选k8s-group-${your_k8s_cluster_id}机器组并点击>添加到应用机器组中,点击下一步。
创建Logtail采集配置,按下文填写必须配置后点击下一步即可,Logtail采集配置生效大概需要1分钟,请耐心等待。
此处仅介绍主要配置,详细配置请参见Logtail采集配置。
全局配置
在全局配置中输入配置名称。
输入配置
Logtail部署模式:选择DaemonSet。
文件路径类型:选择待采集的文件路径是容器内路径或宿主机路径。对于通过hostPath方式挂载数据卷的容器,如果您希望直接采集其在宿主机上映射的日志文件,请选择宿主机路径,其余情况请选择容器内路径。
文件路径:代表日志采集的路径,日志路径必须以正斜线(/)开头,例如下图
/data/wwwlogs/main/**/*.Log
表示/data/wwwlogs/main
目录下后缀名为.Log的文件。如果需要设置日志目录被监控的最大深度,即文件路径中通配符**
匹配的最大目录深度。可以修改最大目录监控深度的取值,0代表只监控本层目录。
创建索引和预览数据:日志服务默认开启全文索引,此时查询会索引日志中所有字段。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将生成字段索引,通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。更多信息请参见创建索引。
步骤三:查询分析日志
登录日志服务控制台。
在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)。 |
相关文档
当您完成日志内容的采集后,您可以在日志服务中使用查询与分析功能,来帮助您了解日志情况,请参考查询与分析快速指引。
当您完成日志内容的采集后,您可以在日志服务中使用可视化功能, 来帮助您直观地统计与了解日志情况,请参考快速创建仪表盘。
当您完成日志内容的采集后,您可以在日志服务中使用告警功能, 来自动提醒您日志中的异常情况,请参考快速设置日志告警。
日志服务仅采集增量日志,历史日志文件采集请参见导入历史日志文件。
容器采集异常排查思路:
查看控制台是否有报错信息,具体操作,请参见如何查看Logtail采集错误信息。
如果控制台无报错信息,排查机器组心跳、Logtail采集配置等内容。具体操作,请参见如何排查容器日志采集异常。
- 本页导读 (1)
- 前提条件
- 注意事项
- 方案概览
- 步骤一:安装Logtail
- 步骤二:创建Logtail采集配置
- 步骤三:查询分析日志
- 容器日志文本默认字段
- 相关文档