日志服务支持通过Logtail采集Kubernetes集群日志,并支持CRD(CustomResourceDefinition)进行采集配置管理。本文主要介绍如何安装并使用Logtail采集Kubernetes集群日志。

配置流程

图 1. 配置流程
  1. 执行安装命令,安装alibaba-log-controller Helm包。
  2. 根据您的需求选择使用CRD(CustomResourceDefinition)或控制台进行采集配置管理。

视频教程

https://cloud.video.taobao.com/play/u/3220778205/p/1/e/6/t/1/50076466637.mp4

步骤1 安装Logtail

阿里云容器服务Kubernetes安装方式

安装步骤
  1. 登录您的阿里云容器服务Kubernetes的Master节点。登录方式请参考SSH访问Kubernetes集群
  2. 将下述命令中的${your_k8s_cluster_id}替换为您的Kubernetes集群id,并执行此命令。
    wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alicloud-log-k8s-install.sh -O alicloud-log-k8s-install.sh; chmod 744 ./alicloud-log-k8s-install.sh; sh ./alicloud-log-k8s-install.sh ${your_k8s_cluster_id}

    安装后,日志服务会自动创建和您的Kubernetes集群处于同一region的日志服务Project,Project名称为k8s-log-${your_k8s_cluster_id};同时会在该Project下创建机器组,机器组名为k8s-group-${your_k8s_cluster_id}

    说明
    Project k8s-log-${your_k8s_cluster_id}下会自动创建名为config-operation-log的Logstore,请不要删除此Logstore。
安装示例
示例如下,执行成功后将会输出以下内容:
[root@iZbp******biaZ ~]# wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alicloud-log-k8s-install.sh -O alicloud-log-k8s-install.sh; chmod 744 ./alicloud-log-k8s-install.sh; sh ./alicloud-log-k8s-install.sh c12ba20**************86939f0b
....
....
....
alibaba-cloud-log/Chart.yaml
alibaba-cloud-log/templates/
alibaba-cloud-log/templates/_helpers.tpl
alibaba-cloud-log/templates/alicloud-log-crd.yaml
alibaba-cloud-log/templates/logtail-daemonset.yaml
alibaba-cloud-log/templates/NOTES.txt
alibaba-cloud-log/values.yaml
NAME:   alibaba-log-controller
LAST DEPLOYED: Wed May 16 18:43:06 2018
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1beta1/ClusterRoleBinding
NAME                    AGE
alibaba-log-controller  0s
==> v1beta1/DaemonSet
NAME     DESIRED  CURRENT  READY  UP-TO-DATE  AVAILABLE  NODE SELECTOR  AGE
logtail  2        2        0      2           0          <none>         0s
==> v1beta1/Deployment
NAME                    DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
alibaba-log-controller  1        1        1           0          0s
==> v1/Pod(related)
NAME                                     READY  STATUS             RESTARTS  AGE
logtail-ff6rf                            0/1    ContainerCreating  0         0s
logtail-q5s87                            0/1    ContainerCreating  0         0s
alibaba-log-controller-7cf6d7dbb5-qvn6w  0/1    ContainerCreating  0         0s
==> v1/ServiceAccount
NAME                    SECRETS  AGE
alibaba-log-controller  1        0s
==> v1beta1/CustomResourceDefinition
NAME                                   AGE
aliyunlogconfigs.log.alibabacloud.com  0s
==> v1beta1/ClusterRole
alibaba-log-controller  0s
[SUCCESS] install helm package : alibaba-log-controller success.

您可以使用helm status alibaba-log-controller查看Pod当前状态,若状态全部成功后,表示安装成功。

安装成功后登录日志服务控制台,即可看到已经自动创建出的日志服务Project(若您的Project数过多,可以搜索k8s-log关键字)。

自建Kubernetes安装方式

前提条件
  1. Kubernetes集群版本1.8及以上。
  2. 已经安装Helm命令,版本2.6.4及以上。
安装步骤
  1. 在日志服务控制台创建一个Project,Project名称以k8s-log-custom-开头。
  2. 将下述命令中的参数替换,并执行此命令。
    wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alicloud-log-k8s-custom-install.sh; chmod 744 ./alicloud-log-k8s-custom-install.sh; sh ./alicloud-log-k8s-custom-install.sh {your-project-suffix} {region-id} {aliuid} {access-key-id} {access-key-secret}

    各参数及其说明如下:

    参数 说明
    {your-project-suffix} 您在第二步创建的Project名称的k8s-log-custom-之后部分。例如创建的Project为k8s-log-custom-xxxx,这边填写xxxx
    {regionId} 您的Project所在区域的Region Id,请在服务入口中查找,例如华东 1 (杭州)的Region Id为cn-hangzhou
    {aliuid} 用户标识,请替换为您的阿里云主账号用户ID。主账号用户ID为字符串形式,如何查看ID请参考用户标识配置中的2.1节。
    {access-key-id} 您的账号access key id。推荐使用子账号access key,并授予AliyunLogFullAccess权限,具体设置参考授权-简介
    {access-key-secret} 您的账号access key secret。推荐使用子账号access key,并授予AliyunLogFullAccess权限,具体设置参考授权-简介
    安装好之后,日志服务会自动在该Project下创建机器组,机器组名为k8s-group-${your_k8s_cluster_id}
    说明
    • Project下会自动创建名为config-operation-log的Logstore,请不要删除此Logstore。
    • 自建Kubernetes安装时,默认为Logtail授予privileged权限,主要为避免删除其他POD时可能出现错误container text file busy。相关说明请参考:Bug 1468249Bug 1441737issue 34538
安装示例
示例如下,执行成功后将会输出以下内容:
[root@iZbp1dsxxxxxqfbiaZ ~]#  wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alicloud-log-k8s-custom-install.sh; chmod 744 ./alicloud-log-k8s-custom-install.sh; sh ./alicloud-log-k8s-custom-install.sh xxxx cn-hangzhou 165xxxxxxxx050 LTAxxxxxxxxxxx AIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxe
....
....
....
NAME:   alibaba-log-controller
LAST DEPLOYED: Fri May 18 16:52:38 2018
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1beta1/ClusterRoleBinding
NAME                    AGE
alibaba-log-controller  0s
==> v1beta1/DaemonSet
NAME        DESIRED  CURRENT  READY  UP-TO-DATE  AVAILABLE  NODE SELECTOR  AGE
logtail-ds  2        2        0      2           0          <none>         0s
==> v1beta1/Deployment
NAME                    DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
alibaba-log-controller  1        1        1           0          0s
==> v1/Pod(related)
NAME                                     READY  STATUS             RESTARTS  AGE
logtail-ds-7xf2d                         0/1    ContainerCreating  0         0s
logtail-ds-9j4bx                         0/1    ContainerCreating  0         0s
alibaba-log-controller-796f8496b6-6jxb2  0/1    ContainerCreating  0         0s
==> v1/ServiceAccount
NAME                    SECRETS  AGE
alibaba-log-controller  1        0s
==> v1beta1/CustomResourceDefinition
NAME                                   AGE
aliyunlogconfigs.log.alibabacloud.com  0s
==> v1beta1/ClusterRole
alibaba-log-controller  0s
[INFO] your k8s is using project : k8s-log-custom-xxx, region : cn-hangzhou, aliuid : 1654218965343050, accessKeyId : LTAxxxxxxxxxxx
[SUCCESS] install helm package : alibaba-log-controller success.

您可以使用helm status alibaba-log-controller查看Pod当前状态,若状态全部成功后,表示安装成功。

安装成功后登录日志服务控制台,即可看到已经自动创建出的日志服务Project(若您的Project数过多,可以搜索k8s-log关键字)。

步骤二 配置

日志采集配置默认支持控制台配置方式,同时针对Kubernetes微服务开发模式,我们还提供CRD的配置方式,您可以直接使用kubectl对配置进行管理。以下是对两种配置方式进行的比较:

- CRD方式 控制台方式
操作复杂度 一般
功能项 支持除控制台方式外的高级配置 一般
上手难度 一般
网络连接 连接Kubernetes集群 连接互联网
与组件部署集成 支持 不支持
鉴权方式 Kubernetes鉴权 云账号鉴权

推荐您使用CRD方式进行采集配置管理,该方式与Kubernetes部署、发布流程的集成更加完善。

通过控制台管理采集配置

请根据您的需求在控制台创建Logtail采集配置,采集配置步骤请参考:

通过CRD管理采集配置

针对Kubernetes微服务开发模式,日志服务同时提供CRD的配置方式,您可以直接使用kubectl对配置进行管理,该方式与Kubernetes部署、发布流程的集成更加完善。

详细说明请参考Kubernetes-CRD配置日志采集

其他操作

DaemonSet部署方式迁移步骤

如果您之前使用的DaemonSet方式部署的日志服务Logtail,将无法使用CRD的方式进行配置管理。您可以通过以下方式迁移到新的版本:
说明
升级期间会有部分日志重复;CRD配置管理方式只对使用CRD创建的配置生效(由于历史配置使用非CRD方式创建,因此历史配置不支持CRD管理方式)。
  1. 按照新版本的方式安装,安装命令最后新增一个参数为您之前Kubernetes集群使用的日志服务Project名。
    例如Project名为 k8s-log-demo,集群id为 c12ba2028cxxxxxxxxxx6939f0b,安装命令为:
    wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alicloud-log-k8s-install.sh -O alicloud-log-k8s-install.sh; chmod 744 ./alicloud-log-k8s-install.sh; sh ./alicloud-log-k8s-install.sh c12ba2028cxxxxxxxxxx6939f0b k8s-log-demo
  2. 安装成功后,进入日志服务控制台,将历史采集配置应用到新的机器组k8s-group-${your_k8s_cluster_id}
  3. 一分后,将历史采集配置从历史的机器组中解绑。
  4. 观察日志采集正常后,可以选择删除之前安装的logtail daemonset。

多集群使用同一个日志服务Project

如果您希望多个集群将日志采集到同一个日志服务Project,您可以在安装其他集群日志服务组件时,将上述安装参数中的${your_k8s_cluster_id}替换为您第一次安装的集群ID。

例如您现在有3个集群,ID分别为 abc001、abc002、abc003,三个集群安装组件的参数中${your_k8s_cluster_id}都填写为abc001

说明
此方式不支持跨region的Kubernetes多集群共享。

Logtail容器日志

Logtail日志存储在Logtail容器中的 /usr/local/ilogtail/目录中,文件名为 ilogtail.LOG以及 logtail_plugin.LOG,容器stdout并不具备参考意义,请忽略以下stdout输出:
start umount useless mount points, /shm$|/merged$|/mqueue$
umount: /logtail_host/var/lib/docker/overlay2/3fd0043af174cb0273c3c7869500fbe2bdb95d13b1e110172ef57fe840c82155/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/d5b10aa19399992755de1f85d25009528daa749c1bf8c16edff44beab6e69718/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/5c3125daddacedec29df72ad0c52fac800cd56c6e880dc4e8a640b1e16c22dbe/merged: must be superuser to unmount
......
xargs: umount: exited with status 255; aborting
umount done
start logtail
ilogtail is running
logtail status:
ilogtail is running

查看Kubernetes集群中日志相关组件状态

helm status alibaba-log-controller

alibaba-log-controller启动失败

请确认您是按照以下方式执行的安装:

  1. 安装命令在Kubernetes集群的master节点执行。
  2. 安装命令参数输入的是您的集群ID。

若由于以上问题安装失败,请使用helm del --purge alibaba-log-controller删除安装包并重新执行安装。

若以上操作依然安装失败,请提交工单至日志服务。

查看Kubernetes集群中Logtail DaemonSet状态。

您可以执行命令kubectl get ds -n kube-system查看Logtail运行状态。

说明
Logtail 默认的namespace为kube-system

如何调整Logtail资源限制

默认Logtail最多占用单核40%CPU和200M的内存,如需提升处理速度,需调整两部分参数:

  • yaml模板中resources下的limitsrequests
  • Logtail启动配置文件,文件路径为yaml模板中的ALIYUN_LOGTAIL_CONFIG环境变量,修改方式参见配置启动参数

强制更新Logtail DaemonSet

修改 logtail-daemonset.yaml文件后,执行如下命令进行更新:
kubectl --namespace=kube-system delete ds logtail
kubectl apply -f ./logtail-daemonset.yaml
说明
强制更新期间可能会出现数据重复。

查看Logtail DaemonSet的配置信息

kubectl describe ds logtail -n kube-system

查看Logtail的版本号信息、IP、启动时间

示例如下:
[root@iZbp1dsu6v77zfb40qfbiaZ ~]# kubectl get po -n kube-system -l k8s-app=logtail
NAME            READY     STATUS    RESTARTS   AGE
logtail-gb92k   1/1       Running   0          2h
logtail-wm7lw   1/1       Running   0          4d
[root@iZbp1dsu6v77zfb40qfbiaZ ~]# kubectl exec logtail-gb92k -n kube-system cat /usr/local/ilogtail/app_info.json
{
   "UUID" : "",
   "hostname" : "logtail-gb92k",
   "instance_id" : "0EBB2B0E-0A3B-11E8-B0CE-0A58AC140402_172.20.4.2_1517810940",
   "ip" : "172.20.4.2",
   "logtail_version" : "0.16.2",
   "os" : "Linux; 3.10.0-693.2.2.el7.x86_64; #1 SMP Tue Sep 12 22:26:13 UTC 2017; x86_64",
   "update_time" : "2018-02-05 06:09:01"
}

查看Logtail的运行日志

Logtail运行日志保存在/usr/local/ilogtail/目录下,文件名为ilogtail.LOG,轮转文件会压缩存储为ilogtail.LOG.x.gz

示例如下:
[root@iZbp1dsu6v77zfb40qfbiaZ ~]# kubectl exec logtail-gb92k -n kube-system tail /usr/local/ilogtail/ilogtail.LOG
[2018-02-05 06:09:02.168693] [INFO] [9] [build/release64/sls/ilogtail/LogtailPlugin.cpp:104] logtail plugin Resume:start
[2018-02-05 06:09:02.168807] [INFO] [9] [build/release64/sls/ilogtail/LogtailPlugin.cpp:106] logtail plugin Resume:success
[2018-02-05 06:09:02.168822] [INFO] [9] [build/release64/sls/ilogtail/EventDispatcher.cpp:369] start add existed check point events, size:0
[2018-02-05 06:09:02.168827] [INFO] [9] [build/release64/sls/ilogtail/EventDispatcher.cpp:511] add existed check point events, size:0 cache size:0 event size:0 success count:0

重启某个pod的Logtail

示例如下:
[root@iZbp1dsu6v77zfb40qfbiaZ ~]# kubectl exec logtail-gb92k -n kube-system /etc/init.d/ilogtaild stop
kill process Name: ilogtail pid: 7
kill process Name: ilogtail pid: 9
stop success
[root@iZbp1dsu6v77zfb40qfbiaZ ~]# kubectl exec logtail-gb92k -n kube-system /etc/init.d/ilogtaild start
ilogtail is running