入门编辑

步骤 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编辑

  1. 请按照Filebeat 快速入门进行操作。
  2. 将以下配置添加到您的 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 通常在发生冲突时添加的字段(类型、源、偏移量等)。

Filebeat 在 JSON 反序列化错误的情况下添加一个“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: ~

有关更多信息,请参阅Filebeat 参考