k8skubernetesalready

Kubernetes日志收集方案

2022-07-24  本文已影响0人  想成为大师的学徒小纪

承接上文Kubernetes部署应用服务,本文介绍基于ELK的k8s应用日志收集

一、日志架构

日志采集方式一般分为主动采集和被动采集两种,在K8s中,被动采集一般分为Sidecar和DaemonSet两种方式,主动采集分为DockerEngine推送和业务直写两种方式。

各方式对比如下:

DockerEngine推送 业务直写 DaemonSet Sidecar
部署难度 低,原生支持 低,只需维护好配置文件即可 一般,需维护DaemonSet 较高,每个POD都需要部署
隔离性 弱,日志直写会和业务逻辑竞争资源 一般,只能通过配置间隔离 强,通过容器进行隔离,可单独分配资源
资源占用 一般
可定制性
耦合度 高,与DockerEngine强绑定,修改需要重启DockerEngine 高,采集模块修改/升级需要重新发布业务 低,agent可独立升级 一般,默认agent升级对应pod需要重启(有一些扩展包可以支持Sidecar热升级)
出现瓶颈率
适用场景 非生产场景 对性能要求极高的场景 中小型集群 大型、混合型、PAAS型集群

本文采取使用sidecar容器运行日志代理的方法。首先创建一个带有日志记录代理的sidecar容器,将该代理容器与业务容器放进一个POD里运行。然后通过hostpath挂载方式将日志目录持久化到节点上(为防止ELK不可用时,能继续查看日志),代理容器挂载节点日志目录,将日志采集输出到外部Kafka集群。外部Logstash程序去Kafka集群消费对应topic消息并进行过滤筛选,再将日志输出到外部Elasticsearch集群。最后通过Kibana对数据进行可视化分析。

优点:日志收集比较灵活,可扩展性强,性能较高

缺点:资源占用高,部署繁琐

注意事项:业务容器建议关闭日志控制台标准输出,避免两倍的磁盘占用量,因docker会将标准输出以json格式写入文件。关闭日志控制台标准输出会导致kubectl logs无法查看日志

二、部署流程

1、安装外部Elasticsearch和Kafka

<!== 生产环境建议使用集群安装 ==>

2、安装外部Logstash和Kibana

<!== 生产环境建议使用集群安装 ==>

3、业务pod集成Filebeat容器

3.1、打包镜像方式一

2.2、打包镜像方式二

上一篇下一篇

猜你喜欢

热点阅读