Exec 输入插件

编辑
  • 插件版本:v3.6.0
  • 发布日期:2022-06-15
  • 更新日志

有关其他版本,请参阅版本化插件文档

获取帮助

编辑

有关插件的问题,请在Discuss论坛中打开一个主题。对于错误或功能请求,请在Github中打开一个问题。有关 Elastic 支持的插件列表,请查阅Elastic 支持矩阵

描述

编辑

定期运行 shell 命令并将整个输出捕获为一个事件。

  • 此事件的 command 字段将是运行的命令。
  • 此事件的 message 字段将是该命令的整个标准输出。

exec 输入最终使用 fork 来生成子进程。使用 fork 会复制父进程的地址空间(在我们的例子中,logstash 和 JVM);这可以通过操作系统写时复制来缓解,但最终您可能会为“简单”的可执行文件分配大量内存。如果 exec 输入出现类似 ENOMEM: 无法分配内存 的错误,则表明没有足够的非 JVM 堆物理内存来执行 fork 操作。

示例

input {
  exec {
    command => "echo 'hi!'"
    interval => 30
  }
}

这将每 30 秒执行一次 echo 命令。

与 Elastic Common Schema (ECS) 的兼容性

编辑

此插件添加有关事件来源的元数据,并且可以配置为以与 ECS 兼容的方式使用ecs_compatibility进行此操作。此元数据在事件由适当的编解码器解码后添加,并且不会覆盖现有值。

ECS 已禁用 ECS v1 , v8 描述

主机

[host][name]

处理事件的 Logstash 主机的名称

命令

[process][command_line]

插件运行的命令

[@metadata][exit_status]

[process][exit_code]

进程的退出代码

 — 

[@metadata][input][exec][process][elapsed_time]

命令运行所花费的时间(以纳秒为单位)

[@metadata][duration]

 — 

命令持续时间(以秒为单位的浮点数)(已弃用)

Exec 输入配置选项

编辑

此插件支持以下配置选项以及稍后描述的通用选项

设置 输入类型 必需

命令

字符串

ecs_compatibility

字符串

interval

数字

schedule

字符串

另请参阅通用选项,了解所有输入插件支持的选项列表。

 

command

编辑
  • 这是一个必填设置。
  • 值类型是字符串
  • 此设置没有默认值。

要运行的命令。例如,uptime

ecs_compatibility

编辑
  • 值类型是字符串
  • 支持的值为

    • disabled:使用向后兼容的字段名称,例如 [host]
    • v1v8:使用与 ECS 兼容的字段,例如 [host][name]

控制此插件与Elastic Common Schema (ECS)的兼容性。有关详细信息,请参阅与 Elastic Common Schema (ECS) 的兼容性

示例输出:已启用 ECS

{
    "message" => "hi!\n",
    "process" => {
        "command_line" => "echo 'hi!'",
        "exit_code" => 0
    },
    "host" => {
        "name" => "deus-ex-machina"
    },

    "@metadata" => {
        "input" => {
            "exec" => {
                "process" => {
                    "elapsed_time"=>3042
                }
            }
        }
    }
}

示例输出:已禁用 ECS

{
    "message" => "hi!\n",
    "command" => "echo 'hi!'",
    "host" => "deus-ex-machina",

    "@metadata" => {
        "exit_status" => 0,
        "duration" => 0.004388
    }
}

interval

编辑
  • 值类型是数字
  • 此设置没有默认值。

运行命令的间隔。值以秒为单位。

必须定义 intervalschedule 选项之一。

schedule

编辑
  • 值类型是字符串
  • 此设置没有默认值。

定期运行命令的时间表。

此调度语法由 rufus-scheduler 提供支持。该语法类似于 cron,并具有 Rufus 特有的一些扩展(例如时区支持)。

示例

* 5 * 1-3 *

将在 1 月到 3 月每天早上 5 点的每分钟执行一次。

0 * * * *

将在每天每小时的第 0 分钟执行。

0 6 * * * America/Chicago

将在每天早上 6:00(UTC/GMT -5)执行。

有关描述此语法的更多文档,请参见此处

必须定义 intervalschedule 选项之一。

通用选项

编辑

所有输入插件都支持这些配置选项

设置 输入类型 必需

add_field

哈希

codec

codec

enable_metric

布尔值

id

字符串

tags

数组

type

字符串

add_field

编辑
  • 值类型是哈希
  • 默认值是 {}

向事件添加字段

codec

编辑

用于输入数据的编解码器。输入编解码器是一种在数据进入输入之前解码数据的便捷方法,而无需在 Logstash 管道中单独的过滤器。

enable_metric

编辑

默认情况下,禁用或启用此特定插件实例的指标日志记录,我们记录所有可以记录的指标,但您可以禁用特定插件的指标收集。

  • 值类型是字符串
  • 此设置没有默认值。

向插件配置添加唯一的 ID。如果未指定 ID,Logstash 将生成一个。强烈建议您在配置中设置此 ID。当您有两个或多个相同类型的插件时(例如,如果您有 2 个 exec 输入),此功能特别有用。在这种情况下添加命名 ID 将有助于在使用监视 API 时监视 Logstash。

input {
  exec {
    id => "my_plugin_id"
  }
}

id 字段中的变量替换仅支持环境变量,不支持使用来自密钥存储的值。

tags

编辑
  • 值类型是数组
  • 此设置没有默认值。

向您的事件添加任意数量的标签。

这有助于稍后的处理。

type

编辑
  • 值类型是字符串
  • 此设置没有默认值。

向此输入处理的所有事件添加一个 type 字段。

类型主要用于过滤器激活。

类型存储为事件本身的一部分,因此您也可以使用类型在 Kibana 中搜索它。

如果您尝试在已具有类型的事件上设置类型(例如,当您将事件从发送者发送到索引器时),则新的输入将不会覆盖现有类型。发送者设置的类型在该事件的生命周期中始终存在,即使发送到另一台 Logstash 服务器也是如此。