日志使用的是Loki + Promtail的组合,我们知道loki的请求日志条数默认是100条,但是加上&limit=后,最多可以请求5000条日志,如:
/loki/api/v1/query_range?query={app=%22loki%22}&limit=5000&start=1697857240959000000&end=1697943640959000000
但是,当limit过大时,有可能返回如下报错:
2 errors: rpc error: code = ResourceExhausted desc = trying to send message larger than max (4953579 vs. 4194304); rpc error: code = ResourceExhausted desc = trying to send message larger than max (4953585 vs. 4194304)
这是由于 gRPC 或类似的 RPC 框架设置了消息大小的上限,以确保系统的稳定性和性能。
因此,可以在Loki的server配置中添加grpc的参数来解决:
grpc_server_max_recv_msg_size: 104857600
grpc_server_max_send_msg_size: 104857600
这里限制的大小是100MB,在我的实际测试中,满打满算loki请求最大5000条日志,大约在50MB左右,所以我做了2倍的处理
因为我用的helmchart,在values.yaml里面的server完整如下:
server:
http_listen_port: 3100
grpc_listen_port: 9095
grpc_server_max_recv_msg_size: 104857600
grpc_server_max_send_msg_size: 104857600
BTW,记得重启loki服务!