您的位置:首页 > 文旅 > 旅游 > Elasticsearch:Golang ECS 日志记录 - zap

Elasticsearch:Golang ECS 日志记录 - zap

2025/2/26 8:39:51 来源:https://blog.csdn.net/UbuntuTouch/article/details/140632257  浏览:    关键词:Elasticsearch:Golang ECS 日志记录 - zap

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。

编码器以 JSON 格式记录日志,并在可能的情况下依赖默认的 zapcore/json_encoder。它还处理 ECS 错误格式的错误字段记录。

默认情况下,会添加以下字段:

{"log.level": "info","@timestamp": "2020-09-13T10:48:03.000Z","message":" some logging info","ecs.version": "1.6.0"
}

安装

将包添加到你的 go.mod 文件中:

go.mod

module zerolog-logging
require go.elastic.co/ecszap master
require go.uber.org/zap master

我们使用如下的命令来下载包:

go get go.elastic.co/ecszap
go get go.uber.org/zap

配置

设置默认记录器。例如:

encoderConfig := ecszap.NewDefaultEncoderConfig()
core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
logger := zap.New(core, zap.AddCaller())

你可以自定义 ECS 记录器。例如:

encoderConfig := ecszap.EncoderConfig{EncodeName: customNameEncoder,EncodeLevel: zapcore.CapitalLevelEncoder,EncodeDuration: zapcore.MillisDurationEncoder,EncodeCaller: ecszap.FullCallerEncoder,
}
core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
logger := zap.New(core, zap.AddCaller())

示例

使用结构化日志记录

zap1.go

package mainimport ("errors""os""go.elastic.co/ecszap""go.uber.org/zap"
)func main() {encoderConfig := ecszap.NewDefaultEncoderConfig()core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)logger := zap.New(core, zap.AddCaller())logger = logger.With(zap.String("custom", "foo"))logger = logger.Named("mylogger")// Use strongly typed Field valueslogger.Info("some logging info",zap.Int("count", 17),zap.Error(errors.New("boom")))
}

我们可以使用如下的方法来运行上面的应用:

go run zap1.go | jq .

Log errors

zap_error.go

package mainimport ("errors""os"pkgerrors "github.com/pkg/errors""go.elastic.co/ecszap""go.uber.org/zap"
)func main() {encoderConfig := ecszap.NewDefaultEncoderConfig()core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)logger := zap.New(core, zap.AddCaller())err := errors.New("boom")logger.Error("some error", zap.Error(pkgerrors.Wrap(err, "crash")))
}

我们使用如下的命令来运行应用:

go run zap_error.go | jq .

使用 sugar logger

zap_sugar.go

package mainimport ("os""go.elastic.co/ecszap""go.uber.org/zap"
)func main() {encoderConfig := ecszap.NewDefaultEncoderConfig()core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)logger := zap.New(core, zap.AddCaller())sugar := logger.Sugar()sugar.Infow("some logging info","foo", "bar","count", 17,)
}

我们使用如下的命令来运行:

go run zap_sugar.go | jq .

 把日志写入到 Elasticsearch

  1. 按照 Filebeat 快速入门
  2. 将以下配置添加到你的 filebeat.yaml 文件中。

 Filebeat 7.16+

filebeat.yaml

filebeat.inputs:
- type: filestream  # 1paths: /path/to/logs.jsonparsers:- ndjson:overwrite_keys: true # 2add_error_key: true  # 3expand_keys: true    # 4processors: # 5- add_host_metadata: ~- add_cloud_metadata: ~- add_docker_metadata: ~- add_kubernetes_metadata: ~
  1. 使用 filestream 输入从活动日志文件中读取行。
  2. 如果发生冲突,解码的 JSON 对象的值将覆盖 Filebeat 通常添加的字段(type、source、offset 等)。
  3. 如果发生 JSON 解组错误,Filebeat 将添加 “error.message” 和 “error.type: json” 键。
  4. Filebeat 将递归地从解码的 JSON 中去掉点键,并将其扩展为分层对象结构。
  5. Processors 可增强你的数据。请参阅 processors 以了解更多信息。

Filebeat < 7.16

filebeat.yaml

filebeat.inputs:
- type: logpaths: /path/to/logs.jsonjson.keys_under_root: truejson.overwrite_keys: truejson.add_error_key: truejson.expand_keys: trueprocessors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com