开始使用
编辑开始使用
编辑步骤 1:设置应用程序日志记录
编辑添加依赖
编辑将此行添加到您的应用程序的 Gemfile 中
gem 'ecs-logging'
执行以下命令:
bundle install
或者,您可以使用以下命令自行安装软件包:
gem install ecs-logging
配置
编辑Ecs::Logger
是 Ruby 本身的 Logger
的子类,并响应相同的方法。
例如:
require 'ecs_logging/logger' logger = EcsLogging::Logger.new($stdout) logger.info('my informative message') logger.warn { 'be aware that…' } logger.error('a_progname') { 'oh no!' }
将以下 JSON 记录到 $stdout
{"@timestamp":"2020-11-24T13:32:21.329Z","log.level":"INFO","message":"very informative","ecs.version":"1.4.0"} {"@timestamp":"2020-11-24T13:32:21.330Z","log.level":"WARN","message":"be aware that…","ecs.version":"1.4.0"} {"@timestamp":"2020-11-24T13:32:21.331Z","log.level":"ERROR","message":"oh no!","ecs.version":"1.4.0","process.title":"a_progname"}
此外,它还允许向消息添加额外的键。
例如:
logger.info('ok', labels: { my_label: 'value' }, 'trace.id': 'abc-xyz')
记录以下内容:
{ "@timestamp":"2020-11-24T13:32:21.331Z", "log.level":"INFO", "message":"oh no!", "ecs.version":"1.4.0", "labels":{"my_label":"value"}, "trace.id":"abc-xyz" }
要包含有关日志调用位置的信息,请使用 include_origin: true
调用方法,例如 logger.warn('Hello!', include_origin: true)
。 这将记录:
{ "@timestamp":"2020-11-24T13:32:21.331Z", "log.level":"WARN", "message":"Hello!", "ecs.version":"1.4.0", "log.origin": { "file.line": 123, "file.name": "my_file.rb", "function": "call" } }
Rack 配置
编辑use EcsLogging::Middleware, $stdout
示例输出
{ "@timestamp":"2020-12-07T13:44:04.568Z", "log.level":"INFO", "message":"GET /", "ecs.version":"1.4.0", "client":{ "address":"127.0.0.1" }, "http":{ "request":{ "method":"GET", "body.bytes":"0" } }, "url":{ "domain":"example.org", "path":"/", "port":"80", "scheme":"http" } }
步骤 2:启用 APM 日志关联(可选)
编辑如果您正在使用 Elastic APM Ruby 代理,请启用日志关联。
步骤 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 参考。