背景:服务通过容器化改造,通过 K8s 多实例部署,但是在日志收集上遇到了问题, 需求:要根据 PODid PODname 和 namespace 标记日志是来自与哪个实例? 各位屌大的,貴司都是怎麽解決的
1
devtiange 2019 年 8 月 19 日
node 上部署 DaemonSet, 读 log, 往 ES 里写. 自己撸一个也不会太麻烦
|
2
SunnyFeng 2019 年 8 月 19 日
阿里有开源的 log-pilot 可以满足你的需求。
|
3
Biebe 2019 年 8 月 19 日
fluent
|
4
Nitroethane 2019 年 8 月 19 日 via Android
@devtiange 赞同使用 es。最近又在研究 elk,感觉好多功能都可以上马 elk 全套
|
5
Cbdy 2019 年 8 月 19 日 via Android
接管容器的标准输出,传给 ES,剩下的就是搜索引擎的事情了
|
6
annoymous 2019 年 8 月 19 日
efk
|
7
Olsen OP @Biebe Fluentd 还是 Fluent-bit,你们有具体的实践?
Fluent-bit 怎么解决的 Java Exception Stack 多行日志的问题 |
11
monsterxx03 2019 年 8 月 19 日
之前做的时候我用的 fluent-bit + fluentd: https://blog.monsterxx03.com/2019/05/26/centralized-logging-on-k8s/
fluent-bit 有 multi line mode, 但要自己写一个正则去 parser |
12
HuHui 2019 年 8 月 19 日 via Android
elk,efk
|
13
Olsen OP @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 |
16
monsterxx03 2019 年 8 月 19 日
@Olsen fluent-bit 的 Regex 都是匹配一行的, 内容需要包在 ^$ 里面吧, 但我也没试过,你试试
|
17
Olsen OP @monsterxx03 加了也不行,在 fluent-bit 的 github 的 issue 上别人写的能用的 Regex 我这也不能用,就是因为这个 Fluent-bit 走不下去了,才回头想其他方法的
|
18
rockyou12 2019 年 8 月 19 日
lz 是 spring boot 的程序嘛?我们也是部署到 k8s 上,但收集日志是用的 logback -> logstatsh -> elasticsearch 来收集,好处是配置比 fluent 更简单,收集信息也更丰富,可以把无用的 stack 信息直接过滤。不过和应用有耦合,同时也没有通用性
|
19
Oneneuuu 2019 年 8 月 19 日
容器化服务,部署时挂载日志目录(公有云 NAS),再走固定节点部署 ds-filebeat and -->kafka-->logstash-->es
that's it |
20
Olsen OP @rockyou12 有一个问题就是在进行集群部署的时候 可能一个服务部署了三个实例 A1 A2 A3 在进行日志收集的时候怎么区分日志来自于哪个实例?比如 Pod name,namespace,label 等
|
21
Olsen OP @JasonYo 有一个问题就是在进行集群部署的时候 可能一个服务部署了三个实例 A1 A2 A3 在进行日志收集的时候怎么区分日志来自于哪个实例?比如 Pod name,namespace,label 等
|