VictoriaMetrics单实例向syslog输出大量乱码日志的排查与解决
问题现象
May 25 20:38:41 victoriametrics-1 vmsingle[17279]: 2023-05-25T20:38:41.703Z#011error#011VictoriaMetrics/lib/protoparser/vmimport/parser.go:239#011cannot unmarshal json line "5\x1do\x00)6o\x00Lread_duration_second\xf2S\x01\x00aB\xb5\x04=S\x01n\x04er\xcem\x06.@\x01\bf": cannot parse json line: unexpected tail: "\x1do\x00)6o\x00Lread_duration_second\xf2S\x01\x00aB\xb5\x04=S\x01n\x04er\xcem\x06.@\x01\bf"; skipping it
可能原因
- 接口格式不匹配:vmsingle的
/api/v1/import接口用于解析特定格式的文本数据(如vmimport格式),但如果vmagent或其他客户端用remoteWrite的protobuf格式向该接口发送数据,会触发解析错误。 - 传输链路数据损坏:vmagent到vmsingle之间的网络不稳定,存在丢包、字节截断情况,导致原本合法的数据变成乱码。
- vmagent配置错误:错误将remoteWrite的目标地址指向了vmsingle的
/api/v1/import端点,而非标准的/api/v1/write端点;或者remoteWrite的格式配置不符合要求。 - 非法数据源写入:有其他服务或客户端向vmsingle的
/api/v1/import接口发送了非预期的二进制数据,导致解析失败。
解决方法
修正vmagent的remoteWrite配置
确保vmagent的remoteWrite目标指向vmsingle的标准写入端点,配置示例:remoteWrite: - url: "http://vmsingle:8428/api/v1/write"避免将remoteWrite数据发送到
/api/v1/import接口。排查网络传输问题
检查vmagent与vmsingle之间的网络链路,确认是否存在中间代理(如Nginx)修改或截断数据。可以临时开启vmagent的debug日志(添加-logLevel=debug启动参数),查看发送的数据格式是否正常。限制vmimport接口的访问权限
如果不需要对外提供/api/v1/import导入服务,可通过防火墙或vmsingle的访问控制规则,限制该接口仅对合法导入客户端开放,拦截非法流量。定位非法数据源
若vmsingle启用了访问日志,查看日志中访问/api/v1/import的客户端IP,确认是否为合法数据源。对于非法来源,直接在网络层面拦截其流量。升级VictoriaMetrics版本
如果是版本兼容性bug导致的解析错误,将vmagent和vmsingle升级到最新稳定版本,新版本通常会修复此类解析问题。
内容的提问来源于stack exchange,提问作者forkie

