容器日志收集ELK+Filebeat+Kafka

简介

随着容器如火如荼的发展,分布式的业务架构日志收集便也成了我们需要重点考虑之一;传统方式中已经有相对成熟的解决方案,无不外乎容器中我们同样能够采取相同的架构解决容器基于Kubernetes的日志收集问题;

 

组件介绍

对于这套方案,网上已经有无数种介绍,在此就不再对各大组件进行赘述,仅做简单描述

组件作用优点
Filebeat作为客户端收集日志,输送消息至Kafka占用资源少,处理数据快,十分稳定
Kafka接收Filebeat产生的消息,并由Logstash进行消费解决程序异常导致的日志丢失问题
Logstash消费Kafka中的消息,根据规则自动创建索引可配置型高,支持多输入输出方式
Elasticsearch持久化存储数据便于检索查询
Kibana展示日志收集结果便于结果查询

 

架构图

 

容器日志采集方式

  • 文件读取: 容器日志通过程序定义输出到文件然后通过挂载出来

  • Daemonset: 在Node节点部署filebeat采集容器日志

  • Sidercar: 在每个Pod中部署sidecar容器用于收集容器日志

这三种方式各有利弊,从维护性及资源使用上,比较推荐的是Daemonset方式

 

要求

  • 首先需要在每个Node节点上部署filebeat

  • 定义容器中的日志输出到控制台,以nginx为例

         access_log /dev/stdout json;
         error_log  /dev/stderr;
  • 为Pod添加annotations用于收集控制参数

          annotations:
            filebeat.harvest: "true"
            filebeat.index: "elktest"

日志收集效果

场景是否丢日志测试过程
更新nginx/php配置时持续请求2W次,日志有2W条展示
更新k8s yaml模版持续请求2W次,日志有2W条展示
更新代码持续请求2W次,日志展示偶尔少1条、2条,无错误日志;经排查由于脚本执行过程中未发起http请求
Hpa进行弹性伸缩持续请求2W次,日志有2W条展示
Hpa进行弹性伸缩的情况下更新代码是(出现502情况)持续请求2W次,日志有大于2W条展示日志,有短时间502出现(5~20S服务不可达)待调优

服务部署

为防止篇幅过长影响可读性,部署章节分文编写,请见下章

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值