【发布时间】:2022-07-03 16:30:04
【问题描述】:
我有一个通用日志包,用于包装 Stackdriver 的日志 - 获取上下文、严重性等并将其转换为 LogEntry 即:
func Log(ctx context.Context, severity Severity, format string, a ...interface{}) {
log.Println(Entry{Severity: severity, Message: fmt.Sprintf(format, a...), Component: "arbitrary-property", Trace: GetTraceId(ctx)})
}
入口结构看起来像这样
type Entry struct {
Message string `json:"message"`
Severity Severity `json:"severity,omitempty"`
Trace string `json:"logging.googleapis.com/trace,omitempty"`
// Logs Explorer allows filtering and display of this as `jsonPayload.component`.
Component string `json:"component,omitempty"`
}
这个包是全球性的,用于 Cloud Run 和 Compute Engine 中的多项服务。
Compute Engine 中的日志使用Google Ops Agent 提取
如果我希望日志严重性与操作代理一起使用,我需要根据文档使用此 json 密钥 logging.googleapis.com/severity:https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/configuration#special-fields
否则,严重性仍然是jsonPayload 的一部分,并且严重性不适用于日志条目。
但这与这里的文档冲突:https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry
这里它说 json 字段应该是简单的 severity 没有前缀 logging.googleapis.com/。
如果我使用这个结构
type Entry struct {
...
Severity Severity `json:"severity,omitempty"`
}
如果我使用这个结构,它不能与 Ops Agent 一起工作
type Entry struct {
...
Severity Severity `json:"logging.googleapis.com/severity,omitempty"`
}
它适用于 Ops Agent,但不适用于 Cloud Run(我只是将 logging.googleapis.com/severity 视为 jsonPayload 的一部分,严重性不适用)。
这是预期的行为吗?有没有不创建两个包的解决方法?
【问题讨论】:
标签: go stackdriver google-cloud-ops-agent