将日志服务接入注册集群

注册集群接入日志服务可以为分布在各处的Kubernetes集群提供统一的管理方式。本文介绍如何通过阿里云容器服务Kubernetes版中的应用将日志服务接入注册集群。

前提条件

步骤一:为日志服务组件配置RAM权限

通过onectl配置

  1. 在本地安装配置onectl。具体操作,请参见通过onectl管理注册集群

  2. 执行以下命令,为日志服务组件配置RAM权限。

    onectl ram-user grant --addon logtail-ds

    预期输出:

    Ram policy ack-one-registered-cluster-policy-logtail-ds granted to ram user ack-one-user-ce313528c3 successfully.

通过控制台配置

在注册集群中安装组件之前,您需要在接入集群中设置AccessKey用来访问云服务的权限。设置AccessKey之前,您需要创建RAM用户并为其添加访问相关云资源的权限。

  1. 创建RAM用户。具体操作,请参见创建RAM用户

  2. 创建权限策略,限策略内容如下。具体操作,请参见创建自定义权限策略

    展开查看Logtail组件需要的权限策略信息

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "log:CreateProject",
                    "log:GetProject",
                    "log:DeleteProject",
                    "log:CreateLogStore",
                    "log:GetLogStore",
                    "log:UpdateLogStore",
                    "log:DeleteLogStore",
                    "log:CreateConfig",
                    "log:UpdateConfig",
                    "log:GetConfig",
                    "log:DeleteConfig",
                    "log:CreateMachineGroup",
                    "log:UpdateMachineGroup",
                    "log:GetMachineGroup",
                    "log:DeleteMachineGroup",
                    "log:ApplyConfigToGroup",
                    "log:GetAppliedMachineGroups",
                    "log:GetAppliedConfigs",
                    "log:RemoveConfigFromMachineGroup",
                    "log:CreateIndex",
                    "log:GetIndex",
                    "log:UpdateIndex",
                    "log:DeleteIndex",
                    "log:CreateSavedSearch",
                    "log:GetSavedSearch",
                    "log:UpdateSavedSearch",
                    "log:DeleteSavedSearch",
                    "log:CreateDashboard",
                    "log:GetDashboard",
                    "log:UpdateDashboard",
                    "log:DeleteDashboard",
                    "log:CreateJob",
                    "log:GetJob",
                    "log:DeleteJob",
                    "log:UpdateJob",
                    "log:PostLogStoreLogs",
                    "log:CreateSortedSubStore",
                    "log:GetSortedSubStore",
                    "log:ListSortedSubStore",
                    "log:UpdateSortedSubStore",
                    "log:DeleteSortedSubStore",
                    "log:CreateApp",
                    "log:UpdateApp",
                    "log:GetApp",
                    "log:DeleteApp",
                    "cs:DescribeTemplates",
                    "cs:DescribeTemplateAttribute"
                ],
                "Resource": [
                    "*"
                ],
                "Effect": "Allow"
            }
        ]
    
  3. 为RAM用户添加权限。具体操作,请参见为RAM用户授权

  4. 为RAM用户创建AccessKey。具体操作,请参见获取AccessKey

  5. 使用AccessKey在注册集群中创建名为alibaba-addon-secret的Secret资源。

    执行以下命令创建Logtail组件使用的Secret。

    kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=<your AccessKey ID>' --from-literal='access-key-secret=<your AccessKey Secret>'
    说明

    <your AccessKey ID><your AccessKey Secret>为上一步获取的AccessKey信息。

步骤二:安装logtail-ds组件

通过onectl安装

执行以下命令,安装logtail-ds组件。

onectl addon install logtail-ds

预期输出:

Addon logtail-ds, version **** installed.

通过控制台安装

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 组件管理页面,单击日志与监控页签,找到logtail-ds组件,在卡片右下方单击安装

  4. 提示对话框单击确定

(可选)步骤三:配置采集全局所有Pod的日志输出

文本日志

如需配置全局Pod的文本日志,您需要通过kubectl连接注册集群后,部署如下配置内容,采集全局所有Pod的文本日志。

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
  name: test-file                  # 资源名,在当前Kubernetes集群内唯一。
spec:
  project: k8s-log-c326bc86****    # 可选配置,Project名称,可自定义,推荐使用[k8s-log-集群ID]命名。
  logstore: test-file              # 必选配置,Logstore名称,如果不存在,日志服务会自动创建。
  logtailConfig:                   # Logtail配置。
    inputType: file                # 采集的数据源类型,file表示文本日志,plugin表示标准输出。
    configName: test-file          # Logtail配置的名称,必须与资源名(metadata.name)相同 。
    inputDetail:                   # Logtail配置的详细信息。
      logType: common_reg_log      # 通过极简模式采集文本日志。
      logPath: /log/               # 日志文件所在路径。
      filePattern: "*.log"         # 日志文件的名称,支持通配符星号(*)和半角问号(?),例如log_*.log。
      dockerFile: true             # 采集容器内的文件,dockerFile设置为true。
      advanced:                    # 设置容器过滤条件。
        k8s:
          K8sNamespaceRegex: ^(default)$
          K8sPodRegex: '^(nginx-log-demo.*)$'
          K8sContainerRegex: ^(nginx-log-demo-0)$
          IncludeK8sLabel:
            job-name: "^(nginx-log-demo.*)$"

更多详细的参数说明,请参见Logtail配置

标准输出

如需配置全局Pod的标准输出,您需要通过kubectl连接注册集群后,部署如下配置内容,采集全局所有Pod的标准输出。成功部署后,将会自动生成名为stdout-logstore的Logstore并将日志采集进去。

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
  # your config name, must be unique in you k8s cluster.
  name: stdout-collector
spec:
  # logstore name to upload log.
  logstore: stdout-logstore
  # logtail config detail
  logtailConfig:
    # docker stdout's input type is 'plugin'.
    inputType: plugin
    # logtail config name, should be same with [metadata.name].
    configName: stdout-collector
    inputDetail:
      plugin:
        inputs:
          -
            type: service_docker_stdout
            detail:
              # collect stdout and stderr
              Stdout: true
              Stderr: true
              # collect all container's stdout except containers with "COLLECT_STDOUT_FLAG:false" in docker env config.

步骤四:配置日志服务