12c集群日志位置_Kubernetes(k8s)那些套路之日志收集

56a7a99976ea6eaea79815065933dd24.png

准备

关于容器日志

Docker的日志分为两类,一类是 Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置。本文主要介绍容器日志,容器日志可以理解是运行在容器内部的应用输出的日志,默认情况下,docker logs 显示当前运行的容器的日志信息,内容包含 STOUT(标准输出) 和 STDERR(标准错误输出)。日志都会以 json-file 的格式存储于 /var/lib/docker/containers/<容器id>/<容器id>-json.log ,不过这种方式并不适合放到生产环境中。

  • 默认方式下容器日志并不会限制日志文件的大小,容器会一直写日志,导致磁盘爆满,影响系统应用。(docker log-driver 支持log文件的rotate)
  • Docker Daemon 收集容器的标准输出,当日志量过大时会导致Docker Daemon 成为日志收集的瓶颈,日志的收集速度受限。
  • 日志文件量过大时,利用docker logs -f 查看时会直接将Docker Daemon阻塞住,造成docker ps等命令也不响应。

Docker提供了logging drivers配置,用户可以根据自己的需求去配置不同的log-driver,可参考官网 Configure logging drivers 。但是上述配置的日志收集也是通过Docker Daemon收集,收集日志的速度依然是瓶颈。

log-driver 日志收集速度
syslog 14.9 MB/s
json-file 37.9 MB/s

能不能找到不通过Docker Daemon收集日志直接将日志内容重定向到文件并自动 rotate的工具呢?答案是肯定的采用S6基底镜像。

S6-log 将 CMD 的标准输出重定向到/.../default/current,而不是发送到 Docker Daemon,这样就避免了 Docker Daemon 收集日志的性能瓶颈。本文就是采用S6基底镜像构建应用镜像形成统一日志收集方案。

关于k8s日志

k8s日志收集方案分成三个级别:

  1. 应用(Pod)级别
  2. 节点级别
  3. 集群级别
  • 应用(Pod)级别

Pod级别的日志 , 默认是输出到标准输出和标志输入,实际上跟docker 容器的一致。使用 kubectl logs pod-name -n namespace 查看,具体参考。

  • 节点级别

Node级别的日志 , 通过配置容器的log-driver来进行管理 , 这种需要配合logrotare来进行 , 日志超过最大限制 , 自动进行rotate操作。

60fb2883a953f47869df310736645b0d.png
  • 集群级别

集群级别的日志收集 , 有三种

  • 节点代理方式,在node级别进行日志收集。一般使用DaemonSet部署在每个node中。这种方式优点是耗费资源少,因为只需部署在节点,且对应用无侵入。缺点是只适合容器内应用日志必须都是标准输出。

30b26ab58c607fc5a8a96b404e91971b.png
  • 使用sidecar container作为容器日志代理,也就是在pod中跟随应用容器起一个日志处理容器,有两种形式:

一种是直接将应用容器的日志收集并输出到标准输出(叫做Streaming sidecar container),但需要注意的是,这时候,宿主机上实际上会存在两份相同的日志文件:一份是应用自己写入的;另一份则是 sidecar 的 stdout 和 stderr 对应的 JSON 文件。这对磁盘是很大的浪费 , 所以说,除非万不得已或者应用容器完全不可能被修改。

000759bbea20911e1c53bd7dd8aa6fa8.png

另一种是每一个pod中都起一个日志收集agent(比如logstash或fluebtd)也就是相当于把方案一里的 logging agent放在了pod里。但是这种方案资源消耗(cpu,内存)较大,并且日志不会输出到标准输出,kubectl logs 会看不到日志内容。

08bf796924be4c22bc4411fa15c230cd.png
  • 应用容器中直接将日志推到存储后端,这种方式就比较简单了,直接在应用里面将日志内容发送到日志收集服务后端。

2f97d8c797fed9b95fdd701016e18d22.png

日志架构

通过上文对k8s日志收集方案的介绍,要想设计一个统一的日志收集系统,可以采用节点代理方式收集每个节点上容器的日志,日志的整体架构如图所示。

816baf51cbff7429df9efcbd54e30319.png

解释如下:

  1. 所有应用容器都是基于s6基底镜像的,容器应用日志都会重定向到宿主机的某个目录文件下比如/data/logs/namespace/appname/podname/log/xxxx.log
  2. log-agent 内部 包含 filebeat ,logrotate 等工具,其中filebeat是作为日志文件收集的agent
  3. 通过filebeat将收集的日志发送到kafka
  4. kafka在讲日志发送的es日志存储/kibana检索层
  5. logstash 作为中间工具主要用来在es中创建index和消费kafka 的消息

整个流程很好理解,但是需要解决的是

  1. 用户部署的新应用,如何动态更新filebeat配置,
  2. 如何保证每个日志文件都被正常的rotate,
  3. 如果需要更多的功能则需要二次开发filebeat,使filebeat 支持更多的自定义配置。

付诸实践

解决上述问题,就需要开发一个log-agent应用以daemonset形式运行在k8s集群的每个节点上,应用内部包含filebeat,logrotate,和需要开发的功能组件。

第一个问题,如何动态更新filebeat配置,可以利用http://github.com/fsnotify/fsnotify 工具包监听日志目录变化create、delete事件,利用模板渲染的方法更新filebeat配置文件

第二个问题,利用http://github.com/robfig/cron 工具包 创建cronJob,定期rotate日志文件,注意应用日志文件所属用户,如果不是root用户所属,可以在配置中设置切换用户

/var/log/xxxx/xxxxx.log {su www-data www-datamissingoknotifemptysize 1Gcopytruncate}

第三个问题,关于二次开发filebeat,可以参考博文 https://www.jianshu.com/p/fe3ac68f4a7a

总结

本文只是对k8s日志收集提供了一个简单的思路,关于日志收集可以根据公司的需求,因地制宜。

参考文献

  1. https://kubernetes.io/docs/concepts/cluster-administration/logging/
  2. https://support.rackspace.com/how-to/understanding-logrotate-utility/
  3. https://github.com/elastic/beats/tree/master/filebeat
  4. http://skarnet.org/software/s6/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字摄像头测试软件,图像测量软件(Camera Measure)

Camera Measure是一款简单易用的数字图像测量工具&#xff0c;该软件可用于显微镜图像测量、测绘等专业领域或者普通用户日常的各种测量&#xff0c;可以播放Windows相机并拍照或录制视频&#xff0c;打开图片或视频文件&#xff0c;并在画面中进行实时的高性能图像测量。软件功…

过滤特征_机器学习深度研究:特征选择中几个重要的统计学概念

机器学习深度研究&#xff1a;特征选择过滤法中几个重要的统计学概念————卡方检验、方差分析、相关系数、p值问题引出当我们拿到数据并对其进行了数据预处理&#xff0c;但还不能直接拿去训练模型&#xff0c;还需要选择有意义的特征&#xff08;即特征选择&#xff09;&am…

win10计算机优化技巧,让Win10系统运行更流畅的优化技巧

虽然Win10系统对配置要求不高&#xff0c;在普通条件电脑的环境中也能流畅运行。但是用户总不会介意进一步优化Win10&#xff0c;让Win10在流畅的基础上变得更流畅一些。本文就来介绍一下让Win10系统更流畅的优化技巧。Win10优化技巧1、用360优化win10后开不了机的问题原因是禁…

c include 多层目录_python+C、C++混合编程的应用

TIOBE每个月都会新鲜出炉一份流行编程语言排行榜&#xff0c;这里会列出最流行的20种语言。排序说明不了语言的好坏&#xff0c;反应的不过是某个软件开发领域的热门程度。语言的发展不是越来越common&#xff0c;而是越来越专注领域。有的语言专注于简单高效&#xff0c;比如p…

校友会2019中国大学计算机,校友会2019中国计算机类一流专业排名,清华大学排名第一...

原标题&#xff1a;校友会2019中国计算机类一流专业排名&#xff0c;清华大学排名第一中国哪些高校的计算机类本科专业跻身2019世界一流专业、中国顶尖专业和中国一流专业行列&#xff1f;哪些计算机类本科专业是2019年中国高考最优秀考生的最佳选择&#xff1f;为了给2019年全…

查询结果取交集_Elasticsearch 查询过程中的 prefilter 原理

大家都知道在对索引执行查询的时候&#xff0c;需要在所有的分片上执行查询&#xff0c;因为无法知道被查询的关键词位于哪个分片&#xff0c;对于全文查询来说诚然如此&#xff0c;然而对于时序型的索引&#xff0c;当你从 my_index-* 中执行 now-3d 的范围查询时&#xff0c;…

计算机专业人毕业设计外文翻译,计算机专业毕业设计外文翻译.doc

《计算机专业毕业设计外文翻译.doc》由会员分享&#xff0c;提供在线免费全文阅读可下载&#xff0c;此文档格式为doc&#xff0c;更多相关《计算机专业毕业设计外文翻译.doc》文档请在天天文库搜索。1、&#xfeff;近几年来&#xff0c;随着计算机的普及和建筑电子产业的发展…

语音识别插件_AnsweringMachine XS: 越狱理由之二,iPhone 电话语音答录机

Apps & Tweaks| Jailbreak Guide| iDevicesTweak&#xff1a;AnsweringMachine XSVersion&#xff1a;XSRepo&#xff1a;http://limneos.net/iOS Support&#xff1a;12-13Price&#xff1a;3.99iOS 开发人员 Elias Limneos 开发了电话辅助系列插件&#xff0c;AnsweringM…

怎么在计算机里找到CF里保存的视频,电脑怎么查看穿越火线录制保存视频?操作方法...

在Win10电脑上玩穿越火线&#xff0c;遇到精彩时刻我们都会录制下&#xff0c;好跟朋友分享&#xff0c;但是在Win10电脑上穿越火线录制保存之后的视频&#xff0c;在哪看呢?有很多用户都不知道怎么在Win10电脑查看这个穿越火线录制保存的视频&#xff0c;这个的话&#xff0c…

ironpython this_IronPython sys._getframe not found

问题Im currently building a program in C# which will call functions in provided python script files.Some of these script files calls _getframe() in sys, which results in the error:System.MissingMemberException: module object has no attribute_getframe(Since…

计算机账务处理流程图,账务处理流程图

手工业务流程图账务处理流程主要有 5 种形式&#xff1a;记账凭证核算形式、科目汇总表核算形式、汇总记账凭证核算形式、日记总账核算形式、和多栏式日记账核算形式。不同的账务处理流程其差别主要体现在登记总账的方法和依据不同&#xff0c;其中科目汇总表核算形式最为常见&…

css滑动门的用处,CSS滑动门是什么?有什么用处?[web前端培训]

在制作网页导航时&#xff0c;经常会碰到导航栏长度不同&#xff0c;但背景相同的情形。此时如果通过拉伸背景图的方式来适应文本内容&#xff0c;就会造成背景图变形。在制作网页时&#xff0c;为了使各种特殊形状的背景能够自适应元素中的文本内容&#xff0c;并且不会变形&a…

vue 父链和子组件索引_vuejs填坑-父子组件之间的访问

有时候我们需要父组件访问子组件&#xff0c;子组件访问父组件&#xff0c;或者是子组件访问根组件。1. 父组件访问子组件 $children或$ref$children 返回所有子组件的实例&#xff0c;是一个数组显示两个组件的信息{{ msg }}{{ msg }}Vue.component(child1, {template: #child…

python多线程爬取多个网页_python多线程爬取网页

#-*- encoding:utf8 -*-‘‘‘Created on 2018年12月25日author: Administrator‘‘‘from multiprocessing.dummy import Pool as plimport csvimport requestsfrom lxml import etreedef spider(url):header {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WO…

layui 分页ajax,实现Ajax异步的layui分页

页面代码:人才推荐姓名学历技能经验住址联系方式 ${res}${data}于千万年之中时间的无涯的荒野里…时间的无涯的荒野里…--%>js代码//加载完成$(function(){var sherchkey${positioninfo.name};savePosition();//保存修改方法getPeopleList(1,5,sherchkey);//获取人才列表// …

Gen系列服务器,新计算、新体验 | 新华三全新HPE Gen10系列服务器响彻“云”端

数字经济时代的数据中心正在加速向云计算融合&#xff0c;用户将面临传统架构与云架构并存的混合IT模式。如何既拥有专有数据中心对数据完全可控以及对关键业务充分优化的优势&#xff0c;又能拥有云计算的灵活弹性&#xff1f;如何有效利旧并满足混合IT架构的需求&#xff1f;…

python 异常处理 变量_Python基础入门:从变量到异常处理

一 . 条件语句1.if-else 语句当if语句后的条件结果表达式为假&#xff0c;则执行else 语句后的代码。如若输入数字非666&#xff0c;则会输出“猜错了&#xff0c;小姐姐现在心里想的为666“2.if 语句支持嵌套hi6 hi>2 执行 if hi>7 6<7 所以无输出hi1 hi<2 执行 p…

web系统四层结构中服务器端,基于.NET平台构建四层B/S结构的动态网站

摘要&#xff1a;Web是基于Internet技术的一种应用层服务,具有后台数据库支持的n层B&#xff0f;S结构已经成为动态Web应用的主流。虽然动态网站开发工作的主要是进行服务器端应用程序的开发,但是B&#xff0f;S结构动态Web的应用要涉及浏览器、Web服务器、服务器端应用程序、数…

收藏功能_微软Edge获得了新的收藏夹菜单、PDF功能等

作为其今年早些时候概述的战略的一部分&#xff0c;微软Edge现在正在向所有Windows 10 PC推出。与经典的Edge不同&#xff0c;Chromium Edge与任何特定的Windows更新无关&#xff0c;但微软又开始为该浏览器进行了一系列令人兴奋的改进。新的Edge基于Chromium&#xff0c;它还带…

服务器LIMIT是什么信号,Postfix添加milter-limit配置方案

[安装环境]操作系统&#xff1a;CentOS 5.6MAT&#xff1a;POSTFIX2.8.4安装之前必须保证POSTFIX能正常收发信如果已经安装过Berkeley Db3以上版本可以不安装新的DB(但是注意引入db.so)[安装步骤]1、milter-limit-0.14.tar.gz及libsnert-1.71.6.tar.gz包的获取方法需要创建一个…