Kubernetes日志采集
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。

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

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

总结
不同的日志打印和挂载方式都有自己的优势,没有一个标准说必须使用哪一种,主要看这样的方式是否契合自己的业务。对于K8S集群来说,采集服务最好是容器化的,才能更好地部署和管理采集进程等。综合各种因素,华为云AOM采用第三种部署方式,契合华为CCE容器服务的日志采集。
相关服务请访问:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019
Kubernetes日志采集的更多相关文章
- 使用日志服务进行Kubernetes日志采集
		阿里云容器服务Kubernetes集群集成了日志服务(SLS),您可在创建集群时启用日志服务,快速采集Kubernetes 集群的容器日志,包括容器的标准输出以及容器内的文本文件. 新建 Kubern ... 
- kubernetes常见日志采集问题和解决方案分析
		传统日志与kubernetes日志对比 传统服务 目录固定 重启不会丢失 不用关注标准与错误日志输出 容器服务 节点不固定 重启服务会漂移 需要关注标准与错误日志输出 日志文件重启会丢失 日志目录不固 ... 
- K8S学习笔记之kubernetes 日志架构
		0x00 概述 应用程序和系统日志可以帮助我们了解集群内部的运行情况,日志对于我们调试问题和监视集群情况也是非常有用的.而且大部分的应用都会有日志记录,对于传统的应用大部分都会写入到本地的日志文件之中 ... 
- 阿里云k8s应用最新日志采集不到的问题
		问题描述: 阿里云k8s应用日志之前一直都是可以正常的采集, 先出现一问题, 通过kibana 和阿里云的日志服务都没法展示最新的k8s应用的日志, 部分应用的最新日志有被采集到,但大部分应用日志没有 ... 
- idou老师教你学Istio :如何用istio实现监控和日志采集
		大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ... 
- 利用 log-pilot + elasticsearch + kibana 搭建 kubernetes 日志解决方案
		开发者在面对 kubernetes 分布式集群下的日志需求时,常常会感到头疼,既有容器自身特性的原因,也有现有日志采集工具的桎梏,主要包括: 容器本身特性: 采集目标多:容器本身的特性导致采集目标多, ... 
- 阿里PB级Kubernetes日志平台建设实践
		干货分享 | 阿里PB级Kubernetes日志平台建设实践https://www.infoq.cn/article/HiIxh-8o0Lm4b3DWKvph 日志最主要的采集工具是 Agent,在 ... 
- idou老师教你学Istio 25:如何用istio实现监控和日志采集
		大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ... 
- 系列文章:云原生Kubernetes日志落地方案
		在Logging这块做了几年,最近1年来越来越多的同学来咨询如何为Kubernetes构建一个日志系统或者是来求助在这过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是想把我们这些年积累的经验以 ... 
随机推荐
- 如何固定table表格宽度,样式不受容器影响
			之前有篇关于LODOP打印超文本表格,两个样式相同的表格,出现错位的情况.该博文地址:LODOP打印表格错位的几种情况该文试验了两种现象,第一种浏览器页面显示错位,打印预览也错位,第二种浏览器页面表格 ... 
- 解决RedisDesktopManager连接不上redis问题
			linux 下安装redis很简单,在此不做赘述 发现linux上启动redis,测试redis使用正常, 但使用RedisDesktopManager却连接不上,报错如下,报错信息显示:当前使用的P ... 
- 利用Nginx限制静态页面的访问权限(防盗链、禁止爬虫)
			1.限制爬虫配置 if ($http_user_agent ~* "spider|crapy|Sogou web spider|Baiduspider|Googlebot|Bingbot|3 ... 
- 使用 RedisDesktopManager 连接redis所需步骤
			服务器开放了6379端口 redis默认配置是只允许本地连接,我们需要修改redis配置文件 配置文件找到 bind 127.0.0.1 这一行注释掉 在找到 protected-mode yes 修 ... 
- Appium移动自动化测试-----(十二)appium API 之 TouchAction 操作
			Appium的辅助类,主要针对手势操作,比如滑动.长按.拖动等. 1.按压控件 方法: press() 开始按压一个元素或坐标点(x,y).通过手指按压手机屏幕的某个位置. press(WebElem ... 
- qt model--view-delegate模式的界面设计概念,ListView用法
			最经典的界面设计模式,必须知道. 作为 一种经典到 不能 再 经典 的 架构 模式, qt的model--view-delegate大 行其 道 有其 必然 的 道理. 通过 把 职责. 性质相近的 ... 
- matlab中执行mex文件时提示GLIBCXX not found
			解决方案参考: http://stackoverflow.com/questions/8421708/glibcxx-not-found-when-compiling-vtk-example-unde ... 
- java绘图(基于Graphics2D)
			1.绘图基本操作 请参考下面基础示例: int width = 200, height = 250; //创建图片对象 BufferedImage image = new BufferedImage( ... 
- LeetCode 189. 旋转数组(Rotate Array)
			189. 旋转数组 LeetCode189. Rotate Array 题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6, ... 
- java当中请给出一个oracle的helloworld例子
			[学习笔记] 2.oracle的helloworld例子: import java.sql.*;public class OracleHello{ public static void main ... 
