采集自建K8s集群文本日志(DaemonSet方式部署LoongCollector)

更新时间:2025-02-21 09:35:49

本文介绍如何通过DaemonSet方式部署LoongCollector采集自建K8s集群文本日志的流程。

前提条件

  • 已开通日志服务。具体操作,请参见开通日志服务

  • 需要集群Kubernetes 1.6及以上版本。

  • K8s集群已经安装kubectl

注意事项

方案概览

在使用DaemonSet方式部署LoongCollector并采集K8s集群文本日志时,主要有三个步骤:

  1. 安装LoongCollector组件:为您的K8s集群安装LoongCollector组件,以便后续日志服务下发采集配置到LoongCollector并执行日志采集操作。

  2. 创建LoongCollector采集配置:LoongCollector组件会根据采集配置将增量日志采集并处理后上传到Logstore中。本文介绍CRD-AliyunPipelineConfig(推荐)、CRD-AliyunLogConfig、控制台三种创建采集配置的方式。

  3. 查询分析日志:配置成功后会为您自动创建Logstore,您可以查看日志数据。

步骤一:安装LoongCollector

  1. 登录日志服务控制台,创建Project。具体操作,请参见创建项目Project

    建议创建一个以k8s-log-开头的Project,例如k8s-log-${your_k8s_cluster_id}

  2. 登录您的Kubernetes集群,执行如下命令安装LoongCollector及其他依赖组件。

    1. 下载安装包并解压。

      • 中国地域

        目前中国地域暂未开放,建议使用Logtail采集日志。具体操作,请参见采集自建K8s集群文本日志(DaemonSet方式部署Logtail)

      • 海外地域

        wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.5/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
    2. 进入loongcollector-custom-k8s-package目录,修改配置文件./loongcollector/values.yaml

      # ===================== 必需要补充的内容 =====================
      # 本集群要采集到的Project名
      projectName: ""
      # Project所属地域,例如上海:cn-shanghai
      region: ""
      # Project所属主账号uid,请用引号包围,例如"123456789"
      aliUid: ""
      # 使用网络,可选参数:公网Internet,内网Intranet,默认使用公网
      net: Internet
      # 主账号或者子账号的AK,SK
      accessKeyID: ""
      accessKeySecret: ""
      # 自定义集群ID,命名只支持大小写,数字,短划线(-)。
      clusterID: ""

      各参数说明如下所示,请根据实际情况替换。

      参数

      说明

      参数

      说明

      projectName

      配置为您在上文中创建的Project名称。

      region

      您的Project所在的地域ID。例如华东1(杭州)的地域IDcn-hangzhou。更多信息,请参见开服地域

      aliUid

      Project所属账号的阿里云账号(主账号)ID,需使用双引号包裹(""),例如AliUid: "11**99"。如何获取,请参见配置用户标识

      net

      网络类型。可选项:

      • Internet(默认值):公网。

      • Intranet:内网。

      accessKeyID

      Project所属账号的阿里云账号的AccessKey ID。推荐使用RAM用户的AccessKey,并授予RAM用户AliyunLogFullAccess权限。相关操作,请参见创建RAM用户及授权

      accessKeySecret

      Project所属账号的阿里云账号的AccessKey Secret。推荐使用RAM用户的AccessKey并授予RAM用户AliyunLogFullAccess权限。相关操作,请参见创建RAM用户及授权

      clusterID

      自定义集群ID,命名只支持大小写字母、数字、短划线(-)。该参数对应后面操作中的${your_k8s_cluster_id}

      重要

      不同的Kubernetes集群,请勿配置相同的集群ID。

    3. loongcollector-custom-k8s-package目录下执行命令,安装LoongCollector及其他依赖组件。

      bash k8s-custom-install.sh install

安装完成后,在该Project下生成如下资源。

重要

请勿删除名为config-operation-logLogstore。

资源类型

资源名称

作用

示例

资源类型

资源名称

作用

示例

机器组

k8s-group-${your_k8s_cluster_id}

loongcollector-ds的机器组,主要用于日志采集场景。

k8s-group-my-cluster-123

k8s-group-${your_k8s_cluster_id}-cluster

loongcollector-cluster的机器组,主要用于指标采集场景。

说明

暂未开放。

k8s-group-my-cluster-123-cluster

k8s-group-${your_k8s_cluster_id}-singleton

单实例机器组,主要用于部分单实例采集配置。

说明

暂未开放。

k8s-group-my-cluster-123-singleton

Logstore

config-operation-log

用于采集和存储loongcollector-operator 组件日志。

config-operation-log

更新LoongCollector

如果需要更新某个参数,进入loongcollector-custom-k8s-package目录,修改配置文件./loongcollector/values.yaml, 之后执行如下命令:

bash k8s-custom-install.sh update

LoongCollector组件安装部署说明

安装包目录结构说明

loongcollector-custom-k8s-package
├── helm.tar.gz              // helm二机制文件
├── k8s-custom-install.sh    // 安装部署脚本
└── loongcollector           // helm 包
    ├── Chart.yaml
    ├── README.md
    ├── crds
    ├── templates
    └── values.yaml        

核心工作负载说明

名称

类型

功能

名称

类型

功能

loongcollector-ds

DaemonSet

日志采集

loongcollector-operator

Deployment

CR 监听、SLS 资源创建

loongcollector-cluster

Deployment

指标采集

loongcollector-singleton

Deployment

K8s 元信息采集

步骤二:创建采集配置

这里为您介绍三种采集配置方式。建议您只使用一种方法管理LoongCollector采集配置:

配置方式

配置说明

场景适用

配置方式

配置说明

场景适用

(推荐)CRD-AliyunPipelineConfig

通过K8s CRD管理日志采集配置。

适用于需要复杂采集和处理需求以及在自建集群中确保日志与应用版本一致性的场景。

说明

需要logtail组件版本高于0.5.1。升级详情参见升级Logtail

日志服务控制台

图形化界面直接管理,快速部署配置。

适合少量Logtail采集配置的创建和管理,部分高级功能和自定义需求无法通过实现。

CRD-AliyunLogConfig

旧版CRD管理方式。

支持已知场景的旧版管理方式。

需要逐渐迁移到新版本CRD-AliyunPipelineConfig以享受更好的扩展性和稳定性。两类CRD采集方式对比请参见CRD类型

CRD-AliyunPipelineConfig(推荐)
CRD-AliyunLogConfig
日志服务控制台

您只需要创建AliyunPipelineConfig自定义资源即可创建LoongCollector采集配置,资源创建完成后自动生效。

重要

对于通过自定义资源创建的LoongCollector采集配置,其修改只能通过更新相应的自定义资源来实现,在日志服务控制台上对LoongCollector采集配置的修改不会同步到自定义资源中。

  1. 登录您的Kubernetes集群。

  2. 创建名为example-k8s-file.yaml的文件。

    以下示例YAML文件以多行文本模式采集default命名空间下,标签为app: ^(.*test.*)$Pod/data/logs/app_1路径下的test.LOG文件内容,并将其发送到名为k8s-log-testProject中的名为k8s-file(自动创建)的Logstore。您需根据实际情况修改YAML中的以下参数:

    1. project,示例:k8s-log-test

      登录日志服务控制台确定您安装的Logtail生成的Project的名称,通常格式为k8s-log-<YOUR_CLUSTER_ID>

    2. IncludeK8sLabel,示例:app: ^(.*test.*)$。用于筛选目标Pod的标签,当前条件指定标签键为app,值中包含testPod会被采集。

      说明

      如果需要采集集群中名称包含test的所有Pod,可以将IncludeK8sLabel替换为K8sContainerRegex,并使用通配符配置值,如:K8sContainerRegex: ^(.test.)$

    3. FilePaths,示例:/data/logs/app_1/**/test.LOG。更多详情请参见容器文件路径映射

    4. EndpointRegion,示例:cn-hangzhou.log.aliyuncs.comcn-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
  3. 执行kubectl apply -f example.yaml,其中example.yaml替换为您创建的 YAML 文件名称,LoongCollector开始采集容器上的文本日志,并发送到日志服务中。

您只需要创建AliyunLogConfig自定义资源即可创建LoongCollector采集配置,创建完成后自动生效。

重要

对于通过自定义资源创建的LoongCollector采集配置,其修改只能通过更新相应的自定义资源来实现,在日志服务控制台上对LoongCollector采集配置的修改不会同步到自定义资源中。

  1. 登录您的Kubernetes集群。

  2. 创建名为example-k8s-file.yaml的文件。

    YAML脚本将创建名为example-k8s-fileLogtail采集配置,并对集群内名称开头为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.*)$'
  3. 执行kubectl apply -f example.yaml,其中example.yaml替换为您创建的 YAML 文件名称,LoongCollector开始采集容器上的文本日志,并发送到日志服务中。

说明

此方式适合少量LoongCollector采集配置的创建和管理,无需登录Kubernetes集群,操作步骤简单但无法批量配置。

  1. 登录日志服务控制台

  2. 选择Project列表中您在安装Logtail组件时所使用的Project,如k8s-log-<your_cluster_id>。在Project页面中点击目标LogstoreLogtail配置,添加Logtail配置,并点击Kubernetes-文件的立即接入。image

  3. 机器组配置页面K8s场景的ACK Daemonset方式下勾选k8s-group-${your_k8s_cluster_id}机器组并点击>添加到应用机器组中,点击下一步。image

  4. 创建LoongCollector采集配置,按下文填写必须配置后点击下一步即可,LoongCollector采集配置生效大概需要1分钟,请耐心等待。

    此处仅介绍主要配置,详细配置请参见Logtail采集配置

    • 全局配置

      全局配置中输入配置名称。

      image

    • 输入配置

      • Logtail部署模式:选择DaemonSet

      • 文件路径类型:选择待采集的文件路径是容器内路径或宿主机路径。对于通过hostPath方式挂载数据卷的容器,如果您希望直接采集其在宿主机上映射的日志文件,请选择宿主机路径,其余情况请选择容器内路径。

      • 文件路径:代表日志采集的路径,日志路径必须以正斜线(/)开头,例如下图/data/wwwlogs/main/**/*.Log表示/data/wwwlogs/main目录下后缀名为.Log的文件。如果需要设置日志目录被监控的最大深度,即文件路径中通配符**匹配的最大目录深度。可以修改最大目录监控深度的取值,0代表只监控本层目录。image

  5. 创建索引预览数据:日志服务默认开启全文索引,此时查询会索引日志中所有字段。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将生成字段索引,通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。更多信息请参见创建索引image

步骤三:查询分析日志

  1. 登录日志服务控制台

  2. Project列表中,单击目标Project,进入对应的Project详情页面。

    image

  3. 在对应的日志库右侧的图标图标,选择查询分析,查看Kubernetes集群输出的日志。

    image

容器日志文本默认字段

每条容器文本日志默认包含的字段如下表所示。

字段名称

说明

字段名称

说明

__tag__:__hostname__

容器宿主机的名称。

__tag__:__path__

容器内日志文件的路径。

__tag__:_container_ip_

容器的IP地址。

__tag__:_image_name_

容器使用的镜像名称。

__tag__:_pod_name_

Pod的名称。

__tag__:_namespace_

Pod所属的命名空间。

__tag__:_pod_uid_

Pod的唯一标识符(UID)。

  • 本页导读 (1)
  • 前提条件
  • 注意事项
  • 方案概览
  • 步骤一:安装LoongCollector
  • 更新LoongCollector
  • LoongCollector组件安装部署说明
  • 步骤二:创建采集配置
  • 步骤三:查询分析日志
  • 容器日志文本默认字段