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

2019-08-19 09:39:06 +08:00
 Olsen

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

4122 次点击
所在节点    问与答
26 条回复
devtiange
2019-08-19 09:48:26 +08:00
node 上部署 DaemonSet, 读 log, 往 ES 里写. 自己撸一个也不会太麻烦
SunnyFeng
2019-08-19 09:56:16 +08:00
阿里有开源的 log-pilot 可以满足你的需求。
Biebe
2019-08-19 10:28:38 +08:00
fluent
Nitroethane
2019-08-19 11:28:04 +08:00
@devtiange 赞同使用 es。最近又在研究 elk,感觉好多功能都可以上马 elk 全套
Cbdy
2019-08-19 11:29:34 +08:00
接管容器的标准输出,传给 ES,剩下的就是搜索引擎的事情了
annoymous
2019-08-19 11:42:36 +08:00
efk
Olsen
2019-08-19 12:20:09 +08:00
@Biebe Fluentd 还是 Fluent-bit,你们有具体的实践?
Fluent-bit 怎么解决的 Java Exception Stack 多行日志的问题
Olsen
2019-08-19 12:20:57 +08:00
@annoymous 日志收集用的什么? Fluent-bit 还是 Fluentd 还是 Filebeat ?
Olsen
2019-08-19 12:21:50 +08:00
@Cbdy 用什么收集容器的标准输出啊?
Olsen
2019-08-19 12:23:43 +08:00
@devtiange 这样子的容器化从 13 年到现在有没有比较成熟的日志收集方案?没必要重复造轮子吧?你用过吗?
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
2019-08-19 12:37:39 +08:00
elk,efk
Olsen
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
2019-08-19 12:42:17 +08:00
@HuHui 能拿到日志所在 Pod 的 podname podid 和 namespace ?
Olsen
2019-08-19 12:43:06 +08:00
@SunnyFeng 好的,一会去研究一下
monsterxx03
2019-08-19 13:05:09 +08:00
@Olsen fluent-bit 的 Regex 都是匹配一行的, 内容需要包在 ^$ 里面吧, 但我也没试过,你试试
Olsen
2019-08-19 13:42:47 +08:00
@monsterxx03 加了也不行,在 fluent-bit 的 github 的 issue 上别人写的能用的 Regex 我这也不能用,就是因为这个 Fluent-bit 走不下去了,才回头想其他方法的
rockyou12
2019-08-19 14:05:57 +08:00
lz 是 spring boot 的程序嘛?我们也是部署到 k8s 上,但收集日志是用的 logback -> logstatsh -> elasticsearch 来收集,好处是配置比 fluent 更简单,收集信息也更丰富,可以把无用的 stack 信息直接过滤。不过和应用有耦合,同时也没有通用性
JasonYo
2019-08-19 14:36:04 +08:00
容器化服务,部署时挂载日志目录(公有云 NAS),再走固定节点部署 ds-filebeat and -->kafka-->logstash-->es
that's it
Olsen
2019-08-19 15:16:58 +08:00
@rockyou12 有一个问题就是在进行集群部署的时候 可能一个服务部署了三个实例 A1 A2 A3 在进行日志收集的时候怎么区分日志来自于哪个实例?比如 Pod name,namespace,label 等

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX