Journald 输入

编辑

此功能处于技术预览阶段,可能会在未来的版本中更改或删除。Elastic 将努力修复任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。

journald 是一个收集和存储日志数据的系统服务。journald 输入读取此日志数据以及与之关联的元数据。为了读取此日志数据,Filebeat 调用 journalctl 从日志中读取,因此 Filebeat 需要执行 journalctl 的权限。

如果 journalctl 进程意外退出,journald 输入将终止并出现错误,Filebeat 需要重新启动才能再次开始从日志中读取。

最简单的配置示例是从默认日志中读取所有日志。

filebeat.inputs:
- type: journald
  id: everything

您可能希望为每个服务设置单独的输入。您可以使用 include_matches 来指定过滤表达式。列出可用于过滤消息的 journald 字段 的好方法是运行 journalctl -o json 以 JSON 格式输出日志和元数据。此示例收集来自 vault.service systemd 单元的日志。

filebeat.inputs:
- type: journald
  id: service-vault
  include_matches.match:
    - _SYSTEMD_UNIT=vault.service

此示例收集消息以 iptables 开头的内核日志。请注意,include_matches 比 Beat 处理器更有效,因为它们在数据传递到 Filebeat 之前应用,因此尽可能优先使用它们。

filebeat.inputs:
- type: journald
  id: iptables
  include_matches.match:
    - _TRANSPORT=kernel
  processors:
    - drop_event:
        when.not.regexp.message: '^iptables'

每个示例都添加了输入的 id,以确保游标以唯一的 ID 持久化到注册表中。ID 在 journald 输入中应该是唯一的。如果您不指定 id,则会通过哈希配置为您创建一个。因此,当您修改配置时,这将导致一个新的 ID 和一个新的游标。

配置选项

编辑

journald 输入支持以下配置选项以及稍后描述的通用选项

输入的唯一标识符。通过提供唯一的 id,您可以在同一日志上操作多个输入。这允许每个输入的游标独立地持久化在注册表文件中。每个 journald 输入都必须具有唯一的 ID。

filebeat.inputs:
- type: journald
  id: consul.service
  include_matches.match:
    - _SYSTEMD_UNIT=consul.service

- type: journald
  id: vault.service
  include_matches.match:
    - _SYSTEMD_UNIT=vault.service

paths

编辑

将要爬取和提取的路径列表。每个路径可以是目录路径(用于从目录中的所有日志收集事件)或文件路径。如果指定目录,Filebeat 会将该目录下的所有日志合并到一个日志中并读取它们。

如果未指定路径,Filebeat 将从默认日志读取。

seek

编辑

从何处开始读取日志的位置。有效设置为:

  • head:从日志开头开始读取。重新启动后,Filebeat 将重新发送日志中的所有日志消息。
  • tail:从日志末尾开始读取。这意味着在写入新消息之前不会发送任何事件。
  • since:使用 since 选项来确定从何处开始读取。

无论 seek 的值如何,如果 Filebeat 具有此输入的状态(游标),则会忽略 seek 值,并使用当前游标。要重置游标,只需更改输入的 id,这将从一个新的状态开始。

since

编辑

从当前时间开始读取的时间偏移量。要使用 sinceseek 选项必须设置为 since

此示例演示了如何在存在持久化游标时从该游标恢复,否则开始读取最近 24 小时的日志。

seek: since
since: -24h

units

编辑

仅迭代此选项中指定的单元的条目。迭代的条目包括来自单元的消息、授权守护进程关于单元的消息以及核心转储。但是,它不匹配 systemd 用户单元。

syslog_identifiers

编辑

仅读取具有选定 syslog 标识符的条目。

transports

编辑

使用指定的传输方式收集消息。例如:syslog。

有效的传输方式

  • audit:来自内核审计子系统的消息
  • driver:内部生成的消息
  • syslog:通过本地 syslog 套接字使用 syslog 协议接收的消息
  • journal:通过本机日志协议接收的消息
  • stdout:来自服务的标准输出或错误输出的消息
  • kernel:来自内核的消息

facilities

编辑

按设施筛选条目,设施必须使用其数字代码指定。

include_matches

编辑

用于匹配字段的过滤器表达式的集合。表达式的格式为 field=value。Filebeat 会提取完全匹配表达式的所有事件。不支持模式匹配。

如果配置了过滤器表达式,则 Filebeat 的 journald 读取器只会迭代设置了此字段的条目。如果过滤器表达式应用于不同的字段,则只会迭代设置了所有字段的条目。如果它们应用于相同的字段,则只会迭代该字段取指定值之一的条目。

match: 用于匹配字段的过滤器表达式列表。

请注意,这些表达式是有限的。您可以构建复杂的筛选,但不支持完整的逻辑表达式。

以下包含匹配配置将提取包含 journald.process.name: systemdsystemd.transport: syslog 的条目。

include_matches:
  match:
    - "journald.process.name=systemd"
    - "systemd.transport=syslog"

以下包含匹配配置将提取包含 systemd.transport: systemdsystemd.transport: kernel 的条目。

include_matches:
  match:
    - "systemd.transport=kernel"
    - "systemd.transport=syslog"

要引用字段,请使用以下方法之一

  • systemd 日志使用的字段名称。例如,CONTAINER_TAG=redis
  • Filebeat 使用的转换后的字段名称。例如,container.image.tag=redis。Filebeat 不会转换日志中的所有字段。对于自定义字段,请使用 systemd 日志中指定的名称。

转换后的字段名称

编辑

您可以使用以下转换后的名称在过滤器表达式中引用 journald 字段

Journald 字段名称

转换后的名称

COREDUMP_UNIT

journald.coredump.unit

COREDUMP_USER_UNIT

journald.coredump.user_unit

OBJECT_AUDIT_LOGINUID

journald.object.audit.login_uid

OBJECT_AUDIT_SESSION

journald.object.audit.session

OBJECT_CMDLINE

journald.object.cmd

OBJECT_COMM

journald.object.name

OBJECT_EXE

journald.object.executable

OBJECT_GID

journald.object.gid

OBJECT_PID

journald.object.pid

OBJECT_SYSTEMD_OWNER_UID

journald.object.systemd.owner_uid

OBJECT_SYSTEMD_SESSION

journald.object.systemd.session

OBJECT_SYSTEMD_UNIT

journald.object.systemd.unit

OBJECT_SYSTEMD_USER_UNIT

journald.object.systemd.user_unit

OBJECT_UID

journald.object.uid

_AUDIT_LOGINUID

process.audit.login_uid

_AUDIT_SESSION

process.audit.session

_BOOT_ID

host.boot_id

_CAP_EFFECTIVE

process.capabilites

_CMDLINE

process.cmd

_CODE_FILE

journald.code.file

_CODE_FUNC

journald.code.func

_CODE_LINE

journald.code.line

_COMM

process.name

_EXE

process.executable

_GID

process.uid

_HOSTNAME

host.name

_KERNEL_DEVICE

journald.kernel.device

_KERNEL_SUBSYSTEM

journald.kernel.subsystem

_MACHINE_ID

host.id

_MESSAGE

message

_PID

process.pid

_PRIORITY

syslog.priority

_SYSLOG_FACILITY

syslog.facility

_SYSLOG_IDENTIFIER

syslog.identifier

_SYSLOG_PID

syslog.pid

_SYSTEMD_CGROUP

systemd.cgroup

_SYSTEMD_INVOCATION_ID

systemd.invocation_id

_SYSTEMD_OWNER_UID

systemd.owner_uid

_SYSTEMD_SESSION

systemd.session

_SYSTEMD_SLICE

systemd.slice

_SYSTEMD_UNIT

systemd.unit

_SYSTEMD_USER_SLICE

systemd.user_slice

_SYSTEMD_USER_UNIT

systemd.user_unit

_TRANSPORT

systemd.transport

_UDEV_DEVLINK

journald.kernel.device_symlinks

_UDEV_DEVNODE

journald.kernel.device_node_path

_UDEV_SYSNAME

journald.kernel.device_name

_UID

process.uid

以下 Docker 的转换后的字段也可用

CONTAINER_ID

container.id_truncated

CONTAINER_ID_FULL

container.id

CONTAINER_NAME

container.name

CONTAINER_PARTIAL_MESSAGE

container.partial

CONTAINER_TAG

container.log.tag

IMAGE_NAME

container.image.name

通用选项

编辑

所有输入都支持以下配置选项。

enabled
编辑

使用 enabled 选项启用和禁用输入。默认情况下,enabled 设置为 true。

tags
编辑

Filebeat 在每个已发布事件的 tags 字段中包含的标签列表。标签使您可以轻松地在 Kibana 中选择特定事件或在 Logstash 中应用条件筛选。这些标签将附加到常规配置中指定的标签列表。

示例

filebeat.inputs:
- type: journald
  . . .
  tags: ["json"]
fields
编辑

可选字段,您可以指定这些字段以向输出添加额外的信息。例如,您可以添加可用于过滤日志数据的字段。字段可以是标量值、数组、字典或这些的任何嵌套组合。默认情况下,您在此处指定的字段将分组在输出文档的 fields 子字典下。要将自定义字段存储为顶层字段,请将 fields_under_root 选项设置为 true。如果在常规配置中声明了重复字段,则其值将被此处声明的值覆盖。

filebeat.inputs:
- type: journald
  . . .
  fields:
    app_id: query_engine_12
fields_under_root
编辑

如果此选项设置为 true,则自定义 字段 将作为输出文档中的顶层字段存储,而不是分组在 fields 子字典下。如果自定义字段名称与 Filebeat 添加的其他字段名称冲突,则自定义字段将覆盖其他字段。

processors
编辑

要应用于输入数据的处理器列表。

有关在配置中指定处理器的信息,请参阅处理器

pipeline
编辑

为此输入生成的事件设置的摄取管道 ID。

管道 ID 也可以在 Elasticsearch 输出中配置,但此选项通常会产生更简单的配置文件。如果管道在输入和输出中都配置了,则使用输入中的选项。

keep_null
编辑

如果此选项设置为 true,则具有 null 值的字段将发布在输出文档中。默认情况下,keep_null 设置为 false

index
编辑

如果存在,此格式化字符串将覆盖来自此输入的事件的索引(对于 elasticsearch 输出),或设置事件元数据的 raw_index 字段(对于其他输出)。此字符串只能引用代理名称和版本以及事件时间戳;要访问动态字段,请使用 output.elasticsearch.index 或处理器。

示例值:"%{[agent.name]}-myindex-%{+yyyy.MM.dd}" 可能会展开为 "filebeat-myindex-2019.11.01"

publisher_pipeline.disable_host
编辑

默认情况下,所有事件都包含 host.name。可以将此选项设置为 true 以禁用将此字段添加到所有事件。默认值为 false