日志
状态:早期草案/提案
日志行
版本: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>
类型表示。
- 在 Javascript 中,值应使用
- 第一个名称为
任何其他字段都会被日志可视化忽略。
示例
下面是一个 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
作为元数据。如果没有此属性,Explore 页面将以表格形式而不是日志视图中渲染日志数据
无效情况
- 没有时间字段的帧
- 没有字符串字段的帧
- 字段名称为 "tsNs" 但 "tsNs" 字段类型不是数字的帧。