跳至主要内容

日志

状态:早期草稿/提案

LogLines

版本:0.0

属性和字段要求

  • 时间字段 - 必填
    • 第一个名为 timestamp 的时间字段即为时间字段。
    • 它必须是非空值
  • 主体字段 - 必填
    • 第一个名为 body 的字符串字段即为主体字段。
    • 它必须是非空值
  • 严重性字段 - 可选
    • 第一个名为 severity 的字符串字段即为严重性字段。
    • 表示日志行的严重性/级别
    • 如果未找到严重性字段,则消费者/客户端将决定日志级别。例如:日志面板将尝试解析消息字段并确定日志级别
    • 日志级别可以是文档中指定的其中一个值 此处
  • ID 字段 - 可选
    • 第一个名为 id 的字符串字段即为 ID 字段。
    • 日志行的唯一标识符
  • 标签字段 - 可选
    • 第一个名为 labels 的字段即为标签字段。
    • 此字段表示有关日志行的其他信息。
    • 字段类型必须为 json 原始消息类型。示例值:{}{"hello":"world", "foo": 123.45, "bar" :["yellow","red"], "baz" : { "name": "alice" }}
      • 在 javascript 中,值应以 Record<string,any> 类型表示。

日志可视化会忽略任何其他字段。

示例

以下是 Go 中日志帧的示例

data.NewFrame(
"logs",
data.NewField("timestamp", nil, []time.Time{time.UnixMilli(1645030244810), time.UnixMilli(1645030247027), time.UnixMilli(1645030247027)}),
data.NewField("body", nil, []string{"message one", "message two", "message three"}),
data.NewField("severity", nil, []string{"critical", "error", "warning"}),
data.NewField("id", nil, []string{"xxx-001", "xyz-002", "111-003"}),
data.NewField("labels", nil, []json.RawMessage{[]byte(`{}`), []byte(`{"hello":"world"}`), []byte(`{"hello":"world", "foo": 123.45, "bar" :["yellow","red"], "baz" : { "name": "alice" }}`)}),
)

也可以表示为

名称:timestamp
类型:[]time.Time
名称:body
类型:[]string
名称:severity
类型:[]*string
名称:id
类型:[]*string
名称:labels
类型:[]json.RawMessage
2022-02-16 16:50:44.810 +0000 GMT消息一严重xxx-001{}
2022-02-16 16:50:47.027 +0000 GMT消息二错误xyz-002{"hello":"world"}
2022-02-16 16:50:47.027 +0000 GMT消息三警告111-003{"hello":"world", "foo": 123.45, "bar"["yellow","red"], "baz" : { "name": "alice" }}

元数据要求

  • 帧类型必须设置为 FrameTypeLogLines/log-lines
  • 帧元数据可以选择性地指定 preferredVisualisationType:logs 作为元数据。如果没有此属性,则探索页面将在日志视图中将日志数据呈现为表格而不是日志

无效情况

  • 没有时间字段的帧
  • 没有字符串字段的帧
  • 字段名称为“tsNs”且“tsNs”字段类型不是数字的帧。