开始使用
编辑开始使用
编辑步骤 1:安装
编辑将软件包添加到您的 go.mod
文件中
require go.elastic.co/ecszap master
步骤 2:配置
编辑设置默认的日志记录器。例如
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())
示例
编辑使用结构化日志
编辑// Add fields and a logger name logger = logger.With(zap.String("custom", "foo")) logger = logger.Named("mylogger") // Use strongly typed Field values logger.Info("some logging info", zap.Int("count", 17), zap.Error(errors.New("boom")))
上面的示例生成以下日志输出
{ "log.level": "info", "@timestamp": "2020-09-13T10:48:03.000Z", "log.logger": "mylogger", "log.origin": { "file.name": "main/main.go", "file.line": 265 }, "message": "some logging info", "ecs.version": "1.6.0", "custom": "foo", "count": 17, "error": { "message":"boom" } }
记录错误
编辑err := errors.New("boom") logger.Error("some error", zap.Error(pkgerrors.Wrap(err, "crash")))
上面的示例生成以下日志输出
{ "log.level": "error", "@timestamp": "2020-09-13T10:48:03.000Z", "log.logger": "mylogger", "log.origin": { "file.name": "main/main.go", "file.line": 290 }, "message": "some error", "ecs.version": "1.6.0", "custom": "foo", "error": { "message": "crash: boom", "stack_trace": "\nexample.example\n\t/Users/xyz/example/example.go:50\nruntime.example\n\t/Users/xyz/.gvm/versions/go1.13.8.darwin.amd64/src/runtime/proc.go:203\nruntime.goexit\n\t/Users/xyz/.gvm/versions/go1.13.8.darwin.amd64/src/runtime/asm_amd64.s:1357" } }
使用 sugar 日志记录器
编辑sugar := logger.Sugar() sugar.Infow("some logging info", "foo", "bar", "count", 17, )
上面的示例生成以下日志输出
{ "log.level": "info", "@timestamp": "2020-09-13T10:48:03.000Z", "log.logger": "mylogger", "log.origin": { "file.name": "main/main.go", "file.line": 311 }, "message": "some logging info", "ecs.version": "1.6.0", "custom": "foo", "foo": "bar", "count": 17 }
包装自定义的底层 zapcore.Core
编辑encoderConfig := ecszap.NewDefaultEncoderConfig() encoder := zapcore.NewJSONEncoder(encoderConfig.ToZapCoreEncoderConfig()) syslogCore := newSyslogCore(encoder, level) //create your own loggers core := ecszap.WrapCore(syslogCore) logger := zap.New(core, zap.AddCaller())
从现有配置转换
编辑根据您的需求,有不同的方式来创建日志记录器
encoderConfig := ecszap.ECSCompatibleEncoderConfig(zap.NewDevelopmentEncoderConfig()) encoder := zapcore.NewJSONEncoder(encoderConfig) core := zapcore.NewCore(encoder, os.Stdout, zap.DebugLevel) logger := zap.New(ecszap.WrapCore(core), zap.AddCaller())
config := zap.NewProductionConfig() config.EncoderConfig = ecszap.ECSCompatibleEncoderConfig(config.EncoderConfig) logger, err := config.Build(ecszap.WrapCoreOption(), zap.AddCaller())
步骤 3:配置 Filebeat
编辑- 请按照 Filebeat 快速入门 进行操作
- 将以下配置添加到您的
filebeat.yaml
文件中。
对于 Filebeat 7.16+
filebeat.yaml。
filebeat.inputs: - type: filestream paths: /path/to/logs.json parsers: - ndjson: overwrite_keys: true add_error_key: true expand_keys: true processors: - add_host_metadata: ~ - add_cloud_metadata: ~ - add_docker_metadata: ~ - add_kubernetes_metadata: ~
使用 filestream 输入从活动的日志文件中读取行。 |
|
如果发生冲突,则解码的 JSON 对象中的值会覆盖 Filebeat 通常添加的字段(类型、源、偏移量等)。 |
|
如果发生 JSON 反序列化错误,Filebeat 会添加一个 "error.message" 和 "error.type: json" 键。 |
|
Filebeat 将递归地取消点分隔符解码的 JSON 中的键,并将它们扩展为分层对象结构。 |
|
处理器可以增强您的数据。请参阅 处理器 以了解更多信息。 |
对于 Filebeat < 7.16
filebeat.yaml。
filebeat.inputs: - type: log paths: /path/to/logs.json json.keys_under_root: true json.overwrite_keys: true json.add_error_key: true json.expand_keys: true processors: - add_host_metadata: ~ - add_cloud_metadata: ~ - add_docker_metadata: ~ - add_kubernetes_metadata: ~
- 请确保您的应用程序将日志记录到 stdout/stderr。
- 请按照 在 Kubernetes 上运行 Filebeat 指南进行操作。
- 启用 基于提示的自动发现(取消注释
filebeat-kubernetes.yaml
中的相应部分)。 - 将这些注释添加到使用 ECS 日志记录器的 Pod 中。这将确保正确解析日志。
- 请确保您的应用程序将日志记录到 stdout/stderr。
- 请按照 在 Docker 上运行 Filebeat 指南进行操作。
- 启用 基于提示的自动发现。
- 将这些标签添加到使用 ECS 日志记录器的容器中。这将确保正确解析日志。
docker-compose.yml。
有关更多信息,请参阅 Filebeat 参考。