关于容器化的日志统一收集有什么好的解决方案??? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Olsen
V2EX    问与答

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

  •  
  •   Olsen 2019-08-19 09:39:06 +08:00 4784 次点击
    这是一个创建于 2246 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    fluent-bit 有 multi line mode, 但要自己写一个正则去 parser
    HuHui
        12
    HuHui  
       2019-08-19 12:37:39 +08:00 via Android
    elk,efk
    Olsen
        13
    Olsen  
    OP
       2019-08-19 12:38:29 +08:00
    @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
    Olsen
        14
    Olsen  
    OP
       2019-08-19 12:42:17 +08:00
    @HuHui 能拿到日志所在 Pod 的 podname podid 和 namespace ?
    Olsen
        15
    Olsen  
    OP
       2019-08-19 12:43:06 +08:00
    @SunnyFeng 好的,一会去研究一下
    monsterxx03
        16
    monsterxx03  
       2019-08-19 13:05:09 +08:00
    @Olsen fluent-bit 的 Regex 都是匹配一行的, 内容需要包在 ^$ 里面吧, 但我也没试过,你试试
    Olsen
        17
    Olsen  
    OP
       2019-08-19 13:42:47 +08:00
    @monsterxx03 加了也不行,在 fluent-bit 的 github 的 issue 上别人写的能用的 Regex 我这也不能用,就是因为这个 Fluent-bit 走不下去了,才回头想其他方法的
    rockyou12
        18
    rockyou12  
       2019-08-19 14:05:57 +08:00
    lz 是 spring boot 的程序嘛?我们也是部署到 k8s 上,但收集日志是用的 logback -> logstatsh -> elasticsearch 来收集,好处是配置比 fluent 更简单,收集信息也更丰富,可以把无用的 stack 信息直接过滤。不过和应用有耦合,同时也没有通用性
    Oneneuuu
        19
    Oneneuuu  
       2019-08-19 14:36:04 +08:00
    容器化服务,部署时挂载日志目录(公有云 NAS),再走固定节点部署 ds-filebeat and -->kafka-->logstash-->es
    that's it
    Olsen
        20
    Olsen  
    OP
       2019-08-19 15:16:58 +08:00
    @rockyou12 有一个问题就是在进行集群部署的时候 可能一个服务部署了三个实例 A1 A2 A3 在进行日志收集的时候怎么区分日志来自于哪个实例?比如 Pod name,namespace,label 等
    Olsen
        21
    Olsen  
    OP
       2019-08-19 15:17:57 +08:00
    @JasonYo 有一个问题就是在进行集群部署的时候 可能一个服务部署了三个实例 A1 A2 A3 在进行日志收集的时候怎么区分日志来自于哪个实例?比如 Pod name,namespace,label 等
    Oneneuuu
        22
    Oneneuuu  
       2019-08-19 15:23:25 +08:00
    @Olsen #21 通过环境变量获取容器信息
    rockyou12
        23
    rockyou12  
       2019-08-19 17:18:05 +08:00
    @Olsen pod 的环境变量里有这些信息,直接拿就是
    devtiange
        24
    devtiange  
       2019-08-19 23:54:09 +08:00
    @Olsen 没有发现特别好的开箱即用轮子, 我之前用的是基于 fluentd 的方案, 写一个 ruby 插件, 来读 docker/k8s 的特有信息. 然后发到 ES 或者 kafka.
    Olsen
        25
    Olsen  
    OP
       2019-08-23 11:40:44 +08:00
    @rockyou12 具体的一个流程能简要的介绍一下?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     934 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 18:44 PVG 02:44 LAX 11:44 JFK 14:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86