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.params: url.Values,来自 last_response.url.value 中 URL 的参数。可以使用 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.transforms, response.split, 或 request.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
  • do_not_log_failure 如果设置为 true,则 fail_on_template_error 将不会被记录,除非在 DEBUG 级别。当预期在正常操作中出现模板故障作为控制流时,应使用此选项。

delete

编辑

删除目标字段。

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

设置一个值。

- 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
  • do_not_log_failure 如果设置为 true,则 fail_on_template_error 将不会被记录,除非在 DEBUG 级别。当预期在正常操作中出现模板故障作为控制流时,应使用此选项。

值模板

编辑

某些配置选项和转换可以使用值模板。值模板是 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 commit)、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 标头。示例:[[ 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

编辑

重复请求之间的持续时间。如果启用了分页,它可能会响应初始请求而进行额外的分页请求。默认值:60s

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。始终需要此 ID,除非使用 google 作为提供程序。提供程序需要:defaultazureokta

auth.oauth2.client.secret

编辑

用作身份验证流程一部分的客户端密钥。始终需要此密钥,除非使用 googleokta 作为提供程序。提供程序需要:defaultazure

auth.oauth2.user

编辑

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

auth.oauth2.password

编辑

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

授权类型密码需要用户和密码。如果未使用用户和密码,它将自动使用 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 Org Auth Server 交互以使用 okta.* 范围来铸造令牌。

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

auth.oauth2.okta.jwk_json

编辑

您的 Okta 服务应用程序的 RSA JWK 私钥 JSON,用于与 Okta Org Auth Server 交互以使用 okta.* 范围来铸造令牌。

auth.oauth2.okta.jwk_pem

编辑

您的 Okta 服务应用程序的 RSA JWK 私钥 PEM 块,用于与 Okta Org Auth Server 交互以使用 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。必需。

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

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 部分,则 HTTPS 连接将使用主机的 CA。有关更多信息,请参阅 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

编辑

每个主机保持的最大空闲连接数。如果为零,则默认为两个。默认值: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
          do_not_log_failure: 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'

在这里,我们可以看到,链式步骤使用 .parent_last_response.body.exportId 仅仅是因为父(根)请求存在 response.pagination。但是,如果父(根)请求中不存在 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.enable

编辑

可以将 HTTP 请求和响应记录到本地文件系统,以便调试配置。可以通过将 request.tracer.enabled 设置为 true 并设置 request.tracer.filename 值来启用此选项。还有其他选项可用于调整日志轮换行为。要删除现有日志,请在不取消设置文件名选项的情况下将 request.tracer.enabled 设置为 false。

启用此选项会损害安全性,应仅用于调试。

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/zip,期望 zip 文件包含一个或多个 .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_parenttrue。默认值: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",并且字符串为 "line 1\nline 2",则拆分结果为 "line 1" 和 "line 2"。

response.split[].key_field

编辑

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

response.split[].ignore_empty_value

编辑

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

请注意,如果 ignore_empty_valuetrue 并且最终结果为空,则不会发布任何事件,也不会进行游标更新。如果必须对所有响应进行游标更新,则应将其设置为 false,并且必须配置 Ingest Pipeline 以容忍空事件集。

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

编辑

请参阅 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 Path 语法。为了在这种情况下实现所需的结果,可以使用不透明的 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 结构(即不支持根级别有数组、NDJSON 或 Gzipped JSON 的 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

编辑

请参阅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"
    }
  • 第二次调用以收集file_ids,当response.body.sataus == "completed"时,使用首次调用收集的 ID。此调用将持续到满足条件或达到最大尝试次数。

    使用 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
          }
        ]
    }
  • 第三次调用以收集 files,使用第二次调用收集的 file_id

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

    使用 file_id 为 *2* 的 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 Path 语法。为了在这种情况下实现所需的结果,可以使用不透明的 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 链只会从链式配置的最后一次调用创建和摄取事件。此外,当前链仅支持以下内容:所有请求参数响应转换响应拆分

chain[].while.replace_with

编辑

请参阅chain[].step.replace_with

cursor

编辑

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

如果未发布任何事件,则不会进行游标更新。当目标 API 返回空响应集时,这可能会对如何执行游标更新产生影响。

每个游标条目由以下组成

  • 一个 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. 使用配置的请求转换转换请求。
  3. 执行生成的转换后的请求。
  4. 服务器响应(当配置时,这是任何重试或速率限制策略发生的地方)。
  5. 使用配置的响应转换响应拆分转换响应。
  6. 如果配置了链步骤。每个步骤将基于从响应收集的 ID 生成新的请求。将使用配置的请求转换转换请求,并将执行生成的转换后的请求。此过程将发生在链中提到的所有步骤中。
  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。

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

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