Kubernetes日志采集

举报
云容器大未来 发表于 2019/04/03 12:55:10 2019/04/03
【摘要】 Kubernetes日志打印方式标准输出 docker标准输出日志stdout和stderr,使用docker logs或者kubectl logs查看最新的日志(tail)。 如果想看到更多的日志,在宿主机目录/var/lib/docker/containers可以找到对应的全部日志。标准输出是k8s社区推荐的日志输出方式。日志文件 下面将从路径、挂载两方面介绍。默认路径如何使用log...

Kubernetes日志打印方式



标准输出


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


日志文件


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


  • 默认路径


如何使用log4j打印的日志:如果打印的业务日志不采用任何挂载方式,那么业务日志默认打在容器里边的目录中。根据不同的存储驱动,参考链接:https://docs.docker.com/storage/storagedriver/select-storage-driver,在宿主机上将有不同的挂载目录。以华为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。

0403_1.jpg


  • 虚机方式


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

0403_2.jpg



  • 容器方式


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

0403_3.jpg


总结


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



相关服务请访问:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。