安装Logtail组件(自建Kubernetes集群)

本文介绍如何在自建Kubernetes集群上安装及升级Logtail组件。

安装Logtail

  1. 登录日志服务控制台

  2. 创建Project。具体操作,请参见创建项目Project

    建议创建一个以k8s-log-custom-开头的Project,例如k8s-log-custom-sd89ehdq。

  3. 登录您的Kubernetes集群。

  4. 执行如下命令安装Logtail及其他依赖组件。

    重要
    • 请确保用于执行脚本的机器中,已安装kubectl命令。

    • 目前,alibaba-log-controller组件只支持Kubernetes 1.6及以上版本。

    • 如果您不需要CRD功能,可以删除alibaba-cloud-log-all/templates/alicloud-log-config.yaml文件,然后重新执行下述命令。

    1. 下载安装包并解压。

      • 中国地域

        wget https://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/0.5.3/alibaba-cloud-log-all.tgz; tar xvf alibaba-cloud-log-all.tgz; chmod 744 ./alibaba-cloud-log-all/k8s-custom-install.sh
      • 海外地域

        wget https://logtail-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/kubernetes/0.5.3/alibaba-cloud-log-all.tgz; tar xvf alibaba-cloud-log-all.tgz; chmod 744 ./alibaba-cloud-log-all/k8s-custom-install.sh
    2. 修改配置文件./alibaba-cloud-log-all/values.yaml

      # ===================== 必需要补充的内容 =====================
      # 目标Project名称。
      SlsProjectName: 
      # Project所属地域。
      Region: 
      # Project所属阿里云账号ID,需使用双引号("")包裹。
      AliUid: "11**99"
      # 阿里云账号或RAM用户的AccessKey ID和AccessKey Secret,需具备AliyunLogFullAccess权限。
      AccessKeyID: 
      AccessKeySercret: 
      # 自定义集群ID,命名只支持大小写,数字,短划线(-)。
      ClusterID: 
      # ==========================================================
      # 是否开启指标采集相关组件,可选参数: true、false, 默认true。
      SlsMonitoring: true
      # 网络类型,可选参数:Internet、Intranet,默认使用Internet。
      Net: Internet
      # 容器运行时是否为containerd,可选参数: true, false, 默认false。
      SLS_CONTAINERD_USED: true

      命令中各参数说明如下所示,请根据实际情况替换。

      参数

      说明

      SlsProjectName

      配置为您在步骤2中创建的Project名称。

      Region

      您的Project所在的地域ID。例如华东1(杭州)的地域ID为cn-hangzhou。更多信息,请参见开服地域

      AliUid

      您的阿里云账号(主账号)ID,需使用双引号包裹(""),例如AliUid: "11**99"。如何获取,请参见获取日志服务所在的阿里云账号(主账号)ID

      AccessKeyID

      您的阿里云账号的AccessKey ID。推荐使用RAM用户的AccessKey,并授予RAM用户AliyunLogFullAccess权限。相关操作,请参见创建RAM用户及授权

      AccessKeySercret

      您的阿里云账号的AccessKey Secret。推荐使用RAM用户的AccessKey并授予RAM用户AliyunLogFullAccess权限。相关操作,请参见创建RAM用户及授权

      ClusterID

      自定义集群ID,命名只支持大小写字母、数字、短划线(-)。该参数对应后面操作中的${your_k8s_cluster_id}

      重要

      不同的Kubernetes集群,请勿配置相同的集群ID。

      SlsMonitoring

      是否开启指标采集相关组件,可选项:

      • true(默认值):开启。

      • false:不开启。

      Net

      网络类型。可选项:

      • Internet(默认值):公网。

      • Intranet:内网。

      SLS_CONTAINERD_USED

      容器运行时是否为containerd,可选项:

      • true:开启。

      • false(默认值):不开启。

      重要

      在使用containerd作为容器运行时的自建Kubernetes集群中,若未开启相关参数,可能导致日志无法被Logtail采集。

    3. 安装Logtail及其他依赖组件。

      bash k8s-custom-install.sh; kubectl apply -R -f result

安装完成后,在该Project下自动创建如下日志服务资源。

重要
  • 请勿删除名为config-operation-log的Logstore。

  • 在自建Kubernetes集群上安装时,默认为Logtail授予privileged权限,主要为避免删除其他Pod时可能出现的container text file busy错误。更多信息,请参见Bug 1468249Bug 1441737issue 34538

资源类型

资源名称

作用

示例

机器组

k8s-group-${your_k8s_cluster_id}

logtail-daemonset的机器组,主要用于日志采集场景。

k8s-group-my-cluster-123

k8s-group-${your_k8s_cluster_id}-statefulset

logtail-statefulset的机器组,主要用于指标采集场景。

k8s-group-my-cluster-123-statefulset

k8s-group-${your_k8s_cluster_id}-singleton

单实例机器组,主要用于部分单实例采集配置。

k8s-group-my-cluster-123-singleton

Logstore

config-operation-log

用于采集和存储log-controller日志。

查看Logtail状态、版本及IP地址

查看Logtail状态

运行如下命令查看Logtail状态等信息。

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

查看Logtail版本及IP地址

运行如下命令查看Logtail的版本号、IP地址等信息。

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" : "192.0.2.0",
   "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" : "2021-02-05 06:09:01"
}

升级Logtail

组件升级

建议通过安装最新Logtail组件进行更新,如果只更新部分组件(如logtail-ds、alibaba-log-controller)的镜像版本号可能导致升级失败。

  1. 备份Logtail组件相关描述文件。

    重要

    升级期间(数秒内),因Logtail容器重启,可能出现少量数据被重复或丢失采集的情况。在升级前,您需要对Logtail组件相关描述文件进行备份。

    例如下所示。

    kubectl get ds -n kube-system logtail-ds -o yaml > logtail-ds.yaml
    kubectl get deployment -n kube-system alibaba-log-controller -o yaml > alibaba-log-controller.yaml
    kubectl get crd aliyunlogconfigs.log.alibabacloud.com -o yaml > aliyunlogconfigs-crd.yaml
    kubectl get cm -n kube-system alibaba-log-configuration -o yaml > alibaba-log-configuration.yaml
    kubectl get aliyunlogconfigs --all-namespaces -o yaml > aliyunlogconfigs-cr.yaml
  2. 重新安装Logtail组件,即可完成自动升级。具体操作,请参见安装Logtail

升级回滚

如果您要回滚到某个版本,可参考如下步骤。

说明

升级前备份的YAML文件中包含不少冗余信息,需要您手动删除后,才能用于恢复Logtail配置。您可以使用kubectl-neat工具完成此操作。需要删除的字段为metadata.creationTimestamp、metadata.generation、metadata.resourceVersion、metadata.uid和status。

  1. 根据业务需求判断升级之后的新Logtail配置是否需要保留。

  2. 删除备份文件中的冗余信息。

    cat logtail-ds.yaml | kubectl-neat > neat-logtail-ds.yaml
    cat alibaba-log-controller.yaml | kubectl-neat > neat-alibaba-log-controller.yaml
    cat aliyunlogconfigs-crd.yaml | kubectl-neat > neat-aliyunlogconfigs-crd.yaml
    cat alibaba-log-configuration.yaml | kubectl-neat > neat-alibaba-log-configuration.yaml
    cat aliyunlogconfigs-cr.yaml | kubectl-neat > neat-aliyunlogconfigs-cr.yaml
  3. 应用精简后的备份文件,恢复Logtail配置。

    kubectl apply -f neat-logtail-ds.yaml
    kubectl apply -f neat-alibaba-log-controller.yaml
    kubectl apply -f neat-aliyunlogconfigs-crd.yaml
    kubectl apply -f neat-alibaba-log-configuration.yaml
    kubectl apply -f neat-aliyunlogconfigs-cr.yaml

后续步骤

创建Logtail采集配置,采集容器日志。

常见问题

如何查看镜像版本?

您可以通过镜像仓库查看。

多个自建Kubernetes集群如何共用一个日志服务Project?

如果您希望将多个自建Kubernetes集群中的容器日志采集到同一个日志服务Project中,您可以在安装其他集群日志服务组件时,将安装参数中的设置与您第一次安装集群日志服务组件时保持一致。

如何查看Logtail日志?

Logtail日志存储在Logtail容器中的/usr/local/ilogtail/目录中,文件名为ilogtail.LOGlogtail_plugin.LOG

Logtail容器中的标准输出并不具备参考意义,请忽略以下标准输出内容。

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集群中日志服务相关组件的状态?

执行如下命令进行查看。

kubectl get deploy alibaba-log-controller -n kube-system
kubectl get ds logtail-ds -n kube-system

alibaba-log-controller启动失败,该怎么处理?

请确认您是否按照以下方式进行安装。

  • 在Kubernetes集群的Master节点中执行安装命令。

  • 安装命令参数中输入的是您的集群ID。

如果由于以上问题安装失败,请使用kubectl delete -f deploy命令删除已生成的安装模板并重新执行安装命令。

如何查看Kubernetes集群中Logtail DaemonSet状态?

执行kubectl get ds -n kube-system命令查看Logtail DaemonSet状态。

说明

Logtail容器所在的命名空间,默认为kube-system。

如何查看Logtail的运行日志?

Logtail运行日志保存在/usr/local/ilogtail/目录下,文件名为ilogtail.LOG,轮转文件会压缩存储为ilogtail.LOG.x.gz。例如执行如下命令查看日志。

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?

  1. 停止Logtail。

  2. 其中logtail-ds-gb92k表示容器名,kube-system表示命名空间,请根据实际情况替换。

    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
  3. 启动Logtail。

  4. 其中logtail-ds-gb92k表示容器名,kube-system表示命名空间,请根据实际情况替换。

    kubectl exec logtail-ds-gb92k -n kube-system /etc/init.d/ilogtaild start

    返回如下结果表示启动成功。

    ilogtail is running 

如何采集控制平面组件日志?

如果是自建Kubernetes集群或者阿里云专有版ACK集群,您可以参见通过DaemonSet-控制台方式采集容器标准输出完成采集。

如何卸载已安装的logtail-ds、alibaba-log-controller等组件?

执行kubectl delete -R -f result卸载已安装的logtail-ds、alibaba-log-controller等组件。