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

配置流程

Kubernetes集群日志采集配置流程如下所示。

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

步骤1 安装Logtail

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

    如果是阿里云容器服务Kubernetes集群,请参见容器服务文档中手动安装日志服务组件部分安装Logtail。

  • 自建Kubernetes安装方式
    说明
    • Kubernetes集群版本为1.8及以上。
    • 已经安装2.6.4及以上版本的Helm命令行工具。
    1. 在日志服务中创建一个名称以k8s-log-custom-开头的Project。
    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} 用户标识(AliUid),请替换为您的阿里云主账号ID。
      说明 阿里云主账号ID为字符串形式,如何查看主账号ID请参见查看阿里云主账号ID
      {access-key-id} 您的账号AccessKey id。推荐使用子账号AccessKey并授予AliyunLogFullAccess权限,具体设置请参见RAM简介
      {access-key-secret} 您的账号AccessKey secret。推荐使用子账号AccessKey并授予AliyunLogFullAccess权限,具体设置请参见RAM简介

      安装好之后,日志服务会自动在该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 : ***************, accessKeyId : LTA**********
    [SUCCESS] install helm package : alibaba-log-controller success.

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

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

步骤2 设置采集配置

日志采集配置默认支持控制台配置方式,同时针对Kubernetes微服务开发模式还提供了CRD的配置方式,您可以直接使用kubectl对采集配置进行管理。从如下几个方面对两种方式进行比较。
对比项 CRD方式 控制台方式
操作复杂度 一般
功能项 支持除控制台方式外的高级配置 一般
上手难度 一般
网络连接 连接Kubernetes集群 连接互联网
与组件部署集成 支持 不支持
鉴权方式 Kubernetes鉴权 云账号鉴权
  • 通过CRD管理采集配置

    推荐您使用CRD方式进行采集配置管理,该方式可以更好的与Kubernetes应用部署、发布进行集成。

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

  • 通过控制台管理采集配置
    请根据您的需求在控制台创建Logtail采集配置,具体步骤请参见:

其他操作

  • DaemonSet部署方式变更
    如果您之前使用DaemonSet方式部署日志服务Logtail,将无法使用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启动失败
    请确认您是否按照以下方式进行安装:
    • 安装命令在Kubernetes集群的master节点执行。
    • 安装命令参数输入的是您的集群ID。

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

  • 查看Kubernetes集群中Logtail DaemonSet状态
    执行命令kubectl get ds -n kube-system查看Logtail运行状态。
    说明 Logtail默认的namespace为kube-system
  • 查看Logtail的版本号、IP、启动时间等信息
    示例如下:
    [root@iZbp1dsu6v77zfb40qfbiaZ ~]# kubectl get po -n kube-system | grep logtail
    NAME            READY     STATUS    RESTARTS   AGE
    logtail-ds-gb92k   1/1       Running   0          2h
    logtail-ds-wm7lw   1/1       Running   0          4d
    [root@iZbp1dsu6v77zfb40qfbiaZ ~]# kubectl exec logtail-ds-gb92k -n kube-system cat /usr/local/ilogtail/app_info.json
    {
       "UUID" : "",
       "hostname" : "logtail-ds-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-ds-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-ds-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-ds-gb92k -n kube-system /etc/init.d/ilogtaild start
    ilogtail is running