跳转到内容
搜索文档

启用 Splunk

最后更新 查看 MarkdownAgent 设置

HTTP Event Collector (HEC) 是从 Splunk Enterprise 或 Splunk Cloud Platform 接收数据的可靠方法。Cloudflare Logpush 支持通过 Cloudflare 仪表板或 API 将日志直接推送到 Splunk HEC。

通过 Cloudflare 仪表板管理

  1. 在 Cloudflare 仪表板中,前往账户或域名(也称为 zone)级别的 Logpush(日志推送) 页面。

    账户级别:Go to Logpush ↗

    域名(也称为 zone)级别:Go to Logpush ↗

  2. 根据你的选择,可分别访问账户范围数据集zone 范围数据集

  3. 选择 Create a Logpush job(创建 Logpush 作业)

  1. Select a destination(选择目标) 中,选择 Splunk

  2. 输入或选择以下目标信息:

    • Splunk HEC URL
    • Channel ID - 这是一个随机 GUID,可使用 guidgenerator.com 生成。
    • Auth Token - 以单词 Splunk 为前缀的 Event Collector token。例如:Splunk 1234EXAMPLEKEY
    • Source Type(源类型) - 例如 cloudflare:json。如果使用 Cloudflare App for Splunk,请参阅 Details(详情) 部分中与对应数据集相匹配的 source type。例如,对于 Zero Trust Access 请求日志,source type 为 cloudflare:access
    • Use insecure skip verify option(不推荐)

输入完目标详细信息后,选择 Continue(继续)

  1. 选择要推送到存储服务的数据集。

  2. 在下一步中,需要配置你的 Logpush 任务:

    • 输入 Job name(作业名称)
    • If logs match(如果日志匹配) 下,可以选择要包含和/或从日志中排除的事件。更多信息请参阅 Filters。并非所有数据集都提供此选项。
    • Send the following fields(发送以下字段) 中,可以选择将所有日志推送到存储目标,或有选择地指定要推送的日志。
  3. Advanced Options(高级选项) 中,你可以:

    • 选择日志中时间戳字段的格式(RFC3339(默认)、UnixUnixNano)。
    • 为日志选择采样率,或推送随机采样的一定百分比日志。
    • 启用针对 CVE-2021-44228 的脱敏。该选项会将每一次出现的 ${ 替换为 x{
  4. 配置完 Logpush 任务后,选择 Submit(提交)

通过 API 管理

要设置 Splunk Logpush 任务:

  1. 使用相应的端点 URL 和身份验证参数创建任务。
  2. 启用任务以开始推送日志。

在尝试读取或配置 Logpush 任务之前,请确保已启用 Log Share 权限。更多信息请参阅角色部分

1. 创建任务

要创建任务,请向 Logpush jobs 端点发送 POST 请求,并包含以下字段:

  • name(可选)- 使用你的域名作为任务名称。

  • destination_conf - 由端点 URL、channel id、insecure-skip-verify 标志、source type、authorization header 组成的日志目标,格式如下所示的字符串。

    • <SPLUNK_ENDPOINT_URL>:带端口的 Splunk raw HTTP Event Collector URL。例如:splunk.cf-analytics.com:8088/services/collector/raw
      • 配置并设置 Logpush 任务时,Cloudflare 期望 Splunk 端点为 /services/collector/raw
      • 确保已在 Splunk 中启用 HEC。有关如何在 Splunk 中设置 HEC,请参阅 Splunk Analytics Integrations
      • 添加错误 URL 时,你可能会看到 API 请求因 504 错误而失败。Splunk Cloud 端点 URL 通常在主机名之前包含 http-inputs- 或类似文本。
    • <SPLUNK_CHANNEL_ID>:唯一的 channel ID。这是一个随机 GUID,可通过以下方式生成:
      • 使用在线工具,例如 GUID generator
      • 使用命令行。例如:python -c 'import uuid; print(uuid.uuid4())'
    • <INSECURE_SKIP_VERIFY>:布尔值。Cloudflare 建议将此值设为 false。设为 true 等同于在 Splunk 示例中对 curl 使用 -k 选项,推荐。仅在 HEC 使用自签名证书时将此值设为 true
    • <SOURCE_TYPE>:Splunk source type。例如:cloudflare:json
    • <SPLUNK_AUTH_TOKEN>:URL 编码的 Splunk 授权 token,必须以单词 Splunk 为前缀。例如:Splunk e6d94e8c-5792-4ad1-be3c-29bcaee0197d
"splunk://<SPLUNK_ENDPOINT_URL>?channel=<SPLUNK_CHANNEL_ID>&insecure-skip-verify=<INSECURE_SKIP_VERIFY>&sourcetype=<SOURCE_TYPE>&header_Authorization=<SPLUNK_AUTH_TOKEN>"
  • dataset - 你希望接收的日志类别。有关支持的数据集完整列表,请参阅 Datasets

  • output_options(可选)- 要配置字段、采样率和时间戳格式,请参阅 Log Output Options。对于时间戳,Cloudflare 建议使用 timestamps=rfc3339

使用 cURL 的示例请求:

Required API token permissions

At least one of the following token permissions is required:
  • Logs Write
Create Logpush jobbash
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/logpush/jobs" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "<DOMAIN_NAME>",
		"destination_conf": "splunk://<SPLUNK_ENDPOINT_URL>?channel=<SPLUNK_CHANNEL_ID>&insecure-skip-verify=<INSECURE_SKIP_VERIFY>&sourcetype=<SOURCE_TYPE>&header_Authorization=<SPLUNK_AUTH_TOKEN>",
		"output_options": {
				"field_names": [
						"ClientIP",
						"ClientRequestHost",
						"ClientRequestMethod",
						"ClientRequestURI",
						"EdgeEndTimestamp",
						"EdgeResponseBytes",
						"EdgeResponseStatus",
						"EdgeStartTimestamp",
						"RayID"
				],
				"timestamp_format": "rfc3339"
		},
		"dataset": "http_requests",
		"enabled": true
	}'

响应:

{
  "errors": [],
  "messages": [],
  "result": {
    "id": <JOB_ID>,
    "dataset": "http_requests",
    "kind": "",
    "enabled": true,
    "name": "<DOMAIN_NAME>",
    "output_options": {
      "field_names": ["ClientIP", "ClientRequestHost", "ClientRequestMethod", "ClientRequestURI", "EdgeEndTimestamp","EdgeResponseBytes", "EdgeResponseStatus", "EdgeStartTimestamp", "RayID"],
      "timestamp_format": "rfc3339"
    },
    "destination_conf": "splunk://<SPLUNK_ENDPOINT_URL>?channel=<SPLUNK_CHANNEL_ID>&insecure-skip-verify=<INSECURE_SKIP_VERIFY>&sourcetype=<SOURCE_TYPE>&header_Authorization=<SPLUNK_AUTH_TOKEN>",
    "last_complete": null,
    "last_error": null,
    "error_message": null
  },
  "success": true
}

请参阅 Manage Logpush with cURL 以了解如何更新任务(包括启用与禁用)。

请参阅 Logpush FAQ 获取故障排除信息。

3. 为 Splunk HEC 端点创建 WAF 自定义规则(可选)

如果你的 Logpush 目标主机名通过 Cloudflare 代理,并且已开启 Cloudflare Web Application Firewall (WAF),则在 Cloudflare 向 Splunk HTTP Event Collector (HEC) 发起请求时,可能会被质询或拦截。为避免这种情况,你需要创建一条自定义规则,允许 Cloudflare 绕过 HEC 端点。

  1. 在 Cloudflare 仪表板中,前往 Security rules(安全规则) 页面。

    Go to Security rules ↗
  2. 选择 Create rule(创建规则) > Custom rules(自定义规则)

  3. 为规则输入描述性名称(例如 Splunk)。

  4. When incoming requests match(当传入请求匹配时) 下,使用 Field(字段)Operator(运算符)Value(值) 下拉列表创建规则。完成每一行后,选择 And(并且) 以创建下一行规则。应输入的值请参阅下表:

    Field Operator Value
    Request Method equals POST
    Hostname(主机名) equals 你的 Splunk 端点主机名。例如:splunk.cf-analytics.com
    URI Path equals /services/collector/raw
    URI Query String contains channel
    AS Num is in 13335, 132892, 202623
    User Agent(用户代理) equals Go-http-client/2.0
  5. 按表中所示输入值后,你应能看到包含你为该规则所添加值的 Expression Preview。以下示例反映主机名 splunk.cf-analytics.com

    (http.request.method eq "POST" and http.host eq "splunk.cf-analytics.com" and http.request.uri.path eq "/services/collector/raw" and http.request.uri.query contains "channel" and ip.geoip.asnum in {13335 132892 202623} and http.user_agent eq "Go-http-client/2.0")
  6. Then(然后) > Choose an action(选择操作) 下拉列表中,选择 Skip

  7. WAF components to skip(要跳过的 WAF 组件) 下,选择 All managed rules(所有托管规则)

  8. 选择 Deploy(部署)

  1. 登录 Cloudflare 仪表板 并选择你的账户。前往 Security(安全) > WAF > Custom rules(自定义规则)

  2. 选择 Create rule(创建规则) 并输入描述性名称(例如 Splunk)。

  3. When incoming requests match(当传入请求匹配时) 下,使用 Field(字段)Operator(运算符)Value(值) 下拉列表创建规则。完成每一行后,选择 And(并且) 以创建下一行规则。应输入的值请参阅下表:

    Field Operator Value
    Request Method equals POST
    Hostname(主机名) equals 你的 Splunk 端点主机名。例如:splunk.cf-analytics.com
    URI Path equals /services/collector/raw
    URI Query String contains channel
    AS Num is in 13335, 132892, 202623
    User Agent(用户代理) equals Go-http-client/2.0
  4. 按表中所示输入值后,你应能看到包含你为该规则所添加值的 Expression Preview。以下示例反映主机名 splunk.cf-analytics.com

    (http.request.method eq "POST" and http.host eq "splunk.cf-analytics.com" and http.request.uri.path eq "/services/collector/raw" and http.request.uri.query contains "channel" and ip.geoip.asnum in {13335 132892 202623} and http.user_agent eq "Go-http-client/2.0")
  5. Then(然后) > Choose an action(选择操作) 下拉列表中,选择 Skip

  6. WAF components to skip(要跳过的 WAF 组件) 下,选择 All managed rules(所有托管规则)

  7. 选择 Deploy(部署)

WAF 现在应会忽略 Cloudflare 对 Splunk HEC 发起的请求。

排查 Splunk 目标问题

验证目标错误

如果在设置 Splunk 任务时收到验证错误,请检查以下内容:

  • Endpoint URL(端点 URL):Cloudflare 仅支持通过 HTTPS 的 Splunk HEC raw 端点。请确认你的端点 URL 正确且包含端口(通常为 :8088)。
  • Authentication token(身份验证令牌):确保 Splunk 身份验证 token 已 URL 编码并以 Splunk 为前缀。例如,token 中的空格请使用 %20
  • Certificate configuration(证书配置):由 Splunk 或第三方生成的证书,其 Common Name(通用名称) 字段必须与 Splunk 服务器的域名匹配。否则,你可能会看到类似如下的错误:x509: certificate is valid for SplunkServerDefaultCert, not <YOUR_INSTANCE>.splunkcloud.com

理解 insecure-skip-verify

insecure-skip-verify 参数设为 true 时,会与 Splunk 建立不安全连接。这等同于对 curl 使用 -k 选项,不推荐

为何存在此参数:由 Splunk 或第三方生成的证书,其 Common Name(通用名称) 字段应与 Splunk 服务器的域名匹配。当它们不匹配时(尤其是 Splunk 启动时生成的默认证书),除非修复证书,否则推送将失败。此参数适用于极少见的场景:你无法访问或修改证书,例如不允许更改服务器配置的 Splunk Cloud 实例。

设置前验证 HEC

在创建 Logpush 任务之前,请先通过不带 -k 标志且 insecure-skip-verify=falsecurl 发布测试事件,验证你的 Splunk HEC 是否正常工作:

curl "https://<SPLUNK_ENDPOINT_URL>?channel=<SPLUNK_CHANNEL_ID>&insecure-skip-verify=false&sourcetype=<SOURCE_TYPE>" \
--header "Authorization: Splunk <SPLUNK_AUTH_TOKEN>" \
--data '{"BotScore":99,"BotScoreSrc":"Machine Learning","CacheCacheStatus":"miss","CacheResponseBytes":2478}'

预期响应:

{"text":"Success","code":0}

网络端口要求

Cloudflare 期望 HEC 网络端口配置为 :443:8088。不支持其他端口。

Cloudflare Splunk App 集成

Logpush 与 Cloudflare App for Splunk 集成。只要你使用 cloudflare:json source type 摄取日志,即可使用 Cloudflare Splunk App 分析与可视化日志。

有关详细设置说明,请参阅 Splunk Analytics integration

这篇文档对您有帮助吗?