如何解决Vector记录空行日志时出现崩溃的问题?
Vector监控Docker日志遇空行崩溃的问题解决
问题现象
用Vector的docker_logs源收集Docker容器日志,再通过aws_cloudwatch_logs sink输出时,只要容器输出空行(比如单独执行echo命令),Vector就会直接崩溃,报错信息如下:
thread 'vector-worker' panicked at src/sinks/aws_cloudwatch_logs/request_builder.rs:111:52: payload should never be zero length
配置文件
sources: dummy_logs: type: "docker_logs" docker_host: "/path_to/docker.sock" sinks: print: type: "aws_cloudwatch_logs" inputs: ["dummy_logs"] group_name: "/my/group" stream_name: "%Y/%m/%d/my-stream" encoding: codec: "text"
复现步骤
- 启动Vector:
vector --config my_config.yaml
- 新开窗口启动测试容器:
docker run -it --rm alpine /bin/sh
- 在容器shell中执行:
ls:正常运行,Vector无异常- 单独执行
echo:Vector直接退出
解决办法
方法1:添加过滤转换拦截空行
在配置中新增transforms阶段,过滤掉内容为空的日志事件,避免空payload进入CloudWatch sink:
sources: dummy_logs: type: "docker_logs" docker_host: "/path_to/docker.sock" transforms: filter_empty_lines: type: "filter" inputs: ["dummy_logs"] condition: '!is_empty(.message)' sinks: print: type: "aws_cloudwatch_logs" inputs: ["filter_empty_lines"] group_name: "/my/group" stream_name: "%Y/%m/%d/my-stream" encoding: codec: "text"
该配置会检查每条日志的message字段,仅保留非空事件,从根源上避免空内容触发panic。
方法2:升级Vector到最新版本
这个panic属于Vector的已知bug,后续版本大概率已修复。直接升级到最新稳定版,问题可能会自动解决。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

