LoongCollector是阿里云日志服务(SLS)推出的新一代日志采集 Agent,是 Logtail 的升级版。在采集集群容器日志之前,需要先在Kubernetes上安装LoongCollector组件。本文介绍如何在K8s集群上安装LoongCollector。
核心概念
在开始配置日志采集前,请先了解阿里云日志服务(SLS)的核心资源概念以及LoongCollector在Kubernetes环境中的运行模式。
前提条件
选择合适的安装方式
请根据您的集群类型和需求,选择下表中对应的安装方式:
安装方式 | 适用场景 |
采集同阿里云账号、同地域下的 ACK 托管与专有集群日志。 | |
| |
需要对特定业务应用进行日志采集,且有以下需求的场景:
|
ACK集群安装(DaemonSet模式)
目前,仅阿里云ACK托管与专有集群支持安装Lonngcollector,LoongCollector与Logtail不能同时存在。如果您当前正在使用logtail-ds,并希望升级到 LoongCollector,请先卸载logtail-ds再安装LoongCollector。
通过阿里云ACK容器服务控制台一键安装LoongCollector,默认将集群容器日志采集到同账号同地域的Project,如需跨账号或跨地域采集请参考自建集群安装(DaemonSet模式)。
为已有ACK托管集群安装
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
在日志与监控页签中,找到loongcollector,单击安装。
安装完成后,日志服务会自动在ACK所属地域下创建如下资源,您可登录日志服务控制台查看。
资源类型
资源名称
作用
Project
k8s-log-${cluster_id}
资源管理单元,隔离不同业务日志。
机器组
k8s-group-${cluster_id}
loongcollector-ds的机器组,主要用于日志采集场景。
k8s-group-${cluster_id}-cluster
loongcollector-cluster的机器组,主要用于指标采集场景。
k8s-group-${cluster_id}-singleton
单实例机器组,主要用于部分单实例采集配置。
Logstore
config-operation-log
重要请勿删除此Logstore。
用于存储LoongCollector组件中的alibaba-log-controller日志,其收费标准与普通Logstore完全相同,具体请参见按写入数据量计费模式计费项。建议不要在此Logstore下创建采集配置。
新建ACK托管集群时安装
登录容器服务管理控制台,在左侧导航栏选择集群列表。
单击创建集群,在组件配置页面,勾选使用日志服务。支持创建新Project或使用已有Project。
本文只描述日志服务相关配置,关于更多配置项说明,请参见创建ACK托管集群。
当您选择创建新Project时,日志服务会默认创建如下资源,您可登录日志服务控制台查看。
资源类型
资源名称
作用
Project
k8s-log-${cluster_id}
资源管理单元,隔离不同业务日志。
机器组
k8s-group-${cluster_id}
loongcollector-ds的机器组,主要用于日志采集场景。
k8s-group-${cluster_id}-cluster
loongcollector-cluster的机器组,主要用于指标采集场景。
k8s-group-${cluster_id}-singleton
单实例机器组,主要用于部分单实例采集配置。
Logstore
config-operation-log
重要请勿删除此Logstore。
用于存储LoongCollector组件中的alibaba-log-controller日志,其收费标准与普通Logstore完全相同,具体请参见按写入数据量计费模式计费项。建议不要在此Logstore下创建采集配置。
自建集群安装(DaemonSet模式)
适用场景
自建 IDC 机房中的 Kubernetes 集群
部署在其他云厂商的 Kubernetes 集群
跨账号或跨地域采集阿里云 ACK 集群容器日志
请确保您的自建集群满足Kubernetes 1.6及以上版本。
操作指南
在确认满足前提条件后,您可参考如下步骤手动安装并配置LoongCollector。
下载并解压安装包:在安装并配置了kubectl的机器上,根据集群所在地域选择命令下载LoongCollector及其他依赖组件。
#中国地域 wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh #海外地域 wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
修改配置文件
values.yaml
:进入loongcollector-custom-k8s-package
目录,修改配置文件./loongcollector/values.yaml
。参数说明
values.yaml
# ===================== 必需要补充的内容 ===================== # 本集群要采集的Project名,例如 k8s-log-custom-sd89ehdq projectName: "" # Project所属地域,例如上海:cn-shanghai region: "" # Project所属主账号uid,请用引号包围,例如"123456789" aliUid: "" # 使用网络,可选参数:公网Internet,内网Intranet,默认使用公网 net: Internet # 主账号或者子账号的AK,SK accessKeyID: "" accessKeySecret: "" # 自定义集群ID,命名只支持大小写,数字,短划线(-)。 clusterID: "" # ...省略非必填参数...
projectName
String
(必填)Project名称,LoongCollector将上传日志到该Project中。命名规则如下:
项目名称仅支持小写字母、数字和连字符(-)。
必须以小写字母开头,以小写字母和数字结尾。
名称长度为3~63个字符。
region
String
(必填)Project所属地域ID,请参考地域查看Project所在地域的ID。
aliUid
String
(必填)Project所属的阿里云主账号ID。
net
String
(必填)日志数据传输使用的网络类型。
Internet(默认值):公网。
Intranet:内网。
accessKeyID
String
(必填)Project所属账号的AccessKey ID。推荐使用RAM用户的AccessKey,并授予RAM用户AliyunLogFullAccess系统策略权限。RAM相关概念请参见RAM用户概览。
accessKeySecret
String
(必填)Project所属账号的AccessKey Secret。
clusterID
String
(必填)自定义集群ID,命名只支持大小写字母、数字、短划线(-)。
重要不同的Kubernetes集群,请勿配置相同的集群ID。
执行安装脚本:在
loongcollector-custom-k8s-package
目录下执行如下命令,安装LoongCollector及其他依赖组件。bash k8s-custom-install.sh install
验证安装结果:安装完成后,执行如下命令查看组件状态:
# 检查Pod状态 kubectl get po -n kube-system | grep loongcollector-ds
返回结果示例:
loongcollector-ds-gnmnh 1/1 Running 0 63s
若组件未成功启动(非Running):
检查配置:请确认
values.yaml
配置项是否正确。检查镜像:通过如下命令查看
Events
确认容器镜像是否成功拉取。kubectl describe pod loongcollector-ds -n kube-system
组件安装成功后,日志服务会自动创建如下资源,您可登录日志服务控制台查看。
资源类型
资源名称
作用
Project
values.yaml
文件中自定义的projectName
的值资源管理单元,隔离不同业务日志。
机器组
k8s-group-${cluster_id}
日志采集节点集合。
k8s-group-${cluster_id}-cluster
loongcollector-cluster的机器组,主要用于指标采集场景。
k8s-group-${cluster_id}-singleton
单实例机器组,主要用于部分单实例采集配置。
Logstore
config-operation-log
重要请不要删除该Logstore。
用于存储LoongCollector组件中的alibaba-log-controller日志,其收费标准与普通Logstore完全相同,具体请参见按写入数据量计费模式计费项。建议不要在此Logstore下创建采集配置。
Sidecar模式安装
当您需要进行应用级别的、精细化的日志采集时,可以通过 Sidecar 模式安装LoongCollector,此模式将LoongCollector作为容器注入到您的业务 Pod 中。
优点:资源隔离性好,配置灵活,对其他应用无影响。
缺点:相比 DaemonSet 模式,需要手动修改应用的部署YAML 文件,配置和维护相对复杂。
操作步骤
在确认满足前提条件后,您可参考如下步骤安装并配置LoongCollector。
(可选)部署测试demo:如果您暂无合适的业务容器,或希望先快速验证采集功能,可以使用以下Deployment模板来快速部署一个专用的测试容器。
获取您当前应用的部署YAML:连接待采集容器日志的集群,通过如下命令导出需要采集日志的业务Pod的YAML文件;
# 请将test-demo-deployment替换实际日志来源的容器名称 kubectl get deploy test-demo-deployment -o yaml > current-config.yaml
修改 YAML 文件,注入 Sidecar 容器和共享卷:在YAML文件中参考如下配置示例及参数说明进行修改:
关键参数说明
注入Loongcollector容器所需YAML配置
apiVersion: apps/v1 kind: Deployment metadata: name: your-app-deployment # 这是您的应用部署 spec: # ... 您现有的其他 spec 配置 ... template: spec: containers: # =================================================================== # 步骤 1: 修改您现有的业务容器 # 在您自己的应用容器定义下,找到或添加 volumeMounts 部分。 # =================================================================== - name: your-business-app-container # <--- 这是您的业务容器 image: your-app-image:latest # ... 您业务容器的其他配置 ... volumeMounts: # ... 您可能已有的其他挂载点 ... # --- Begin: 添加以下内容 --- - name: ${shared_volume_name} mountPath: ${shared_volume_path} # 挂载共享存储卷到容器的日志目录 - name: tasksite mountPath: /tasksite # 与 Loongcollector容器通信的共享目录 # --- End: 添加内容 --- # =================================================================== # 步骤 2: 新增 Loongcollector Sidecar 容器 # 在 containers 列表的末尾,粘贴以下完整的 Sidecar 容器定义。 # =================================================================== - name: loongcollector image: ${loongcollector_image} command: ["/bin/sh", "-c"] args: - >- /etc/init.d/ilogtaild start; sleep 10; touch /tasksite/cornerstone; until [[ -f /tasksite/tombstone ]]; do sleep 1; done; sleep 10; /etc/init.d/ilogtaild stop; livenessProbe: exec: command: - /etc/init.d/ilogtaild - status initialDelaySeconds: 30 periodSeconds: 30 env: # 设置时区。请根据kubernetes集群所在地域,配置时区,格式为"地区/城市"。 # 如果没有正确配置时区,可能导致原始日志与处理日志的时间标签不匹配。 - name: TZ value: "${timezone}" - name: ALIYUN_LOGTAIL_USER_ID value: "${your_aliyun_user_id}" - name: ALIYUN_LOGTAIL_USER_DEFINED_ID value: "${your_machine_group_user_defined_id}" - name: ALIYUN_LOGTAIL_CONFIG value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json" # 追加 Pod 环境信息作为日志标签 - name: "ALIYUN_LOG_ENV_TAGS" value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_" # 获取 Pod 和 Node 的信息 - name: "_pod_name_" valueFrom: fieldRef: fieldPath: metadata.name - name: "_pod_ip_" valueFrom: fieldRef: fieldPath: status.podIP - name: "_namespace_" valueFrom: fieldRef: fieldPath: metadata.namespace - name: "_node_name_" valueFrom: fieldRef: fieldPath: spec.nodeName - name: "_node_ip_" valueFrom: fieldRef: fieldPath: status.hostIP volumeMounts: # Loongcollector 容器的日志目录挂载到共享存储卷 - name: ${shared_volume_name} mountPath: ${dir_containing_your_files} # 与业务容器交互的挂载点 - name: tasksite mountPath: /tasksite # =================================================================== # 步骤 3: 定义共享卷 # 在 spec.template.spec 下,与 containers 同级的位置,添加 volumes 定义。 # =================================================================== volumes: # 定义空的共享存储卷用于日志存储 - name: ${shared_volume_name} emptyDir: {} # 定义存储卷用于容器间通信 - name: tasksite emptyDir: medium: Memory
${timezone}
容器时区,请参考支持时区进行配置。
${your_aliyun_user_id}
日志服务所属账号的阿里云主账号ID。
${your_machine_group_user_defined_id}
机器组的自定义标识,用于创建自定义机器组。
重要请确保该标识在您的Project所在地域内唯一。
${your_region_config}
请根据日志服务Project所在地域和网络访问类型填写,格式如下,以Project位于华东1(杭州)为例:
阿里云内网访问时:该配置为
cn-hangzhou
公网访问时:该配置为
cn-hangzhou-internet
。
地域ID请参考地域进行替换。
${logtail_image}
Loongcollector镜像地址,请将镜像地址中的
${region-id}
替换为集群所在的地域对应的RegionID。镜像地址:
aliyun-observability-release-registry.${region-id}.cr.aliyuncs.com/loongcollector/loongcollector:v3.0.12.0-25723a1-aliyun
${shared_volume_name}
自定义设置卷的名称。
重要volumeMounts
节点下的name
参数与volumes
节点下的name
参数需设置为一致,即确保Logtail容器和业务容器挂载相同的卷上。${dir_containing_your_files}
设置挂载路径,即容器待采集文本日志所在目录。
应用更新后的配置:执行如下命令,更新应用。
kubectl apply -f current-config.yaml
验证Loongcollector是否安装成功:执行如下命令,检查新创建的 Pod,确保业务容器和 LoongCollector容器都处于 Running 状态。
kubectl describe pod <YOUR-POD-NAME>
LoongCollector容器状态为
Running
表示安装成功,正常运行。创建机器组:
登录日志服务控制台,单击目标Project。
在左侧导航栏中,选择
,单击机器组右侧的 。在创建机器组对话框中,配置如下参数,然后单击确定。
设置机器组名称。
机器组标识:选择用户自定义标识。
用户自定义标识:您在修改配置文件时定义的
${your_machine_group_user_defined_id}
的值。
创建完成后,在机器组列表,单击新建的机器组,在
区域,查看心跳状态。如果心跳为OK则表示创建成功。若心跳失败,请检查用户标识与用户自定义标识内容是否正确。
常见问题
ACK托管集群如何修改LoongCollector配置以实现跨账号或跨地域采集?
如何采集阿里云ACK Edge、ACK One、ACS、ACK Serverless 集群容器日志?
后续步骤
安装完LoongCollector后,您可以查看Kubernetes集群容器日志采集须知了解Kubernetes容器日志采集的核心原理、关键流程、选型建议和最佳实践,并选择合适的方式创建采集配置: