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"}

    例如,如果hostapp字段都与流相关,那么在相应的日志条目的_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查询参数,以便正确的将每个容器的日志存储到不同的流中。

    请勿将易发生变化的字段添加到流中,如ipuser_idtrace_id等。 因为这些可能会导致高基数问题 high cardinality issues

    Link to original