在Container-Optimized OS上迁移fluentd到fluent-bit的Stackdriver日志格式问题
问题解决办法
很多人在从fluentd迁移到COS默认fluent-bit时都碰到过这个问题,核心原因是两者默认处理JSON日志的逻辑不同:fluentd会自动解析日志行里的JSON并展开字段,而fluent-bit默认会把整个JSON字符串作为message字段的值传给Stackdriver,导致控制台没法正常展示日志内容。
无需修改COS默认fluent-bit配置的解决办法如下:
给容器添加解析器标签
在部署容器时,添加logging.googleapis.com/parser: json标签。COS的fluent-bit代理会识别这个标签,自动启用JSON解析器处理该容器的日志,将日志行中的JSON字段展开到顶层,和原fluentd的行为一致,Stackdriver控制台就能正常展示消息内容了。比如在Kubernetes Deployment配置里添加标签:
metadata: labels: logging.googleapis.com/parser: json调整Logback配置(备选)
如果没法修改容器标签,也可以调整StackdriverJsonLayout的输出格式,让日志直接输出符合Stackdriver期望的结构,同时确保fluent-bit不会把它当作字符串嵌套。比如,保证日志的顶级message字段只包含纯文本消息内容,severity、timestamp等元数据作为同级字段输出。不过这种方式需要修改应用的日志配置,不如标签方式便捷。
内容的提问来源于stack exchange,提问作者marthursson
相关产品推荐
相关产品推荐

