11 深入kubernetes-----日志和监控-----11-1 常见日志采集问题和解决方案分析

k8s中的日志处理

传统服务 

  • 固定机器、固定目录
  • 不受重启影响
  • 不关注stdout、stderr

 k8s中的服务

  • 节点不固定
  • 重启服务会漂移
  • 需关注stdout、stderr

k8s的日志

  • stdout   标准输出
  • stderr    错误输出

  # 默认,以json模式保存目录。也可以修改指定日志目录

  /var/lib/docker/containers/<cname>/<cname>-json.log    

  • 日志文件

  对于应用直接写日志文件,重启丢失

常见方案-----远程日志

  pod----(ES,kafka)     # 用的比较多的。应用做改造

常见方案-----sidecar

  每个pod中跑一个 sidecar,会跟主容器共享volume,可以访问到所有的日志文件。把日志文件转发后端存储。单独的进程,消耗内存,cpu。社区不推荐这种方式

常见方案-----LogAgent

  每个节点上部署一个agent, 相当于sidecar从pod中拿到节点上。通过agent采集所有pod日志发送后端存储。一般一daemonset方式部署。需要容器把日志挂载到宿主机上。

  资源消耗小,对pod没有侵入,对应用没有侵入。

  约定所有项目挂载一个特定的主机目录,主机名也尽量统一。挂载目录事先定义好的,日志来源不好判断来源于哪个pod。

我们实践的方案。

 

 一个节点部署一个agent。agent采用阿里开源的 LogPilot。

常见的agent:filebeat、logstash、fluentd等,都是静态的。静态日志容器出现瓶颈。

logpilot 能采集docker错误输出,也能采集文件日志。

  • 智能的容器日志采集工具
  • 自动发现机制
  • 2917年初在github开源。

在静态采集上面又包了一层,事先静态之上的动态采集。自动发现。

目前 Log-Pilot 支持两种采集插件:一个是CNCF社区的Fluentd插件,一个是Elastic的Filebeat插件;其同时其支持对接多种存储后端,目前 Fluentd 和 Filebeat 都支持 Elasticsearch、Kafka、File、Console 作为日志存储后端,而 Fluentd 还支持 Graylog、阿里云日志服务 以及 Mongodb 作为存储后端。

 

 

 

 

 

 

 

 

 

 

 

 

图:

 

 end...

 

posted @ 2021-04-21 15:09  王竹笙  阅读(288)  评论(0编辑  收藏  举报