33

Kubernetes日志采集

 5 years ago
source link: http://dockone.io/article/8740?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Kubernetes日志打印方式

标准输出

docker标准输出日志stdout和stderr,使用docker logs或者kubectl logs查看最新的日志(tail)。 如果想看到更多的日志,在宿主机目录/var/lib/docker/containers可以找到对应的全部日志。标准输出是k8s社区推荐的日志输出方式。

日志文件

下面将从路径、挂载两方面介绍。

默认路径

如何使用log4j打印的日志:如果打印的业务日志不采用任何挂载方式,那么业务日志默认打在容器里边的目录中。根据不同的存储驱动,参考链接: https://docs.docker.com/storag ... river ,在宿主机上将有不同的挂载目录。以华为CCE为例,使用的文件驱动是"devicemapper",挂载根目录为/var/lib/docker/devicemapper/。通过docker inspect命令可以找到docker挂载的子目录,参考"DeviceName":"docker-253:1-1835012-107d7ccf0ab28e58be3553c01225a4d32182a9eec26c89c920ad2db2f9d4c7c7",挂载的目录参考:/var/lib/docker/devicemapper/mnt/107d7ccf0ab28e58be3553c01225a4d32182a9eec26c89c920ad2db2f9d4c7c7/rootfs。通过此目录加上容器内日志目录,就可以很快找到对应的业务日志了。

日志挂载

日志挂载分两种:

i. 指定主机目录挂载

ii. emptyDir挂载

i. 指定主机目录挂载的日志文件,针对特定的一些场景,如日志文件比较大,日志文件很重要,需要额外备份等。日志需要额外挂载文件目录。配置信息参考:

"volumeMounts":

[{

"mountPath": "/var/paas/sys/log/amsmetric",

"name": "ams-log",

"policy": {

    "logs": {

        "rotate": ""

    }

}

}]

"volumes":

[{

"hostPath": {

    "path": "/var/paas/sys/log/amsmetric"

},

"name": "ams-log"

}]

对于已经挂载到主机指定目录的日志,直接通过主机目录就访问了。

ii. emptyDir挂载

"volumeMounts":

[{

"mountPath": "/var/paas/sys/log/amsmetric",

"name": "ams-log"

}]

"volumes":

[{

"name": "ams-log",

"emptyDir": {}

}]

配置完成后,运行日志将会显示到主机上,主机上路径参考:

/opt/varlib/kubelet/pods/0e0a38b0-12f7-11e9-9f33-286ed488da5c/volumes/kubernetes.io~empty-dir/ams-log

日志输出方式对比

标准输出(stdout|stderr)

优点:1、不需要额外指定挂载路径;2、通过docker命令可以直接访问

缺点:1、容器停止后,日志会被立即清理;2、如果一个容器内多个进程的标准输出,会被收集到一个文件中,区分不了。

日志文件,默认输出路径

优点:不需要额外指定挂载路径

缺点:1、容器停止后,日志会被立即清理;2、容器间目录是隔离的,各个容器的rootfs不能互相访问,即使是特权容器也不能访问。

日志文件,指定主机目录挂载

优点:文件保存在主机上,容器停止也不会丢失。

缺点:开发(部署)过程中需要额外指定主机目录进行日志存储。

日志文件,emptyDir挂载

优点:不需要额外指定挂载路径。

缺点:pod删除后,日志会被立即清理。

采集部署方式

sideCar方式

即使用sideCar方式,将采集进程运行在用户的pod中,参考fluentd。

eai6FnA.jpg!web

虚机方式

使用普通虚拟机方式部署到主机上,直接采集mount到主机上的目录。

R36n6vY.jpg!web

容器方式

即容器部署,作为特权容器挂载在host的根目录。

6VzMZzR.jpg!web

总结

不同的日志打印和挂载方式都有自己的优势,没有一个标准说必须使用哪一种,主要看这样的方式是否契合自己的业务。对于K8S集群来说,采集服务最好是容器化的,才能更好地部署和管理采集进程等。综合各种因素,华为云AOM采用第三种部署方式,契合华为CCE容器服务的日志采集。

相关服务请访问: https://support.huaweicloud.co ... _2019


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK