Kubernetes日志采集Sidecar模式介绍
摘要: DaemonSet和Sidecar模式各有优缺点,目前没有哪种方式可以适用于所有场景。因此我们阿里云日志服务同时支持了DaemonSet以及Sidecar两种方式,并对每种方式进行了一些额外的改进,更加适用于K8S下的动态场景。
Kubernetes(K8S)作为CNCF(cloud native computing foundation)的一个核心项目,背靠Google和Redhat的强大社区,近两年发展十分迅速,在成为容器编排领域中领导者的同时,也正在朝着PAAS底座标配的方向发展。
日志采集方式
日志作为任一系统不可或缺的部分,在K8S的官方文档中也介绍了多种的日志采集形式,总结起来主要有下述3种:原生方式、DaemonSet方式和Sidecar方式。
- 原生方式:使用
kubectl logs
直接在查看本地保留的日志,或者通过docker engine的log driver
把日志重定向到文件、syslog、fluentd等系统中。 - DaemonSet方式:在K8S的每个node上部署日志agent,由agent采集所有容器的日志到服务端。
- Sidecar方式:一个POD中运行一个sidecar的日志agent容器,用于采集该POD主容器产生的日志。
采集方式对比
每种采集方式都有一定的优劣势,这里我们进行简单的对比:
从上述表格中可以看出:
- 原生方式相对功能太弱,一般不建议在生产系统中使用,否则问题调查、数据统计等工作很难完成;
- DaemonSet方式在每个节点只允许一个日志agent,相对资源占用要小很多,但扩展性、租户隔离性受限,比较适用于功能单一或业务不是很多的集群;
- Sidecar方式为每个POD单独部署日志agent,相对资源占用较多,但灵活性以及多租户隔离性较强,建议大型的K8S集群或作为PAAS平台为多个业务方服务的集群使用该方式。
日志服务K8S采集方式
DaemonSet和Sidecar模式各有优缺点,目前没有哪种方式可以适用于所有场景。因此我们阿里云日志服务同时支持了DaemonSet以及Sidecar两种方式,并对每种方式进行了一些额外的改进,更加适用于K8S下的动态场景。
这两种模式均基于Logtail实现,日志服务客户端Logtail目前已有百万级部署,每天采集上万应用、数PB的数据,历经多次双11、双12考验。相关技术分享可以参见文章:多租户隔离技术+双十一实战效果,Polling + Inotify 组合下的日志保序采集方案。
DaemonSet采集方式
DaemonSet方式下Logtail做了非常多的适配工作,包括:
- 一条命令一个参数即可实现部署,资源自动初始化
- 支持CRD方式配置,支持K8S控制台、kubectl、kube api等,与K8S发布、部署无缝集成
- K8S RBAC鉴权,日志服务STS鉴权管理
详细的介绍文章可以参考:
再次升级!阿里云Kubernetes日志解决方案
LC3视角:Kubernetes下日志采集、存储与处理技术实践
Sidecar采集方式
sidecar方式的配置以及使用相对在虚拟机/物理机上采集数据区别不大,从Logtail容器视角来看:Logtail工作在一个“虚拟机”上,需要采集这个机器上某个/某些日志文件。
但在容器场景下还需解决两个问题:
- 配置:使用编排的方式配置agent容器
- 动态性:需适应POD的IP地址和hostname的变化
目前Logtail的容器支持通过环境变量配置相关参数,并支持自定义标识的机器组进行工作,可以完美解决上述两个问题。
Sidecar配置示例
Sidecar模式下日志组件安装、配置方式如下:
步骤一: 部署Logtail容器
- 在部署POD时将日志路径挂载到本地,并将对应的volume也挂载到Logtail容器。
- Logtail容器需配置
ALIYUN_LOGTAIL_USER_ID
、ALIYUN_LOGTAIL_CONFIG
、ALIYUN_LOGTAIL_USER_DEFINED_ID
,参数含义以及值的选取参见:标准Docker日志采集。
tips:
- Logtail容器建议配置健康检查,在运行环境、内核等出现异常时可自动恢复。
- 示例中使用的Logtail镜像访问的是阿里云hangzhou公网镜像仓库,您可根据需求替换成本Region的镜像,并使用内网方式。
apiVersion: batch/v1
kind: Job
metadata:name: nginx-log-sidecar-demonamespace: kube-system
spec:template:metadata:name: nginx-log-sidecar-demospec:# volumes配置volumes:- name: nginx-logemptyDir: {}containers:# 主容器配置- name: nginx-log-demoimage: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latestcommand: ["/bin/mock_log"]args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"]volumeMounts:- name: nginx-logmountPath: /var/log/ngin# Logtail的Sidecar容器配置- name: logtailimage: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latestenv:# aliuid- name: "ALIYUN_LOGTAIL_USER_ID"value: "165421******3050"# 自定义标识机器组配置- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"value: "nginx-log-sidecar"# 启动配置(用于选择Logtail所在Region)- name: "ALIYUN_LOGTAIL_CONFIG"value: "/etc/ilogtail/conf/cn-hangzhou/ilogtail_config.json"# 和主容器共享volumevolumeMounts:- name: nginx-logmountPath: /var/log/nginx# 健康检查livenessProbe:exec:command:- /etc/init.d/ilogtaild- statusinitialDelaySeconds: 30periodSeconds: 30
步骤二: 配置机器组
如下图所示,在日志服务控制台创建一个Logtail的机器组,机器组选择自定义标识,可以动态适应POD ip地址的改变。具体操作步骤如下:
- 开通日志服务并创建Project、Logstore,详细步骤请参考准备流程。
- 在日志服务控制台的机器组列表页面单击创建机器组。
- 选择用户自定义标识,将您上一步配置的
ALIYUN_LOGTAIL_USER_DEFINED_ID
填入用户自定义标识内容框中。
步骤三:配置采集方式
机器组创建完成后,即可配置对应文件的采集配置,目前支持极简、Nginx访问日志、分隔符日志、JSON日志、正则日志等格式,具体可参考:文本日志配置方式。本示例中配置如下:
步骤四:查询日志
采集配置完成并应用到机器组后,1分钟内日志即可采集上来,进入对应logstore的查询页面即可查询到采集上来的日志。
日志进阶
阿里云日志服务针对日志提供了完整的解决方案,日志采集只是其中的第一步,以下相关功能是日志进阶的必备良药:
- 日志上下文查询:https://help.aliyun.com/document_detail/48148.html
- 快速查询:https://help.aliyun.com/document_detail/88985.html
- 实时分析:https://help.aliyun.com/document_detail/53608.html
- 快速分析:https://help.aliyun.com/document_detail/66275.html
- 基于日志设置告警:https://help.aliyun.com/document_detail/48162.html
- 配置大盘:https://help.aliyun.com/document_detail/69313.html
更多日志进阶内容可以参考:日志服务学习路径。
Kubernetes日志采集Sidecar模式介绍相关推荐
- 采集虚拟机_系列文章:Kubernetes日志采集最佳实践
前言 上一期主要介绍Kubernetes日志输出的一些注意事项,日志输出最终的目的还是做统一的采集和分析.在Kubernetes中,日志采集和普通虚拟机的方式有很大不同,相对实现难度和部署代价也略大, ...
- 系列文章:Kubernetes日志采集最佳实践
前言 上一期主要介绍Kubernetes日志输出的一些注意事项,日志输出最终的目的还是做统一的采集和分析.在Kubernetes中,日志采集和普通虚拟机的方式有很大不同,相对实现难度和部署代价也略大, ...
- Kubernetes入门——Kubernetes日志采集与监控告警
作者简介: 郭川磊 百度基础架构部研发工程师 负责云原生产品的研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes实现应用高可用』梳 ...
- [kubernetes]-filebeat以sidecar模式收集pod日志
目的: 收集测试环境日志到kibana 定义日志收集相关配置的一个通配configmap test-filebeat-config.yaml #定义日志收集相关配置的一个通配configmap --- ...
- kubernetes日志采集与解析
需求:当我们创建deployment后,我们希望能够收集到这些deployment每个pod的终端日志,并且能够通过deployment的名字以及pod的名字进行过滤 日志方案 filebeat -& ...
- LC3视角:Kubernetes下日志采集、存储与处理技术实践
摘要: 在Kubernetes服务化.日志处理实时化以及日志集中式存储趋势下,Kubernetes日志处理上也遇到的新挑战,包括:容器动态采集.大流量性能瓶颈.日志路由管理等问题.本文介绍了" ...
- K8S 使用 SideCar 模式部署 Filebeat 收集容器日志
推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...
- 直击痛点,详解 K8s 日志采集最佳实践
作者 | 元乙 阿里云存储服务技术专家 导读:上一篇文章主要介绍 Kubernetes 日志输出的一些注意事项,日志输出最终的目的还是做统一的采集和分析.在 Kubernetes 中,日志采集和普通虚 ...
- Logtail 文件日志采集之完整正则模式
前言 为了简化文件日志的采集过程,Logtail 提供了按行采集的极简模式:通过换行符来切分日志,每行作为一条日志.极简模式具有高效.配置简单等优势,但它将整条日志的内容作为整体,而不会对单条日志的内 ...
最新文章
- 如何备考上海市高等学校计算机一级,计算机一级考试备考攻略
- java jvm 参数配置_Java 从小白到大牛,JVM 不得不知的一些参数和配置
- 一招教你解决大数据量下的各种报表使用问题
- php taint安装失败,PHP Taint – 一个用来检测XSS漏洞的扩展
- java 排序算法面试题_面试题: java中常见的排序算法的实现及比较
- Oracle开发:常用的数据库字段类型[转]
- tail -f 命令卡住
- NHibernate N+1问题实例分析和优化
- SPSS卡方检验笔记
- mysql percent_MySQL PERCENT_RANK 函数
- 云计算中的Server Consolidation
- llvm-IR基础知识
- 2019八泉峡第二届国际露营大会圆满落幕 创新举措引爆景区
- CSDN日报20170727——《想提高团队技术,来试试这个套路!》
- 趣味数学--贷款计算
- OTB数据集和VOT数据集融合跟踪算法接口示例
- vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期-03
- armbian 斐讯n1_斐讯N1-ArmBian系统写入EMMC及优化
- 在Ubuntu上安装802.11n无线网卡驱动
- 永中科技破产清算的疑问(二)
热门文章
- redis原理之快照(rdb)原理
- TIL: 简单初始化iex
- 比炒鞋还疯狂,盲盒是如何让消费者心甘情愿被套路的?
- 软与硬的碰撞,打造出OPPO R17 Pro的强悍夜拍体验
- 几种混合模式移动应用开发框架的对比
- tcpdump抓包常用参数
- 仿京东开放平台框架,开发自己的开放平台(包含需求,服务端代码,SDK代码)...
- 乐逗游戏宣布2000万美元股票回购计划 更新Q4业绩预期
- MySQL的关系模式集是什么_数据库中“关系模式”的定义是什么?
- 2006-03-05 20:41又是唱k