天天看点

使用日志服务进行Kubernetes日志采集

阿里云容器服务Kubernetes集群集成了日志服务(SLS),您可在创建集群时启用日志服务,快速采集Kubernetes 集群的容器日志,包括容器的标准输出以及容器内的文本文件。

如果您尚未创建任何的 Kubernetes 集群,可以按照本节的步骤来进行操作:

登录 ​​容器服务管理控制台​​。

单击左侧导航栏中集群,单击右上角创建Kubernetes集群。

进入创建页面后,参见​​创建Kubernetes集群​​进行配置。

拖动到页面底部,勾选日志服务配置项,表示在新建的 Kubernetes 集群中安装日志插件。

当勾选了使用日志服务后,会出现创建 Project(日志服务管理日志的组织结构,具体可见​​项目​​)的提示,目前有两种方式可选:

选择一个现有的 Project 来管理采集的日志。

使用日志服务进行Kubernetes日志采集

自动创建一个新的 Project 来管理采集的日志,Project 会自动命名为 k8s-log-{ClusterID}

,ClusterID 表示您新建的 Kubernetes 集群的唯一标识。

使用日志服务进行Kubernetes日志采集

配置完成后,单击右上角创建集群,在弹出的窗口中单击确定,完成创建。

完成创建后,您可在集群列表页面看到创建的Kubernetes集群。

使用日志服务进行Kubernetes日志采集

如果您先前已创建了 Kubernetes 集群,可以根据本节的内容来进行所需的操作以使用日志服务:

未安装:手动安装日志服务组件。

已安装但版本较老:升级日志服务组件,若不升级则只能使用日志服务控制台或 CRD 进行采集配置。

检查日志服务组件版本

通过cloudshell 连接 Kubernetes 集群。

详细内容,可参考在CloudShell上通过kubectl管理Kubernetes集群 。

快速判定是否需要进行升级或迁移操作,命令如下:

<code>$ kubectl describe daemonsets -n kube-system logtail-ds | grep ALICLOUD_LOG_DOCKER_ENV_CONFIG</code>

如果输出结果为 ALICLOUD_LOG_DOCKER_ENV_CONFIG: true

,表示您可正常使用,不需要进行升级或迁移。

其他情况则需要进行后续检查。

执行以下检查命令确定是否是采用 helm 安装。

<code>$ helm get alibaba-log-controller | grep CHART CHART: alibaba-cloud-log-0.1.1</code>

输出内容中的 0.1.1 表示日志服务组件的版本,请使用 0.1.1 及以上版本的组件,如果版本过低,请参照​​升级日志服务组件​​进行升级。如果您已采用 helm 安装且版本正确,可以跳过后续步骤。

如果无任何内容输出,表示未采用 helm 安装日志服务组件,但可能采用了 DaemonSet 的方式安装,请根据后续步骤进行检查。

DaemonSet 分为新旧两种方式:

<code>$ kubectl get daemonsets -n kube-system logtail</code>

如果无输出结果或内容是 No resources found.

,则表明未安装日志服务组件,请参照操作​​手动安装日志服务组件​​。

如果有正确的输出结果表示使用旧 DaemonSet 方式进行了安装,需要进行升级,请参照​​升级日志服务组件​​操作。

在cloudshell中获取您的主账号aliuid,命令为 echo $ALIBABA_CLOUD_ACCOUNT_ID

替换${your_k8s_cluster_id}、{your_ali_uid}、{your_k8s_cluster_region_id}参数后执行以下安装命令。

<code>wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id ${your_k8s_cluster_id} --ali-uid ${your_ali_uid} --region-id ${your_k8s_cluster_region_id}</code>

参数说明:

your_k8s_cluster_id:您的Kubernetes集群ID。

your_ali_uid:您在步骤​​2​​中获取的aliuid。

your_k8s_cluster_region_id:您的Kubernetes集群所在的Region,可在​​地域和可用区​​中查看到,如在杭州,则为cn-hangzhou。

安装示例

如果您已安装旧版本的日志服务组件(通过 helm 或 DaemonSet),可以按照以下操作进行升级或迁移。

说明 通过cloudshell 连接 Kubernetes 集群。

详细内容可参考​​在CloudShell上通过kubectl管理Kubernetes集群​​ 。

Helm 升级(推荐)

下载最新的日志服务组件 helm 包,命令如下:

<code>wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alibaba-cloud-log.tgz -O alibaba-cloud-log.tgz</code>

使用 helm upgrade 进行升级,命令如下:

<code>helm get values alibaba-log-controller --all &gt; values.yaml &amp;&amp; helm upgrade alibaba-log-controller alibaba-cloud-log.tgz --recreate-pods -f values.yaml</code>

DaemonSet升级

若您不是使用helm的方式安装的日志组件,可通过修改DaemonSet模板的方式进行升级。若您的镜像账号为acs,请参考​​镜像仓库​​中最新的tag,将镜像中的tag更新至最新版本;若您的镜像账号为log-service,请参考​​镜像仓库​​中最新的tag,将镜像中的tag更新至最新版本。

说明

用户升级tag后,如果Logtail没有滚动更新,您需要手动删除Logtail的Pod,触发强制更新。

查看Logtail是否运行在所有节点(包括master节点)上。若没有,请为Logtail设置​​tolerations​​。

更多最新配置方式,请参考​​最新helm包中的相关配置​​。

此升级步骤适用于检查日志服务组件版本时结果为使用旧方式 DaemonSet 的用户,该方式不支持在容器服务中进行日志服务配置,您可按如下操作进行升级迁移:

按照新版本的方式安装,安装命令最后新增一个参数为您之前 Kubernetes 集群使用的日志服务 Project 名。

例如 Project 名为 k8s-log-demo,集群 ID 为 c12ba2028cxxxxxxxxxx6939f0b,则安装命令为:

<code>wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id c12ba2028cxxxxxxxxxx6939f0b --ali-uid 19*********19 --region-id cn-hangzhou --log-project k8s-log-demo</code>

安装成功后,进入​​日志服务控制台​​。

在日志服务控制台,将相应 Project 以及 Logstore 下的历史采集配置应用到新的机器组 k8s-group-${your_k8s_cluster_id}

一分钟后,将历史采集配置从历史的机器组中解绑。

观察日志采集正常后,可以选择删除之前安装的 logtail daemonset。

说明 升级期间会有部分日志重复;CRD 配置管理方式只对使用 CRD 创建的配置生效(由于历史配置使用非 CRD 方式创建,因此历史配置不支持 CRD 管理方式)。

在容器服务中,您可以在创建应用的同时配置日志服务对容器的日志进行采集,目前支持以控制台向导和 YAML 模板两种方式进行创建。

控制台向导创建

在 Kubernetes 菜单下,单击左侧导航栏中的应用 &gt; 部署,然后单击页面右上角的使用镜像创建。

设置应用名称、部署集群、命名空间、副本数量和类型,单击下一步,进入容器配置页面。

使用日志服务进行Kubernetes日志采集

进入容器配置页面中,本例中选择nginx镜像,对容器采集进行配置。

以下仅介绍日志服务相关的配置,其他的应用配置可参见使用镜像创建无状态Deployment应用。

进行日志配置。单击+号创建新的采集配置,每个采集配置由 Logstore 名称和日志采集路径两项构成。

Logstore 名称:您可以使用它来指定所采集日志存储于哪个 Logstore,如果该 Logstore 不存在的话,我们会自动为您在集群关联的日志服务 Project 下创建相应的 Logstore。

说明 名称中不能包含下划线(_),可以使用 - 来代替。

日志采集路径:您可以用它来指定希望采集的日志所在的路径,如使用/usr/local/tomcat/logs/catalina.*.log 来采集tomcat的文本日志。

说明 如果指定为 stdout 则表示采集容器的标准输出和标准错误输出。

每一项采集配置都会被自动创建为对应 Logstore 的一个采集配置,默认采用极简模式(按行)进行采集,如果您需要更丰富的采集方式,可以前往日志服务控制台,进入相应的 Project(默认是 k8s-log 前缀)和 Logstore 对配置进行修改。

自定义 Tag。单击+号创建新的自定义 Tag,每一个自定义 Tag 都是一个键值对,会拼接到所采集到的日志中,您可以使用它来为容器的日志数据进行标记,比如版本号。

当完成所有配置后,可单击右上角的下一步进入后续流程,后续操作可见​​使用镜像创建无状态Deployment应用​​。

使用 YAML 模板创建

在 Kubernetes 菜单下,单击左侧导航栏中的应用 &gt; 部署,然后单击页面右上角的使用模板创建。

YAML 模板的语法同 Kubernetes 语法,但是为了给容器指定采集配置,需要使用 env 来为 container 增加采集配置和自定义 Tag,并根据采集配置,创建对应的 volumeMounts 和 volumns。以下是一个简单的 Pod 示例:

<code>apiVersion: v1kind: Pod metadata: name: my-demo spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: ######### 配置 环境变量 ########### - name: aliyun_logs_log-stdout value: stdout - name: aliyun_logs_log-varlog value: /var/log/*.log - name: aliyun_logs_mytag1_tags value: tag1=v1 ############################### ######### 配置vulume mount ########### volumeMounts: - name: volumn-sls-mydemo mountPath: /var/log volumes: - name: volumn-sls-mydemo emptyDir: {} ###############################</code>

其中有三部分需要根据您的需求进行配置,一般按照顺序进行配置。

第一部分通过环境变量来创建您的采集配置和自定义 Tag,所有与配置相关的环境变量都采用 aliyun_logs_

 作为前缀。

创建采集配置的规则如下:

<code>- name: aliyun_logs_{Logstore 名称} value: {日志采集路径}</code>

示例中创建了两个采集配置,其中 <code>aliyun_logs_log-stdout</code> 这个 env 表示创建一个 Logstore 名字为 log-stdout,日志采集路径为 stdout 的配置,从而将容器的标准输出采集到 log-stdout 这个 Logstore 中。

说明 Logstore 名称中不能包含下划线(_),可以使用 - 来代替。

创建自定义 Tag 的规则如下:

<code>- name: aliyun_logs_{任意不包含'_'的名称}_tags value: {Tag 名}={Tag 值}</code>

配置 Tag 后,当采集到该容器的日志时,会自动附加对应的字段到日志服务。

如果您的采集配置中指定了非 stdout 的采集路径,需要在此部分创建相应的 volumnMounts。

示例中采集配置添加了对/var/log/*.log 的采集,因此相应地添加了/var/log的 volumeMounts。

当 YAML 编写完成后,单击创建,即可将相应的配置交由 Kubernetes 集群执行。

本例中查看通过控制台向导创建的tomcat应用的日志。完成配置后,tomcat应用的日志已被采集并存储到日志服务中,您可以如下步骤来查看您的日志:

在进入控制台后,选择 Kubernetes 集群对应的 Project(默认为 k8s-log-{Kubernetes 集群 ID}),进入 Logstore 列表页面。

在列表中找到相应的 Logstore(采集配置中指定),单击查询。

使用日志服务进行Kubernetes日志采集

本例中,在日志查询页面,您可查看tomcat应用的标准输出日志和容器内文本日志,并可发现自定义tag附加到日志字段中。

使用日志服务进行Kubernetes日志采集