本文介绍如何在自建Kubernetes集群上安装及升级Logtail组件。
安装Logtail
登录日志服务控制台。
创建Project。具体操作,请参见创建项目Project。
建议创建一个以
k8s-log-custom-
开头的Project,例如k8s-log-custom-sd89ehdq。登录您的Kubernetes集群。
执行如下命令安装Logtail及其他依赖组件。
重要请确保用于执行脚本的机器中,已安装kubectl命令。
目前,alibaba-log-controller组件只支持Kubernetes 1.6及以上版本。
如果您不需要CRD功能,可以删除
alibaba-cloud-log-all/templates/alicloud-log-config.yaml
文件,然后重新执行下述命令。
下载安装包并解压。
中国地域
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
修改配置文件
./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采集。
安装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 1468249、Bug 1441737和 issue 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)的镜像版本号可能导致升级失败。
备份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
重新安装Logtail组件,即可完成自动升级。具体操作,请参见安装Logtail。
升级回滚
如果您要回滚到某个版本,可参考如下步骤。
升级前备份的YAML文件中包含不少冗余信息,需要您手动删除后,才能用于恢复Logtail配置。您可以使用kubectl-neat工具完成此操作。需要删除的字段为metadata.creationTimestamp、metadata.generation、metadata.resourceVersion、metadata.uid和status。
根据业务需求判断升级之后的新Logtail配置是否需要保留。
删除备份文件中的冗余信息。
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
应用精简后的备份文件,恢复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采集配置,采集容器日志。
DaemonSet方式
如果您需要通过CRD方式采集日志,请参见通过DaemonSet-CRD方式采集容器日志。
如果您需要通过控制台方式采集容器标准输出,请参见通过DaemonSet-控制台方式采集容器标准输出。
如果您需要通过控制台方式采集容器文本日志,请参见通过日志服务采集Kubernetes容器日志。
Sidecar方式
如果您需要通过CRD方式采集日志,请参见通过Sidecar-CRD方式采集容器文本日志。
如果您需要通过控制台方式采集日志,请参见通过Sidecar-控制台方式采集容器文本日志。
常见问题
如何查看镜像版本?
您可以通过镜像仓库查看。
多个自建Kubernetes集群如何共用一个日志服务Project?
如果您希望将多个自建Kubernetes集群中的容器日志采集到同一个日志服务Project中,您可以在安装其他集群日志服务组件时,将安装参数中的设置与您第一次安装集群日志服务组件时保持一致。
如何查看Logtail日志?
Logtail日志存储在Logtail容器中的/usr/local/ilogtail/
目录中,文件名为ilogtail.LOG
和logtail_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?
停止Logtail。
其中
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
启动Logtail。
其中
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等组件。