VictoriaLogs 配置优化
- stream流字段配置
流字段 _stream
一些结构化日志字段可以唯一标识生成日志的应用示例。 这可能是单个字段,如
instance="host123:456",也可能是多个字段, 如:{kubernetes.namespace="cloud-new", kubernetes.node.name="worker01" ,kubernetes.pod.name="business-dev-xxxxx-xxxxx", kubernetes.container.name="business-dev"}来自单个应用示例的日志条目形成 VictoriaLogs 中的日志流
log stream。 VictoriaLogs 优化了单个日志流的存储和查询。好处如下:- 减少磁盘使用
- 查询性能提升
每个收集的日志条目都与一个日志流相关联。每个日志流包含以下两个特殊字段:
_stream_id日志流的唯一标识符 可以通过_stream_id:...过滤器选择该流中的所有日志。_stream该字段包含格式类似于 普罗米修斯指标标签 的流标签 格式如:{host="host-123", app="my-app"}
例如,如果
host和app字段都与流相关,那么在相应的日志条目的_stream字段中也将具有{host="host-123", app="my-app"}值。 可以使用流过滤器搜索_stream字段VictoriaLogs 无法自动确定哪些字段可以唯一标识每条日志流 所以默认情况下,
_stream字段的值为{}。 这可能导致资源使用和查询性能不佳。 因此,在数据收集时,建议通过_stream_fields查询参数指定流级字段。 如k8s容器中的日志,推荐具有如下字段:{ "kubernetes.namespace": "some-namespace", "kubernetes.node.name": "some-node", "kubernetes.pod.name": "some-pod", "kubernetes.container.name": "some-container", "_msg": "some log message" }相应的,需要在数据收集时指定
_stream_fields=kubernetes.namespace,kubernetes.node.name,kubernetes.pod.name,kubernetes.container.name查询参数,以便正确的将每个容器的日志存储到不同的流中。请勿将易发生变化的字段添加到流中,如
Link to originalip,user_id,trace_id等。 因为这些可能会导致高基数问题 high cardinality issues