【推荐】使用AliyunPipelineConfig管理采集配置

AliyunPipelineConfig是日志服务自定义的一类CRD,您可以通过配置YAML文件创建对应的CR,从而管理iLogtail采集配置。本文主要介绍通过AliyunPipelineConfig管理iLogtail采集配置的操作步骤。

前提条件

  • 已安装iLogtail组件。目前仅安装Logtail组件(自建Kubernetes集群)方式安装的0.5.1及以上版本的Logtail组件支持AliyunPipelineConfig。容器服务ACK目前不支持AliyunPipelineConfig。

  • AliyunPipelineConfig需要alibaba-log-controller Deployment的镜像版本号不低于0.5.0。

  • 目标容器持续产生日志。

    重要

    iLogtail只采集增量日志。如果下发iLogtail配置后,日志文件无更新,则iLogtail不会采集该文件中的日志。更多信息,请参见读取日志

配置步骤

重要

alibaba-log-controller定期会同步AliyunPipelineConfig所定义的iLogtail采集配置到服务端,所以对于通过CR创建的iLogtail采集配置,其修改只能通过更新相应的CR来实现,在日志服务控制台配置的Logtail采集配置会被CR覆盖,建议只使用一种方法管理Logtail采集配置。

创建iLogtail采集配置

您需要创建AliyunPipelineConfig的CR,alibaba-log-controller会根据CR自动创建iLogtail采集配置。创建完成后,系统自动应用该iLogtail采集配置。

创建步骤:

  1. 获取集群KubeConfig并通过kubectl工具连接集群

  2. 执行如下命令创建cube.yaml文件,请根据实际情况替换文件名。

vim cube.yaml
  1. 在YAML文件中输入如下脚本,并根据实际情况设置其中的参数。CR结构的详细参数请参见CR参数说明

apiVersion: telemetry.alibabacloud.com/v1alpha1 # 使用默认值,无需修改。
kind: ClusterAliyunPipelineConfig               # 使用默认值,无需修改。
metadata:
  name: test-config                             # 设置资源名,在当前Kubernetes集群内唯一。
spec:
  project:                                      # 设置目标Project名称。
    name: k8s-your-project                      
  config:                                       # 设置iLogtail采集配置。
    inputs:                                     # 设置iLogtail采集配置里的输入插件
      ...
    flushers:                                   # 设置iLogtail采集配置里的输出插件
      ...
  1. 执行如下命令创建AliyunPipelineConfig的CR,alibaba-log-controller会根据该CR自动创建iLogtail采集配置,从而使iLogtail采集配置生效。iLogtail采集配置生效后,Logtail开始采集数据,并发送到日志服务中。cube.yaml为文件名,请根据实际情况替换。

kubectl apply -f cube.yaml

查看iLogtail采集配置

  • 查看当前Kubernetes集群中所有由AliyunPipelineConfig创建的iLogtail采集配置。

    您可以执行以下命令,查看所有由AliyunPipelineConfig创建的iLogtail采集配置。

    kubectl get clusteraliyunpipelineconfigs
  • 查看由AliyunPipelineConfig创建的iLogtail采集配置的详细信息和状态。

    您可以执行以下命令进行查看。其中,<config_name>AliyunPipelineConfig的名称,请根据实际情况替换。

    kubectl get clusteraliyunpipelineconfigs <config_name> -o yaml

    返回结果参考如下所示,可以根据status查看iLogtail采集配置的应用情况。

    apiVersion: telemetry.alibabacloud.com/v1alpha1
    kind: ClusterAliyunPipelineConfig
    metadata:
      creationTimestamp: null
      finalizers:
        - finalizer.pipeline.alibabacloud.com
      name: example-config
    # 预期的配置
    spec:
      config:
        flushers:
          - Endpoint: cn-hangzhou-intranet.log.aliyuncs.com
            Logstore: example-config-logstore
            Region: cn-hangzhou
            TelemetryType: logs
            Type: flusher_sls
        inputs:
          - FilePaths:
              - /var/log/*.log
            Type: input_file
        processors:
          - SourceKey: content
            Type: processor_parse_json_native
      logstores:
        - name: example-config-logstore
      project:
        name: k8s-log-clusterid
    # 应用状态
    status:
      # CR 是否应用成功
      success: true
      # CR 当前的状态信息
      message: success
      # 当前 status 的更新时间
      lastUpdateTime: "2024-06-13T12:02:19.133422+08:00"
      # 上次成功应用的配置信息,该配置信息为填充默认值后实际生效的配置
      lastAppliedConfig:
        # 上次成功应用的时间
        appliedTime: "2024-06-13T12:02:19.133422+08:00"
        # 上次成功应用的配置详情
        config:
          configTags:
            sls.crd.cluster: clusterid
            sls.crd.kind: ClusterAliyunPipelineConfig
            sls.logtail.channel: CRD
          flushers:
            - Endpoint: cn-hangzhou-intranet.log.aliyuncs.com
              Logstore: example-config-logstore
              Region: cn-hangzhou
              TelemetryType: logs
              Type: flusher_sls
          global: null
          inputs:
            - FilePaths:
                - /var/log/*.log
              Type: input_file
          name: example-config
          processors:
            - SourceKey: content
              Type: processor_parse_json_native
        logstores:
          - appendMeta: true
            autoSplit: true
            encryptConf: {}
            maxSplitShard: 64
            name: example-config-logstore
            shardCount: 2
            ttl: 30
        machineGroups:
          - name: k8s-group-clusterid
        project:
          description: k8s log project, created by alibaba cloud log controller
          endpoint: cn-hangzhou.log.aliyuncs.com
          name: k8s-log-clusterid

更新iLogtail采集配置

您只需要修改已有的AliyunPipelineConfig的YAML文件并重新应用,就可以更新iLogtail采集配置。

  1. 获取集群KubeConfig并通过kubectl工具连接集群

  2. 编辑已有的AliyunPipelineConfig文件。cube.yaml为文件名,请根据实际情况替换。

vim cube.yaml
  1. 在YAML文件中修改配置参数。

  2. 执行如下命令使iLogtail采集配置生效。cube.yaml为文件名,请根据实际情况替换。

kubectl apply -f cube.yaml

删除iLogtail采集配置

如果您要删除iLogtail采集配置,只需删除对应的CR即可。其中,<config_name>AliyunPipelineConfig的名称,请根据实际情况替换。

kubectl delete clusteraliyunpipelineconfigs <config_name>
重要
  • 在iLogtail采集配置成功删除后,CR会释放。

  • 如果iLogtail采集配置删除失败,CR不会被释放,可以查看CR的status中的报错信息。如果想忽略报错直接删除CR,可以手动删除CR metadata中的finalizers字段。

CR参数说明

  • ApiVersion

    固定为telemetry.alibabacloud.com/v1alpha1

  • Kind

    固定为ClusterAliyunPipelineConfig

  • Metadata

    参数

    数据类型

    是否必填

    说明

    name

    string

    CR的唯一标识,同时也是创建出的iLogtail采集配置的名字。

    注意:

    该参数会作为iLogtail采集配置名称使用,在所属Project内唯一,且创建成功后无法修改。需要满足以下条件:

    只能包括小写字母、数字、-和_。

    必须以小写字母或数字开头和结尾。

    长度必须在2~128字符之间。

  • Spec

    参数

    数据类型

    是否必填

    说明

    project

    PipelineProject

    目标Project的信息。

    说明

    project字段在CR创建后不允许更改,如需切换project请创建新的CR。

    config

    PiplineConfig

    定义iLogtail 采集配置详情。

    logstores

    PipelineLogstore

    需要创建的Logstore列表,支持创建多个Logstore。

    说明
    • name以外的所有参数仅在创建logstore时生效。

    • 该列表并不指定iLogtail采集配置的发送目标,只会按需创建Logstore。iLogtail采集配置的发送目标,由config中的flusher插件决定。如果 iLogtail 采集配置中指定的目标 Logstore 已存在,此处可不填写。

    • 该列表只可以在logstores列表中新增/删除logstore定义,不支持修改已定义的Logstore。

    machineGroups

    PipelineMachineGroup

    需要与iLogtail采集配置关联的机器组列表。安装logtail-ds组件时,日志服务会自动创建名为k8s-group-${your_k8s_cluster_id}的机器组,默认值为仅包含该机器组的列表。

    说明

    alibaba-log-controller会保证iLogtail采集配置关联的机器组严格等于machineGroups指定的机器组,不在machineGroups中的机器组会被解除关联。

    enableUpgradeOverride

    bool

    默认值为false。当集群中存在AliyunLogConfig定义的采集配置、且与当前的AliyunPipelineConfig指向同一个iLogtail采集配置时,可以:

    • 打开此开关:alibaba-log-controller会对已有的AliyunLogConfig定义的采集配置进行覆盖升级。

    • 不打开此开关:采集配置存在冲突,AliyunPipelineConfig应用失败。

    说明
    • 指向同一个iLogtail采集配置的定义:

      • 目标project相同。

        AliyunLogConfig中为集群默认的project或spec.project。AliyunPipelineConfig中为spec.project.name。

      • 目标iLogtail采集配置名相同。

        AliyunLogConfig中为spec.logtailConfig.configName。AliyunPipelineConfig中为metadata.Name。

    • 覆盖升级的定义:

      首先,AliyunPipelineConfig生效,并更新iLogtail采集配置。

      然后,如果AliyunPipelineConfig成功生效,会删除集群内指向同一个iLogtail采集配置的AliyunLogConfig。

      最终,覆盖更新完成。

    • PipelineProject

      说明

      project字段在CR创建后不允许更改,如需切换project请创建新的CR。

      参数

      数据类型

      是否必填

      说明

      name

      string

      目标 Project 的名称。

      说明

      如果您所指定的Project不存在,日志服务会自动创建。

      description

      string

      目标 Project 的描述。

      说明

      该参数仅在创建Project时生效。

      endpoint

      string

      目标Project的服务入口。更多信息,请参见服务入口默认为当前集群所在的地域,如果目标 Project 与集群不在同一地域,需要配置该参数。

      说明

      该参数仅控制采集配置所在的region,iLogtail数据投递到该region需要另外配置iLogtail的config_server_address、data_server_list,参考Logtail配置文件和记录文件

      uid

      string

      目标账号的uid。默认使用当前集群所属账号。如果需要跨账号投递日志,请配置该参数,并在 alibaba-log-controller 的环境变量中配置ALICLOUD_LOG_ACCOUNT_INFOS={"<uid>":{"accessKeyID":"<your_access_key_id>","accessKeySecret":"<your_access_key_secret>"}}

      说明

      该参数仅控制project所属的账号,iLogtail数据投递到该账号需要另外配置iLogtail的用户标识,参考配置用户标识

    • PiplineConfig

      配置中的各项参数要求与CreateLogtailPipelineConfig接口一致。configName会使用CR的metadata.Name,不可单独配置。

      参数

      数据类型

      是否必填

      说明

      sample

      string

      日志样例。支持多条日志,总长度不超过1500字节。

      global

      object

      全局配置。详细信息,请参见请求参数

      inputs

      object列表

      输入插件列表。详细信息与插件参数,参见请求参数

      说明

      目前,只允许配置 1 个输入插件。

      processors

      object列表

      处理插件列表。详细信息与插件参数,请参见请求参数

      aggregators

      object列表

      聚合插件列表。详细信息与插件参数,请参见请求参数

      flushers

      object列表

      输出插件列表。详细信息与插件参数,请参见请求参数

      说明

      目前,只允许存在 1 个 flusher_sls 插件。

      configTags

      map

      用于标记iLogtail采集配置的自定义标签。

    • PipelineLogstore

      说明

      name以外的所有参数仅在创建logstore时生效。

      参数

      数据类型

      是否必填

      说明

      name

      string

      需要创建的Logstore的名称。

      queryMode

      string

      目标Logstore的类型。更多信息,请参见Logstore类型。默认值为standard,可选值:

      • query:查询型Logstore。

      • standard:标准型Logstore。

      ttl

      int

      目标Logstore的数据存储的时间(以天为单位)。更多信息,请参见数据保存时间。默认值为30,取值范围为1~3650,如果配置为3650,表示永久保存。

      hotTtl

      int

      1. 目标Logstore的热数据存储的时间(以天为单位)。更多信息,请参见智能存储分层。默认值为0,需要小于ttl且大于等于 7。

      shardCount

      int

      目标Logstore的Shard数量。更多信息,请参见管理Logstore。默认值为2,取值范围为1~100。

      maxSplitShard

      int

      目标 Logstore 的最大自动分裂Shard数量。更多信息,请参见自动分裂Shard。默认值为64,取值范围为1~256。

      autoSplit

      bool

      目标Logstore是否开启自动拆分Shard功能。更多信息,请参见自动分裂Shard。默认值为true。

      telemetryType

      string

      目标 Logstore 的可观测数据类型。更多信息,请参见telemetryType。默认值为None,可选值:

      • None:日志类型。

      • Metrics:Metrics 类型。

      appendMeta

      bool

      目标Logstore是否开通记录外网IP功能。更多信息,请参见记录外网IP。默认值为true。

      enableTracking

      bool

      目标Logstore是否启用Web Tracking。更多信息,请参见WebTracking。默认值为false。

      encryptConf

      object

      目标Logstore的加密配置信息。更多信息,请参见通用数据结构。默认值为空。

      meteringMode

      string

      目标Logstore的计费模式。更多信息,请参见计费模式。默认值为空,可选值:

      • ChargeByFunction:按功能计费

      • ChargeByDataIngest:按写入量计费。

      说明

      如果Logstore的queryMode为query,只支持按功能计费。

      如果账号未开通写入量计费,无法配置为ChargeByDataIngest。

    • PipelineMachineGroup

      参数

      数据类型

      是否必填

      说明

      name

      string

      需要与iLogtail采集配置关联的机器组名。

      说明

      如果机器组不存在,alibaba-log-controller会自动创建同名的标识型机器组,标识与机器组名相同。详细信息,参见创建用户自定义标识机器组。该行为仅在创建机器组时生效。