首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

关于容器化的日志统一收集有什么好的解决方案???

  •  
  •   Olsen · 61 天前 · 1761 次点击
    这是一个创建于 61 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:服务通过容器化改造,通过 K8s 多实例部署,但是在日志收集上遇到了问题, 需求:要根据 PODid PODname 和 namespace 标记日志是来自与哪个实例? 各位屌大的,貴司都是怎麽解決的

    26 回复  |  直到 2019-08-23 12:23:01 +08:00
        1
    devtiange   61 天前
    node 上部署 DaemonSet, 读 log, 往 ES 里写. 自己撸一个也不会太麻烦
        2
    SunnyFeng   61 天前
    阿里有开源的 log-pilot 可以满足你的需求。
        3
    Biebe   61 天前
    fluent
        4
    Nitroethane   61 天前 via Android
    @devtiange 赞同使用 es。最近又在研究 elk,感觉好多功能都可以上马 elk 全套
        5
    Cbdy   61 天前 via Android
    接管容器的标准输出,传给 ES,剩下的就是搜索引擎的事情了
        6
    annoymous   61 天前
    efk
        7
    Olsen   61 天前   ♥ 1
    @Biebe Fluentd 还是 Fluent-bit,你们有具体的实践?
    Fluent-bit 怎么解决的 Java Exception Stack 多行日志的问题
        8
    Olsen   61 天前
    @annoymous 日志收集用的什么? Fluent-bit 还是 Fluentd 还是 Filebeat ?
        9
    Olsen   61 天前
    @Cbdy 用什么收集容器的标准输出啊?
        10
    Olsen   61 天前
    @devtiange 这样子的容器化从 13 年到现在有没有比较成熟的日志收集方案?没必要重复造轮子吧?你用过吗?
        11
    monsterxx03   61 天前
    之前做的时候我用的 fluent-bit + fluentd: https://blog.monsterxx03.com/2019/05/26/centralized-logging-on-k8s/

    fluent-bit 有 multi line mode, 但要自己写一个正则去 parser
        12
    HuHui   61 天前 via Android
    elk,efk
        13
    Olsen   61 天前
    @monsterxx03 自己写的 parser 老是报错,找不到具体原因,Regex 也检测过,没有什么问题啊
    我给你贴一下 你看看能不能看出来什么原因

    [PARSER]
    Name findfirstline
    Format regex
    Time_Key time
    Regex .(?<log>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}|DEBUG|INFO|ERROR).
    Time_Format %Y-%m-%d %H:%M:%S.%L
    Time_Keep On
    Decode_Field_As escaped_utf8 log

    findfirstline 这个 parser 报错,错误如下,不知道为什么?

    [2019/08/15 09:29:24] [error] [in_tail] multiline: invalid parser 'findfirstline'
    [2019/08/15 09:29:24] [error] Failed initialize input tail.0
        14
    Olsen   61 天前
    @HuHui 能拿到日志所在 Pod 的 podname podid 和 namespace ?
        15
    Olsen   61 天前
    @SunnyFeng 好的,一会去研究一下
        16
    monsterxx03   61 天前
    @Olsen fluent-bit 的 Regex 都是匹配一行的, 内容需要包在 ^$ 里面吧, 但我也没试过,你试试
        17
    Olsen   61 天前
    @monsterxx03 加了也不行,在 fluent-bit 的 github 的 issue 上别人写的能用的 Regex 我这也不能用,就是因为这个 Fluent-bit 走不下去了,才回头想其他方法的
        18
    rockyou12   61 天前
    lz 是 spring boot 的程序嘛?我们也是部署到 k8s 上,但收集日志是用的 logback -> logstatsh -> elasticsearch 来收集,好处是配置比 fluent 更简单,收集信息也更丰富,可以把无用的 stack 信息直接过滤。不过和应用有耦合,同时也没有通用性
        19
    JasonYo   61 天前
    容器化服务,部署时挂载日志目录(公有云 NAS),再走固定节点部署 ds-filebeat and -->kafka-->logstash-->es
    that's it
        20
    Olsen   61 天前
    @rockyou12 有一个问题就是在进行集群部署的时候 可能一个服务部署了三个实例 A1 A2 A3 在进行日志收集的时候怎么区分日志来自于哪个实例?比如 Pod name,namespace,label 等
        21
    Olsen   61 天前
    @JasonYo 有一个问题就是在进行集群部署的时候 可能一个服务部署了三个实例 A1 A2 A3 在进行日志收集的时候怎么区分日志来自于哪个实例?比如 Pod name,namespace,label 等
        22
    JasonYo   61 天前
    @Olsen #21 通过环境变量获取容器信息
        23
    rockyou12   61 天前
    @Olsen pod 的环境变量里有这些信息,直接拿就是
        24
    devtiange   61 天前
    @Olsen 没有发现特别好的开箱即用轮子, 我之前用的是基于 fluentd 的方案, 写一个 ruby 插件, 来读 docker/k8s 的特有信息. 然后发到 ES 或者 kafka.
        25
    Olsen   57 天前
    @rockyou12 具体的一个流程能简要的介绍一下?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1438 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 17:20 · PVG 01:20 · LAX 10:20 · JFK 13:20
    ♥ Do have faith in what you're doing.