HTTP JSON 输入编辑

使用 httpjson 输入从具有 JSON 有效负载的 HTTP API 读取消息。

如果您要开始开发新的自定义 HTTP API 输入,建议您使用 通用表达式语言输入,它提供了更大的灵活性和改进的开发者体验。

此输入支持

  • 身份验证

    • 基本
    • OAuth2
  • 以可配置的间隔检索
  • 分页
  • 重试
  • 速率限制
  • 代理
  • 请求转换
  • 响应转换

示例配置

filebeat.inputs:
# Fetch your public IP every minute.
- type: httpjson
  interval: 1m
  request.url: https://api.ipify.org/?format=json
  processors:
    - decode_json_fields:
        fields: ["message"]
        target: "json"
filebeat.inputs:
- type: httpjson
  request.url: https://127.0.0.1:9200/_search?scroll=5m
  request.method: POST
  response.split:
    target: body.hits.hits
  response.pagination:
    - set:
        target: url.value
        value: https://127.0.0.1:9200/_search/scroll
    - set:
        target: url.params.scroll_id
        value: '[[.last_response.body._scroll_id]]'
    - set:
        target: body.scroll
        value: 5m

此外,它还支持通过基本身份验证、HTTP 标头或 oauth2 进行身份验证。

使用身份验证的示例配置

filebeat.inputs:
- type: httpjson
  request.url: https://127.0.0.1
  request.transforms:
    - set:
        target: header.Authorization
        value: 'Basic aGVsbG86d29ybGQ='
filebeat.inputs:
- type: httpjson
  auth.oauth2:
    client.id: 12345678901234567890abcdef
    client.secret: abcdef12345678901234567890
    token_url: https://127.0.0.1/oauth2/token
  request.url: https://127.0.0.1
filebeat.inputs:
- type: httpjson
  auth.oauth2:
    client.id: 12345678901234567890abcdef
    client.secret: abcdef12345678901234567890
    token_url: https://127.0.0.1/oauth2/token
    user: [email protected]
    password: P@$$W0₹D
  request.url: https://127.0.0.1

输入状态编辑

httpjson 输入在请求之间保持运行时状态。此状态可以通过某些配置选项和转换进行访问。

该状态具有以下元素

  • last_response.url.value:来自上次请求的完整 URL,包含参数和片段,并具有成功的响应。
  • last_response.url.paramslast_response.url.value 中 URL 参数的 url.Values。可以使用 Get 函数进行查询。
  • last_response.header:包含来自上次成功响应的标头的映射。
  • last_response.body:包含来自上次成功响应的已解析 JSON 正文的映射。这是来自远程服务器的响应。
  • last_response.page:指示最后一个响应的页码的数字。它在每个间隔处以值 0 开始。
  • first_event:表示发送到输出的第一个事件的映射(对 last_response.body 应用转换的结果)。
  • last_event:表示请求链中当前请求的最后一个事件的映射(对 last_response.body 应用转换的结果)。
  • url:最后一个请求的 URL,作为原始的 url.URL Go 类型。
  • header:包含标头的映射。在 request.rate_limit.early_limitresponse.pagination 配置部分中使用时引用下一个请求标头,在 response.transformsresponse.splitrequest.rate_limit.limit 配置部分中使用时引用最后一个响应标头。
  • body:包含正文的映射。在 request.rate_limit.early_limitresponse.pagination 配置部分中使用时引用下一个请求正文,在 response.transformsresponse.split 配置部分中使用时引用最后一个响应正文。
  • cursor:包含用户配置为在重新启动之间存储的任何数据的映射(请参阅 cursor)。

所有提到的对象仅在定期请求执行期间在运行时存储,cursor 除外,它包含在定期请求和重新启动之间持久化的值。

转换编辑

转换是一种允许用户修改 输入状态 的操作。根据定义转换的位置,它将具有读取或写入 状态 不同元素的权限。

访问限制在相应的配置部分中描述。

append编辑

将值追加到数组。如果该字段不存在,则第一个条目将创建一个新数组。如果该字段存在,则将该值追加到现有字段并转换为列表。

- append:
    target: body.foo.bar
    value: '[[.cursor.baz]]'
    default: "a default value"
  • target 定义存储该值的目的地字段。
  • value 定义要存储的值,它是一个 值模板
  • default 定义在 value 为空或模板解析失败时使用的默认值。默认模板无法访问任何状态,只能访问函数。
  • value_type 定义结果值的类型。可能的值为:stringjsonint。默认值为 string
  • fail_on_template_error 如果设置为 true,则在模板评估失败时将返回错误并中止请求。默认值为 false

delete编辑

删除目标字段。

- delete:
    target: body.foo.bar
  • target 定义要删除的目的地字段。如果 target 是一个列表而不是单个元素,则将删除整个列表。

set编辑

设置一个值。

- set:
    target: body.foo.bar
    value: '[[.cursor.baz]]'
    default: "a default value"
  • target 定义存储该值的目的地字段。
  • value 定义要存储的值,它是一个 值模板
  • default 定义在 value 为空或模板解析失败时使用的默认值。默认模板无法访问任何状态,只能访问函数。
  • value_type 定义如何处理结果值。可能的值为:stringjsonint。默认值为 string
  • fail_on_template_error 如果设置为 true,则在模板评估失败时将返回错误并中止请求。默认值为 false

值模板编辑

某些配置选项和转换可以使用值模板。值模板是 Go 模板,可以访问输入状态和一些内置函数。请注意,分隔符已从默认的 {{ }} 更改为 [[ ]],以提高与其他模板机制的互操作性。

要查看哪些 状态元素 和操作可用,请参阅您要使用值模板的选项或 转换 的文档。

值模板如下所示

- set:
    target: body.foo.bar
    value: '[[.cursor.baz]] more data'
    default: "a default value"

将评估括号 [[ ]] 内的内容。有关 Go 模板的更多信息,请参阅 Go 文档

提供了一些内置帮助器函数,用于在值模板中使用输入状态

  • add:添加一个整数列表并返回它们的总和。
  • base64DecodeNoPad:解码不带填充的 base64 字符串。任何二进制输出都将转换为 UTF8 字符串。
  • base64Decode:解码 base64 字符串。任何二进制输出都将转换为 UTF8 字符串。
  • base64EncodeNoPad:连接所有提供的字符串并对其进行 base64 编码,不带填充。示例 [[base64EncodeNoPad "string1" "string2"]]
  • base64Encode:连接所有提供的字符串并对其进行 base64 编码。示例 [[base64Encode "string1" "string2"]]
  • beatInfo:返回一个包含有关 Beat 信息的映射。映射中可用的键为 goos(运行的操作系统)、goarch(运行的系统体系结构)、commit(当前版本的 git 提交)、buildtime(当前版本的编译时间)、version(当前版本的版本)。示例:[[ beatInfo.version ]] 返回 {version}
  • div:执行两个整数值的整数除法。
  • formatDate:格式化 time.Time。默认情况下,格式布局为 RFC3339,但可以选择接受任何 Golang 预定义的布局或自定义布局。格式化时它将默认为 UTC 时区,但您可以指定不同的时区。如果时区不正确,它将默认为 UTC。示例:[[ formatDate (now) "UnixDate" ]][[ formatDate (now) "UnixDate" "America/New_York" ]]
  • getRFC5988Link:从 RFC5988 链接列表中提取特定关系。这在解析用于分页的标头值时很有用。示例:[[ getRFC5988Link "next" .last_response.header.Link ]]
  • hashBase64:计算连接在一起的字符串列表的哈希值。返回 base64 编码的哈希值。支持 sha1 或 sha256。示例 [[hash "sha256" "string1" "string2" (formatDate (now) "RFC1123")]]
  • hash:计算连接在一起的字符串列表的哈希值。返回十六进制编码的哈希值。支持 sha1 或 sha256。示例 [[hash "sha256" "string1" "string2" (formatDate (now) "RFC1123")]]
  • hexDecode:解码十六进制字符串。任何十六进制字符串都将转换为其字节表示形式。示例 [[hexDecode "b0a92a08a9b4883aa3aa2d0957be12a678cbdbb32dc5db09fe68239a09872f96"]];预期输出:"\xb0\xa9*\b\xa9\xb4\x88:\xa3\xaa-\tW\xbe\x12\xa6x\xcb۳-\xc5\xdb\t\xfeh#\x9a\t\x87/\x96"
  • hmacBase64:计算连接在一起的字符串列表的 hmac 签名。返回 base64 编码的签名。支持 sha1 或 sha256。示例 [[hmac "sha256" "secret" "string1" "string2" (formatDate (now) "RFC1123")]]
  • hmac:计算连接在一起的字符串列表的 hmac 签名。返回十六进制编码的签名。支持 sha1 或 sha256。示例:[[hmac "sha256" "secret" "string1" "string2" (formatDate (now) "RFC1123")]]
  • join:使用指定的分隔符连接列表。示例:[[join .body.arr ","]]
  • max:返回两个值中的最大值。
  • min:返回两个值中的最小值。
  • mul:将两个整数相乘。
  • now:以 UTC 时间返回当前的 time.Time 对象。可以选择接收一个 time.Duration 作为参数。示例:[[now (parseDuration "-1h")]] 返回 1 小时前的当前时间。
  • parseDate:解析日期字符串并以 UTC 时间返回一个 time.Time。默认情况下,预期的布局是 RFC3339,但可以选择接受任何 Golang 预定义的布局或自定义布局。注意:解析时区缩写可能会导致歧义。对于显式时区处理,建议使用 parseDateInTZ。示例:[[ parseDate "2020-11-05T12:25:32Z" ]][[ parseDate "2020-11-05T12:25:32.1234567Z" "RFC3339Nano" ]][[ (parseDate "Thu Nov 5 12:25:32 +0000 2020" "Mon Jan _2 15:04:05 -0700 2006").UTC ]]
  • parseDateInTZ:在指定的时区 (TZ) 内解析日期字符串,以 UTC 时间返回一个 time.Time。指定的时区将覆盖输入日期中的隐式时区。接受时区偏移量(“-07:00”、“-0700”、“-07”)或 IANA 时区名称(“America/New_York”)。如果 TZ 无效,则默认为 UTC。可选的布局参数与 parseDate 中的一样。示例:[[ parseDateInTZ "2020-11-05T12:25:32" "America/New_York" ]][[ parseDateInTZ "2020-11-05T12:25:32" "-07:00" "RFC3339" ]]
  • parseDuration:解析持续时间字符串并返回 time.Duration。示例:[[parseDuration "1h"]]
  • parseTimestampMilli:解析以毫秒为单位的时间戳,并以 UTC 时间返回一个 time.Time。示例:[[parseTimestamp 1604582732000]] 返回 2020-11-05 13:25:32 +0000 UTC
  • parseTimestampNano:解析以纳秒为单位的时间戳,并以 UTC 时间返回一个 time.Time。示例:[[parseTimestamp 1604582732000000000]] 返回 2020-11-05 13:25:32 +0000 UTC
  • parseTimestamp:解析以秒为单位的时间戳,并以 UTC 时间返回一个 time.Time。示例:[[parseTimestamp 1604582732]] 返回 2020-11-05 13:25:32 +0000 UTC
  • replaceAll(old, new, s):将 s 中所有不重叠的 old 实例替换为 new。示例:[[ replaceAll "some" "my" "some value" ]] 返回 my value
  • sprintf:根据格式说明符进行格式化并返回结果字符串。有关用法,请参阅 Go 文档。示例:[[sprintf "%d:%q" 34 "quote this"]]
  • toInt:尽可能将任何类型的值转换为整数。如果转换失败,则返回 0。
  • toJSON:将值转换为 JSON 字符串。这可以与 value_type: json 一起使用,以从模板创建对象。示例:[[ toJSON .last_response.body.pagingIdentifiers ]]
  • urlEncode:对提供的字符串进行 URL 编码。示例:[[urlEncode "string1"]]。示例:[[urlEncode "<string1>"]] 将返回 %3Cstring1%3E
  • userAgent:生成 User Agent,可以选择添加其他值。如果没有提供参数,它将生成默认的 User Agent,该 User Agent 默认添加到所有请求中。建议在设置新的 User-Agent 标头之前删除现有的 User-Agent 标头。示例:[[ userAgent "integration/1.2.3" ]] 将生成 Elastic-Filebeat/8.1.0 (darwin; amd64; 9b893e88cfe109e64638d65c58fd75c2ff695402; 2021-12-15 13:20:00 +0000 UTC; integration_name/1.2.3)
  • uuid:返回一个随机 UUID,例如 a11e8780-e3e7-46d0-8e76-f66e75acf019。示例:[[ uuid ]]

除了提供的函数之外,任何用于 time.Timehttp.Headerurl.Values 类型的原生函数都可以用于相应的对象。示例:[[(now).Day]][[.last_response.header.Get "key"]]

配置选项编辑

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

interval编辑

重复请求之间的持续时间。如果启用了分页,它可能会根据初始请求发出额外的分页请求。默认值:60 秒

auth.basic.enabled编辑

设置为 false 时,禁用基本身份验证配置。默认值:true

如果 enabled 设置为 false 或缺少 auth.basic 部分,则禁用基本身份验证设置。

auth.basic.user编辑

要进行身份验证的用户。

auth.basic.password编辑

要使用的密码。

auth.oauth2.enabled编辑

设置为 false 时,禁用 oauth2 配置。默认值:true

如果 enabled 设置为 false 或缺少 auth.oauth2 部分,则禁用 OAuth2 设置。

auth.oauth2.provider编辑

用于配置受支持的 oauth2 提供程序。每个受支持的提供程序都需要特定的设置。默认情况下未设置。受支持的提供程序有:azuregoogleokta

auth.oauth2.client.id编辑

在身份验证流程中用作客户端 ID。除了使用 google 作为提供程序外,始终需要它。提供程序必需:defaultazureokta

auth.oauth2.client.secret编辑

在身份验证流程中用作客户端密钥。除了使用 googleokta 作为提供程序外,始终需要它。提供程序必需:defaultazure

auth.oauth2.user编辑

在身份验证流程中用作用户的用户。身份验证需要它 - 授权类型密码。它仅适用于提供程序 default

auth.oauth2.password编辑

在身份验证流程中用作密码的密码。身份验证需要它 - 授权类型密码。它仅适用于提供程序 default

grant_type 密码需要用户名和密码。如果不使用用户名和密码,它将自动使用 token_urlclient credential 方法。

auth.oauth2.scopes编辑

oauth2 流程中将请求的作用域列表。对于所有提供程序,它都是可选的。

auth.oauth2.token_url编辑

在 oauth2 流程中将用于生成令牌的端点。如果没有指定提供程序,则需要它。

对于 azure 提供程序,需要 token_urlazure.tenant_id 之一。

auth.oauth2.endpoint_params编辑

将在每次请求中发送到 token_url 的值集。每个参数键可以有多个值。可以为除 google 之外的所有提供程序设置。

- type: httpjson
  auth.oauth2:
    endpoint_params:
      Param1:
        - ValueA
        - ValueB
      Param2:
        - Value

auth.oauth2.azure.tenant_id编辑

使用 azure 提供程序进行身份验证时使用。由于它用于生成 token_url 的过程中,因此不能与它一起使用。它不是必需的。

有关在哪里可以找到它的信息,请参阅 https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal

auth.oauth2.azure.resource编辑

使用 azure 提供程序时访问的 WebAPI 资源。它不是必需的。

auth.oauth2.google.credentials_file编辑

Google 的凭据文件。

一次只能设置一个凭据设置。如果没有提供,将尝试通过 ADC 从环境中加载默认凭据。有关如何提供 Google 凭据的更多信息,请参阅 https://cloud.google.com/docs/authentication

auth.oauth2.google.credentials_json编辑

您的凭据信息以原始 JSON 格式提供。

一次只能设置一个凭据设置。如果没有提供,将尝试通过 ADC 从环境中加载默认凭据。有关如何提供 Google 凭据的更多信息,请参阅 https://cloud.google.com/docs/authentication

auth.oauth2.google.jwt_file编辑

Google 的 JWT 帐号密钥文件。

一次只能设置一个凭据设置。如果没有提供,将尝试通过 ADC 从环境中加载默认凭据。有关如何提供 Google 凭据的更多信息,请参阅 https://cloud.google.com/docs/authentication

auth.oauth2.google.jwt_json编辑

JWT 帐号密钥文件以原始 JSON 格式提供。

一次只能设置一个凭据设置。如果没有提供,将尝试通过 ADC 从环境中加载默认凭据。有关如何提供 Google 凭据的更多信息,请参阅 https://cloud.google.com/docs/authentication

auth.oauth2.okta.jwk_file编辑

您的 Okta 服务应用程序的 RSA JWK 私钥文件,用于与 Okta 组织身份验证服务器交互以使用 okta.* 范围生成令牌。

一次只能设置其中一个凭据设置。有关更多信息,请参阅 https://developer.okta.com/docs/guides/implement-oauth-for-okta-serviceapp/main/

auth.oauth2.okta.jwk_json编辑

您的 Okta 服务应用程序的 RSA JWK 私钥 JSON,用于与 Okta 组织身份验证服务器交互以使用 okta.* 范围生成令牌。

auth.oauth2.okta.jwk_pem编辑

您的 Okta 服务应用程序的 RSA JWK 私钥 PEM 块,用于与 Okta 组织身份验证服务器交互以使用 okta.* 范围生成令牌。

一次只能设置其中一个凭据设置。有关更多信息,请参阅 https://developer.okta.com/docs/guides/implement-oauth-for-okta-serviceapp/main/

auth.oauth2.google.delegated_account编辑

用于创建凭据的委派帐户的电子邮件地址(通常是管理员)。与 auth.oauth2.google.jwt_fileauth.oauth2.google.jwt_json 结合使用,并在默认使用 ADC 时使用。

request.url编辑

HTTP API 的 URL。必需。

可以通过在 URL 方案中添加 +unix+npipe 来通过 Unix 套接字和 Windows 命名管道访问 API 端点,例如 http+unix:///var/socket/

request.method编辑

发出请求时使用的 HTTP 方法。选项包括 GETPOST。默认值:GET

request.encode_as编辑

用于编码请求正文的 ContentType。如果设置,它将强制以指定的格式进行编码,而不管 Content-Type 标头值是什么,否则它将尽可能遵循该值或回退到 application/json。默认情况下,请求使用 Content-Type: application/json 发送。支持的值:application/jsonapplication/x-www-form-urlencodedapplication/x-www-form-urlencoded 将对 url.params 进行 URL 编码,并将它们设置为正文。默认情况下不设置。

request.body编辑

可选的 HTTP POST 正文。配置值必须是一个对象,它将被编码为 JSON。这仅在 request.methodPOST 时有效。默认为 null(无 HTTP 正文)。

- type: httpjson
  request.method: POST
  request.body:
    query:
      bool:
        filter:
          term:
            type: authentication

request.timeout编辑

在声明 HTTP 客户端连接超时之前的持续时间。有效的时间单位为 nsusmssmh。默认值:30s

request.ssl编辑

这指定了 SSL/TLS 配置。如果缺少 ssl 部分,则主机的 CA 将用于 HTTPS 连接。有关更多信息,请参阅 SSL

request.proxy_url编辑

这以 http[s]://<user>:<password>@<server name/ip>:<port> 的形式指定代理配置

filebeat.inputs:
# Fetch your public IP every minute.
- type: httpjson
  interval: 1m
  request.url: https://api.ipify.org/?format=json
  request.proxy_url: http://proxy.example:8080

request.keep_alive.disable编辑

这指定是否禁用 HTTP 端点的 keep-alive。默认值:true

request.keep_alive.max_idle_connections编辑

所有主机上的最大空闲连接数。零表示没有限制。默认值:0

request.keep_alive.max_idle_connections_per_host编辑

每个主机保持的最大空闲连接数。如果为零,则默认为 2。默认值:0

request.keep_alive.idle_connection_timeout编辑

空闲连接在关闭自身之前保持空闲状态的最长时间。有效的时间单位为 nsusmssmh。零表示没有限制。默认值:0s

request.retry.max_attempts编辑

HTTP 客户端的最大重试次数。默认值:5

request.retry.wait_min编辑

尝试重试之前的最短等待时间。默认值:1s

request.retry.wait_max编辑

尝试重试之前的最长等待时间。默认值:60s

request.redirect.forward_headers编辑

设置为 true 时,如果发生重定向,则转发请求标头。默认值:false

request.redirect.headers_ban_list编辑

redirect.forward_headers 设置为 true 时,将转发除本列表中定义的标头之外的所有标头。默认值:[]

request.redirect.max_redirects编辑

请求要遵循的最大重定向次数。默认值:10

request.rate_limit.limit编辑

指定总限制的响应值。它使用 Go 模板值定义。可以从以下位置读取状态:[.last_response.header]

request.rate_limit.remaining编辑

指定速率限制剩余配额的响应值。它使用 Go 模板值定义。可以从以下位置读取状态:[.last_response.header] 如果响应中缺少 remaining 标头,则不会进行速率限制。

request.rate_limit.reset编辑

指定速率限制何时重置的纪元时间的响应值。它使用 Go 模板值定义。可以从以下位置读取状态:[.last_response.header]

request.rate_limit.early_limit编辑

(可选)在响应中指定的值之前开始速率限制。

在默认行为下,当 remaining 值不为零时,请求将继续。指定 early_limit 意味着将在达到 0 之前进行速率限制。

  • 如果为 early_limit 指定的值小于 1,则该值将被视为响应提供的 limit 的百分比。例如,指定 0.9 意味着请求将持续进行,直到达到速率限制的 90% — 对于 limit 值为 120,当 remaining 达到 12 时,速率限制开始生效。如果响应中缺少 limit 标头,则将发生默认的速率限制(当 remaining 达到 0 时)。
  • 如果为 early_limit 指定的值大于或等于 1,则该值将被视为 remaining 的目标值。例如,速率限制不是在 remaining 达到 0 时发生,而是在 remaining 达到指定值时发生。

默认情况下不设置它(默认情况下遵循响应中指定的速率限制)。

request.transforms编辑

在每次执行之前应用于请求的转换列表。

可用于请求的转换:[appenddeleteset]。

可以从以下位置读取状态:[.first_response.*.last_response.*.parent_last_response.* .last_event.*.cursor.*.header.*.url.*.body.*]。

可以将状态写入:[body.*header.*url.*]。

filebeat.inputs:
- type: httpjson
  request.url: https://127.0.0.1:9200/_search?scroll=5m
  request.method: POST
  request.transforms:
    - set:
        target: body.from
        value: '[[now (parseDuration "-1h")]]'

子句 .parent_last_response. 只能在链式步骤中使用,并且当根请求级别存在分页时。如果根级别不存在分页,请使用子句 .first_response. 从链中访问父响应对象。您可以查看下面的这个 示例 以获得更好的理解。

示例配置

  filebeat.inputs:
  - type: httpjson
    enabled: true
    id: my-httpjson-id
    request.url: http://xyz.com/services/data/v1.0/export_ids/page
    request.method: POST
    interval: 1h
    request.retry.max_attempts: 2
    request.retry.wait_min: 5s
    request.transforms:
    - set:
        target: body.page
        value: 0
    response.request_body_on_pagination: true
    response.pagination:
      - set:
          target: body.page
          value: '[[ .last_response.body.page ]]'
          fail_on_template_error: true
    chain:
    - step:
          request.url: http://xyz.com/services/data/v1.0/$.exportId/export_ids/$.files[:].id/info
          request.method: POST
          request.transforms:
          - set:
              target: body.exportId
              value: '[[ .parent_last_response.body.exportId ]]'
          replace: $.files[:].id
          replace_with: '$.exportId,.parent_last_response.body.exportId'

在这里我们可以看到,链式步骤仅在父(根)请求存在 response.pagination 时才使用 .parent_last_response.body.exportId。但是,如果父(根)请求中不存在 response.pagination,则 replace_with 子句应该使用 .first_response.body.exportId。这是因为当父级不存在分页时,parent_last_response 对象不会填充所需的值以提高性能,但 first_response 对象始终存储进程链中的第一个响应。

first_response 对象目前只能存储扁平的 JSON 结构(即不支持根级别为数组的 JSON、NDJSON 或 Gzipped JSON),因此它只能在这种情况下使用。不能对 first_response 执行拆分。需要通过在 httpjson 配置中将标志 response.save_first_response 设置为 true 来显式启用它。

request.tracer.filename编辑

可以将 httpjson 请求和响应记录到本地文件系统以调试配置。可以通过设置 request.tracer.filename 值来启用此选项。还有其他选项可用于调整日志轮换行为。

为了区分从不同输入实例生成的跟踪文件,可以在文件名中添加占位符 *,并将其替换为输入实例 ID。例如,http-request-trace-*.ndjson

启用此选项会危及安全性,因此仅应用于调试。

request.tracer.maxsize编辑

此值设置日志文件在轮换之前达到的最大大小(以兆字节为单位)。默认情况下,日志文件允许达到 1MB 后再进行轮换。

request.tracer.maxage编辑

这指定要保留轮换日志文件的天数。如果未设置,则无限期保留日志文件。

request.tracer.maxbackups编辑

要保留的旧日志数。如果未设置,则根据 request.tracer.maxage 设置保留所有旧日志。

request.tracer.localtime编辑

是使用主机的本地时间还是使用 UTC 时间为轮换后的日志文件名添加时间戳。

request.tracer.compress编辑

这决定是否应 gzip 压缩轮换的日志。

response.decode_as编辑

用于解码响应主体的 ContentType。如果设置,它将强制以指定的格式进行解码,而不管 Content-Type 标头值如何,否则它将在可能的情况下遵循它或回退到 application/json。支持的值:application/json、application/x-ndjsontext/csvapplication/zipapplication/xmltext/xml。默认情况下不设置。

对于 text/csv,将为每一行创建一个事件,使用标题值作为对象键。因此,始终假定存在标题。

对于 application/zipzip 文件应包含一个或多个 .json.ndjson 文件。它们的所有内容都将合并到一个 JSON 对象列表中。

对于 application/xmltext/xml,可以通过 response.xsd 选项提供用于解码 XML 文档的类型信息。

response.xsd编辑

XML 文档可能需要额外的类型信息才能进行正确的解析和提取。可以使用 response.xsd 选项将此信息作为文档的 XML 模式定义 (XSD) 提供。

response.transforms编辑

收到响应后要应用的转换列表。

可用于响应的转换:[appenddeleteset]。

可以从以下位置读取状态:[.last_response.*.last_event.*.cursor.*.header.*.url.*]。

可以将状态写入:[body.*]。

filebeat.inputs:
- type: httpjson
  request.url: https://127.0.0.1:9200/_search?scroll=5m
  request.method: POST
  response.transforms:
    - delete:
        target: body.very_confidential
  response.split:
    target: body.hits.hits
  response.pagination:
    - set:
        target: url.value
        value: https://127.0.0.1:9200/_search/scroll
    - set:
        target: url.params.scroll_id
        value: '[[.last_response.body._scroll_id]]'
    - set:
        target: body.scroll
        value: 5m

response.split编辑

在收到响应后应用于响应的拆分操作。拆分可以将映射、数组或字符串转换为多个事件。如果拆分目标为空,则将保留父文档。如果应删除具有空拆分的文档,则应将 ignore_empty_value 选项设置为 true

response.split[].target编辑

定义将执行拆分操作的目标字段。

response.split[].type编辑

定义目标的字段类型。允许的值:arraymapstringstring 需要使用 delimiter 选项来指定用于拆分字符串的字符。delimiter 的行为始终如同将 keep_parent 设置为 true。默认值:array

response.split[].transforms编辑

可以定义一组转换。此列表将在 response.transforms 之后以及根据 response.split[].keep_parentresponse.split[].key_field 修改对象之后应用。

可用于响应的转换:[appenddeleteset]。

可以从以下位置读取状态:[.last_response.*.first_event.*.last_event.*.cursor.*.header.*.url.*]。

可以将状态写入:[body.*]。

在这种情况下,body.* 将是所有先前转换的结果。

response.split[].keep_parent编辑

如果设置为 true,则将保留来自父文档(与 target 处于同一级别)的字段。否则,将使用 target 作为根创建一个新文档。默认值:false

response.split[].delimiter编辑

在使用 string 拆分类型时需要。这是用于拆分字符串的子字符串。例如,如果 delimiter 为“\n”,而字符串为“第 1 行\n第 2 行”,则拆分后的结果为“第 1 行”和“第 2 行”。

response.split[].key_field编辑

type: map 一起使用时有效。当不为空时,定义一个新字段,用于存储原始键值。

response.split[].ignore_empty_value编辑

如果设置为 true,则忽略空值或缺失值,处理将传递到下一个嵌套拆分操作,而不是因错误而失败。默认值:false

response.split[].split编辑

嵌套拆分操作。拆分操作可以随意嵌套。在应用最深的拆分操作之前,不会创建事件。

response.request_body_on_pagination编辑

如果设置为 true,则 request.body 中的值将用于分页请求。默认值:false

response.pagination编辑

将应用于每个新页面请求的响应的转换列表。将执行 request.transform 中的所有转换,然后添加 response.pagination 以根据需要修改下一个请求。对于后续响应,将正常执行通常的 response.transformsresponse.split

可用于分页的转换:[appenddeleteset]。

可以从以下位置读取状态:[.last_response.*.first_event.*.last_event.*.cursor.*.header.*.url.*.body.*]。

可以将状态写入:[body.*header.*url.*]。

使用拆分的示例

  • 我们有一个包含两个嵌套数组的响应,我们希望为内部数组的每个元素创建一个文档

    {
      "this": "is kept",
      "alerts": [
        {
          "this_is": "also kept",
          "entities": [
            {
              "something": "something"
            },
            {
              "else": "else"
            }
          ]
        },
        {
          "this_is": "also kept 2",
          "entities": [
            {
              "something": "something 2"
            },
            {
              "else": "else 2"
            }
          ]
        }
      ]
    }

    配置如下所示

    filebeat.inputs:
    - type: httpjson
      interval: 1m
      request.url: https://example.com
      response.split:
        target: body.alerts
        type: array
        keep_parent: true
        split:
          # paths in nested splits need to represent the state of body, not only their current level of nesting
          target: body.alerts.entities
          type: array
          keep_parent: true

    这将输出

    [
      {
        "this": "is kept",
        "alerts": {
          "this_is": "also kept",
          "entities": {
            "something": "something"
          }
        }
      },
      {
        "this": "is kept",
        "alerts": {
          "this_is": "also kept",
          "entities": {
            "else": "else"
          }
        }
      },
      {
        "this": "is kept",
        "alerts": {
          "this_is": "also kept 2",
          "entities": {
            "something": "something 2"
          }
        }
      },
      {
        "this": "is kept",
        "alerts": {
          "this_is": "also kept 2",
          "entities": {
            "else": "else 2"
          }
        }
      }
    ]
  • 我们有一个包含两个对象的数组的响应,我们希望为每个对象键创建一个文档,同时保留键值

    {
      "this": "is not kept",
      "alerts": [
        {
          "this_is": "kept",
          "entities": {
            "id1": {
              "something": "something"
            }
          }
        },
        {
          "this_is": "kept 2",
          "entities": {
            "id2": {
              "something": "something 2"
            }
          }
        }
      ]
    }

    配置如下所示

    filebeat.inputs:
    - type: httpjson
      interval: 1m
      request.url: https://example.com
      response.split:
        target: body.alerts
        type: array
        keep_parent: false
        split:
          # this time alerts will not exist because previous keep_parent is false
          target: body.entities
          type: map
          keep_parent: true
          key_field: id

    这将输出

    [
      {
        "this_is": "kept",
        "entities": {
          "id": "id1",
          "something": "something"
        }
      },
      {
        "this_is": "kept 2",
        "entities": {
          "id": "id2",
          "something": "something 2"
        }
      }
    ]
  • 我们有一个包含两个对象的数组的响应,我们希望为每个对象键创建一个文档,同时对每个对象应用转换

    {
      "this": "is not kept",
      "alerts": [
        {
          "this_is": "also not kept",
          "entities": {
            "id1": {
              "something": "something"
            }
          }
        },
        {
          "this_is": "also not kept",
          "entities": {
            "id2": {
              "something": "something 2"
            }
          }
        }
      ]
    }

    配置如下所示

    filebeat.inputs:
    - type: httpjson
      interval: 1m
      request.url: https://example.com
      response.split:
        target: body.alerts
        type: array
        split:
          transforms:
            - set:
                target: body.new
                value: will be added to each
          target: body.entities
          type: map

    这将输出

    [
      {
        "something": "something",
        "new": "will be added for each"
      },
      {
        "something": "something 2",
        "new": "will be added for each"
      }
    ]
  • 我们有一个响应,其键的值是一个字符串。我们希望将字符串在分隔符处拆分,并为每个子字符串创建一个文档。

    {
      "this": "is kept",
      "lines": "Line 1\nLine 2\nLine 3"
    }

    配置如下所示

    filebeat.inputs:
    - type: httpjson
      interval: 1m
      request.url: https://example.com
      response.split:
        target: body.lines
        type: string
        delimiter: "\n"

    这将输出

    [
      {
        "this": "is kept",
        "lines": "Line 1"
      },
      {
        "this": "is kept",
        "lines": "Line 2"
      },
      {
        "this": "is kept",
        "lines": "Line 3"
      }
    ]

chain编辑

链是在第一个请求之后要进行的一系列请求。

chain[].step编辑

包含链式调用的基本请求和响应配置。

chain[].step.request编辑

请参阅 请求参数。需要。

示例

第一次调用:https://example.com/services/data/v1.0/

第二次调用:https://example.com/services/data/v1.0/1/export_ids

第三次调用:https://example.com/services/data/v1.0/export_ids/file_1/info

chain[].step.response.split编辑

请参阅 响应拆分参数

+

chain[].step.replace编辑

一个 JSONPath 字符串,用于解析从响应 JSON 中解析的值,这些值是从先前的链步骤中收集的。在 URL 中放置相同的替换字符串,其中应放置从先前调用中收集的值。需要。

示例

  • 第一次调用:https://example.com/services/data/v1.0/

    响应

  • 第二次调用:https://example.com/services/data/v1.0/$.records[:].id/export_ids

    响应

  • 第三次调用:https://example.com/services/data/v1.0/export_ids/$.file_name/info
filebeat.inputs:
- type: httpjson
  enabled: true
  # first call
  request.url: https://example.com/services/data/v1.0/records
  interval: 1h
  chain:
    # second call
    - step:
        request.url: https://example.com/services/data/v1.0/$.records[:].id/export_ids
        request.method: GET
        replace: $.records[:].id
    # third call
    - step:
        request.url: https://example.com/services/data/v1.0/export_ids/$.file_name/info
        request.method: GET
        replace: $.file_name

示例

  • 第一次调用以收集记录 ID

    request_url:https://example.com/services/data/v1.0/records

    response_json

    {
        "records": [
            {
                "id": 1,
            },
            {
                "id": 2,
            },
            {
                "id": 3,
            },
        ]
    }
  • 第二次调用,使用从第一次调用中收集的 ID 收集 file_name

    使用 id 作为 *1* 的 request_url:https://example.com/services/data/v1.0/1/export_ids

    使用 id 作为 *1* 的 response_json

    {
        "file_name": "file_1"
    }

    使用 id 作为 *2* 的 request_url:https://example.com/services/data/v1.0/2/export_ids

    使用 id 作为 *2* 的 response_json

    {
        "file_name": "file_2"
    }
  • 第三次调用,使用从第二次调用中收集的 file_name 收集 files

    使用 file_name 作为 *file_1* 的 request_url:https://example.com/services/data/v1.0/export_ids/file_1/info

    使用 file_name 作为 *file_2* 的 request_url:https://example.com/services/data/v1.0/export_ids/file_2/info

    收集并从所有调用的 httpjson 支持的任何格式的响应中创建事件。

    请注意,由于 request.url 必须是有效的 URL,如果 API 返回完整的 URL 而不是像上面示例中的标识符,则不可能使用 JSON 路径语法。要在这种情况下实现所需的结果,可以使用不透明 URI 语法。不透明 URI 具有由冒号分隔的任意方案和不透明文本。完成替换后,在替换之前从 URI 中剥离方案和冒号,并使用剩余的不透明文本作为替换目标。在以下示例中,方案为“placeholder”。

filebeat.inputs:
- type: httpjson
  enabled: true
  # first call
  request.url: https://example.com/services/data/v1.0/records
  interval: 1h
  chain:
    # second call
    - step:
        request.url: placeholder:$.records[:]
        request.method: GET
        replace: $.records[:]
    # third call
    - step:
        request.url: placeholder:$.file_name
        request.method: GET
        replace: $.file_name

+

chain[].step.replace_with编辑

replace_with: "pattern,value" 子句用于将 request.url 中定义的固定模式字符串替换为给定值。固定模式必须具有 $. 前缀,例如:$.xyzvalue 可以是硬编码的,也可以从上下文变量中提取,例如 [.last_response.*.first_response.*.parent_last_response.*] 等。replace_with 子句可以与 replace 子句结合使用,从而在链请求的逻辑中提供很大的灵活性。

示例

  • 第一次调用:https://example.com/services/data/v1.0/exports

    响应

  • 第二次调用:https://example.com/services/data/v1.0/$.exportId/files

    响应

filebeat.inputs:
- type: httpjson
  enabled: true
  # first call
  request.url: https://example.com/services/data/v1.0/exports
  interval: 1h
  chain:
    # second call
    - step:
        request.url: https://example.com/services/data/v1.0/$.exportId/files
        request.method: GET
        replace_with: '$.exportId,.first_response.body.exportId'

示例

  • 第一次调用以获取 exportId

    request_url:https://example.com/services/data/v1.0/exports

    response_json

    {
        "exportId" : "2212"
    }
  • 第二次调用,使用第一次调用中的 exportId 获取 file ids

    使用 exportId 作为 *2212* 的 request_url:https://example.com/services/data/v1.0/2212/files

    使用 exportId 作为 *2212* 的 response_json

    {
        "files": [
            {
                "id": 1,
            },
            {
                "id": 2,
            },
            {
                "id": 3,
            },
        ]
    }

    url 中的目标固定模式替换的这种行为有助于解决各种用例。

要记住的一些有用要点:-

  1. 如果您希望将 value 视为要评估的表达式以从上下文变量中提取数据,则它应始终具有 单个 *.*(点)前缀。示例:replace_with: '$.exportId,.first_response.body.exportId'。任何更多或更少的内容都将使内部处理器将其视为硬编码值,replace_with: '$.exportId,..first_response.body.exportId'(多个 *.*(点)作为前缀)或 replace_with:'$.exportId,first_response.body.exportId'(没有 *.* 点作为前缀)
  2. 不完整的 value expressions 将导致处理时出错。示例:replace_with: '$.exportId,.first_response.'replace_with: '$.exportId,.last_response.' 等。这些表达式不完整,因为它们没有评估到可以从上下文变量中提取的有效键。值表达式:.first_response. 在处理时将导致数组 [first_response ""],其中要提取的键变为 ""(空字符串),这在任何上下文变量中都没有定义。

固定模式的定义中不得包含逗号。字符串替换模式由 replace_with 处理器使用精确字符串匹配进行匹配。first_response 对象目前只能存储扁平的 JSON 结构(即不支持根级别为数组的 JSON、NDJSON 或 Gzipped JSON),因此它应该仅在以下情况下使用:这是这种情况。无法在 first_response 上执行拆分。需要通过在 httpjson 配置中将标志 response.save_first_response 设置为 true 来显式启用它。

chain[].while编辑

包含链式 while 调用的基本请求和响应配置。链式 while 调用将继续发出给定次数的请求,直到满足条件或达到最大尝试次数。while 链具有一个属性 until,该属性保存要评估的表达式。理想情况下,until 字段应始终与属性 request.retry.max_attemptsrequest.retry.wait_min 一起使用,它们指定在放弃之前评估 until 的最大尝试次数以及此类请求之间的最大等待时间。如果未指定 request.retry.max_attempts,它将仅尝试评估表达式一次,如果失败则放弃。如果未指定 request.retry.wait_min,则默认等待时间将始终为 0,因为将立即进行连续调用。

chain[].while.request编辑

请参阅 请求参数

示例

第一次调用:http://example.com/services/data/v1.0/exports

第二次调用:http://example.com/services/data/v1.0/9ef0e6a5/export_ids/status

第三次调用:http://example.com/services/data/v1.0/export_ids/1/info

chain[].while.response.split编辑

请参阅 响应拆分参数

chain[].while.replace编辑

请参阅 chain[].step.replace

示例

  • 第一次调用:http://example.com/services/data/v1.0/exports

    响应

  • 第二次调用:http://example.com/services/data/v1.0/$.exportId/export_ids/status

    响应

  • 第三次调用:http://example.com/services/data/v1.0/export_ids/$.files[:].id/info

    响应 1响应 2

filebeat.inputs:
- type: httpjson
  enabled: true
  # first call
  id: my-httpjson-id
  request.url: http://example.com/services/data/v1.0/exports
  interval: 1h
  chain:
    # second call
    - while:
        request.url: http://example.com/services/data/v1.0/$.exportId/export_ids/status
        request.method: GET
        replace: $.exportId
        until: '[[ eq .last_response.body.status "completed" ]]'
        request.retry.max_attempts: 5
        request.retry.wait_min: 5s
    # third call
    - step:
        request.url: http://example.com/services/data/v1.0/export_ids/$.files[:].id/info
        request.method: GET
        replace: $.files[:].id

示例

  • 第一次调用以收集导出 ID

    request_url:https://example.com/services/data/v1.0/exports

    response_json

    {
        "exportId": "9ef0e6a5"
    }
  • 第二次调用,当 response.body.sataus == "completed" 时,使用从第一次调用中收集的 ID 收集 file_ids。此调用将继续,直到满足条件或达到最大尝试次数。

    使用 id 作为 *9ef0e6a5* 的 request_url:https://example.com/services/data/v1.0/9ef0e6a5/export_ids/status

    使用 id 作为 *9ef0e6a5* 的 response_json

    {
        "status": "completed",
        "files": [
          {
            "id": 1
          },
          {
            "id": 2
          },
          {
            "id": 3
          }
        ]
    }
  • 第三次调用,使用从第二次调用中收集的 file_id 收集 files

    使用 1 作为 file_id 的 request_url:https://example.com/services/data/v1.0/export_ids/1/info

    使用 2 作为 file_id 的 request_url:https://example.com/services/data/v1.0/export_ids/2/info

    使用 id 作为 *1* 的 response_json

    {
        "file_name": "file_1",
        "file_data": "some data"
    }

    使用 id 作为 *2* 的 response_json

    {
        "file_name": "file_2",
        "file_data": "some data"
    }

    收集并从所有调用的 httpjson 支持的任何格式的响应中创建事件。

    请注意,由于 request.url 必须是有效的 URL,如果 API 返回完整的 URL 而不是像上面示例中的标识符,则不可能使用 JSON 路径语法。要在这种情况下实现所需的结果,可以使用不透明 URI 语法。不透明 URI 具有由冒号分隔的任意方案和不透明文本。完成替换后,在替换之前从 URI 中剥离方案和冒号,并使用剩余的不透明文本作为替换目标。在以下示例中,方案为“placeholder”。

filebeat.inputs:
- type: httpjson
  enabled: true
  # first call
  id: my-httpjson-id
  request.url: http://example.com/services/data/v1.0/exports
  interval: 1h
  chain:
    # second call
    - while:
        request.url: placeholder:$.exportId
        request.method: GET
        replace: $.exportId
        until: '[[ eq .last_response.body.status "completed" ]]'
        request.retry.max_attempts: 5
        request.retry.wait_min: 5s
    # third call
    - step:
        request.url: placeholder:$.files[:]
        request.method: GET
        replace: $.files[:]

httpjson 链只会从链式配置的最后一次调用中创建和提取事件。此外,当前链仅支持以下内容:所有 请求参数response.transformsresponse.split

chain[].while.replace_with编辑

请参阅 chain[].step.replace_with

cursor编辑

游标是一个键值对象列表,其中定义了任意值。这些值被解释为 值模板,并且可以设置默认模板。游标状态在输入重新启动之间保持,并在发布请求的所有事件后更新。

每个游标条目由以下内容构成

  • 一个 value 模板,用于定义在评估时要存储的值。
  • 一个 default 模板,用于定义在值模板失败或为空时要存储的值。
  • 一个 ignore_empty_value 标志。如果设置为 true,则不会存储空值,而是保留之前的值(如果有)。默认值:true

可以从以下位置读取状态:[.last_response.*.first_event.*.last_event.*]。

默认模板无法访问任何状态,只能访问函数。

filebeat.inputs:
- type: httpjson
  interval: 1m
  request.url: https://api.ipify.org/?format=json
  response.transforms:
    - set:
        target: body.last_requested_at
        value: '[[.cursor.last_requested_at]]'
        default: "[[now]]"
  cursor:
    last_requested_at:
      value: '[[now]]'
  processors:
    - decode_json_fields:
        fields: ["message"]
        target: "json"

请求生命周期编辑

Request lifecycle

  1. 每隔定义的时间间隔就会创建一个新请求。
  2. 使用配置的 request.transforms 对请求进行转换。
  3. 执行生成的转换后的请求。
  4. 服务器响应(如果配置了任何重试或速率限制策略,则在此处执行)。
  5. 使用配置的 response.transformsresponse.split 对响应进行转换。
  6. 如果配置了链步骤。每个步骤都将根据从响应中收集的 ID 生成新请求。将使用配置的 request.transforms 对请求进行转换,并将执行生成的转换后的请求。此过程将针对链中提到的所有步骤执行。
  7. 将每个生成的事件发布到输出。
  8. 如果配置了 response.pagination 并且还有更多页面,则使用它创建一个新请求,否则该过程将结束,直到下一个时间间隔。

Chain Request lifecycle

  1. 将处理来自常规调用的响应。
  2. 从响应中提取数据并从响应生成新请求。
  3. 处理生成的请求并从服务器收集响应。
  4. 返回步骤 2 以进行下一步。
  5. 发布从最后一个链步骤收集的响应。

指标编辑

此输入在 HTTP 监控端点 下公开指标。这些指标在 /inputs 路径下公开。它们可用于观察输入的活动。

指标 说明

http_request_total

已处理请求的总数。

http_request_errors_total

请求错误的总数。

http_request_delete_total

DELETE 请求的总数。

http_request_get_total

GET 请求的总数。

http_request_head_total

HEAD 请求的总数。

http_request_options_total

OPTIONS 请求的总数。

http_request_patch_total

PATCH 请求的总数。

http_request_post_total

POST 请求的总数。

http_request_put_total

PUT 请求的总数。

http_request_body_bytes_total

请求正文大小的总和。

http_request_body_bytes

请求正文大小的直方图。

http_response_total

收到的响应总数。

http_response_errors_total

响应错误的总数。

http_response_1xx_total

1xx 响应的总数。

http_response_2xx_total

2xx 响应的总数。

http_response_3xx_total

3xx 响应的总数。

http_response_4xx_total

4xx 响应的总数。

http_response_5xx_total

5xx 响应的总数。

http_response_body_bytes_total

响应正文大小的总和。

http_response_body_bytes

响应正文大小的直方图。

http_round_trip_time

往返时间的直方图。

httpjson_interval_total

已执行时间间隔的总数。

httpjson_interval_errors_total

时间间隔错误的总数。

httpjson_interval_execution_time

时间间隔执行时间的直方图。

httpjson_interval_pages

每个时间间隔的总页数的直方图。

httpjson_interval_pages_execution_time

时间间隔页面执行时间的直方图。

通用选项编辑

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

enabled编辑

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

tags编辑

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

示例

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

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

filebeat.inputs:
- type: httpjson
  . . .
  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