• 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...

  • 相关阅读:
    Linux多线程Pthread学习小结
    TCP三次握手/四次挥手
    内存管理内幕
    Delphi 中分发设计时包
    一个小的算法问题解决
    写了一个验证数字范围的正则表达式
    用 XML 文件持久化和恢复图片信息
    string.Empty 和 "" 并不总是可以互换的
    博客园用的 FreeTextBox 有 bug
    乱花渐欲迷人眼。。。
  • 原文地址:https://www.cnblogs.com/edeny/p/14685329.html
Copyright © 2020-2023  润新知