导出 Cloud Logging 数据的场景:Splunk

此场景展示了如何实时将选定的日志从 Cloud Logging 导出到 Splunk 企业版或 Splunk Cloud。借助 Splunk,您可以搜索、分析和直观呈现从本地部署和云端部署收集的日志、事件和指标,以进行 IT 和安全监控。从 Cloud Logging 集成日志后,您可以继续使用现有合作伙伴服务(如 Splunk)作为统一日志分析解决方案,并且还可以通过 Google Cloud 即 SaaS 或混合方法在本地部署 Splunk。

本文档简要介绍了将日志导出到 Splunk 的两种不同的支持方法:通过从 Google Cloud 推送拉取日志。正如下一部分所述,在大多数情况下,建议使用云原生基于推送的方法。如需深入了解如何部署基于推送的日志导出解决方案,请参阅使用 Dataflow 将支持生产环境的日志导出部署到 Splunk

此场景是导出 Cloud Logging 设计模式的一部分。

简介

您可以通过以下两种方法提取 Splunk 支持的 Google Cloud 数据:

我们建议您使用基于推送的方法在 Splunk 中提取 Google Cloud 数据。此方法具有以下优势:

  • 代管式服务。Dataflow 代管式服务会管理 Google Cloud 中数据处理任务(如日志导出)所需的资源。
  • 分布式工作负载。工作负载会分布在多个工作器中以进行并行处理。因此,与使用 Splunk 重量级转发器传输数据不同,不存在单点故障。
  • 安全。数据会推送到 Splunk HEC,因此不存在任何与创建和管理服务帐号密钥关联的维护和安全负担。基于拉取的方法仍要求您创建和管理服务帐号密钥。
  • 自动扩缩。Dataflow 服务会自动扩缩工作器的数量,以应对传入日志量和积压的变化。
  • 容错性。如果出现暂时性服务器或网络问题,系统会自动处理对 Splunk HEC 的重试。此方法还支持任何无法递送的日志消息的未处理主题(也称为死信主题),以免数据丢失。
  • 简单性。您无需承担管理开销以及运行一个或多个 Splunk 重量级转发器的费用。

在某些情况下,您可以使用基于拉取的方法将 Google Cloud 数据提取到 Splunk 中。这些情况如下所示:

  • 您的 Splunk 部署不提供 Splunk HEC 端点。
  • 您的日志量较低。
  • 您希望拉取 Cloud Monitoring 指标、Cloud Storage 对象或数据量较少的日志。
  • 您已在管理一个或多个 Splunk 重量级转发器(或正在使用托管的适用于 Splunk Cloud 的输入数据管理器)。

设置日志导出

下图显示了通过 Pub/Sub 将日志记录导出到 Splunk 的步骤。

启用将日志记录导出到 Pub/Sub 的功能。

设置 Pub/Sub 主题和订阅

按照设置 Pub/Sub 主题说明执行操作(主题将接收导出的日志并)为该主题添加订阅

本文档使用以下 Pub/Sub 主题和订阅名称:

projects/compliance-logging-export/topics/logs-export-topic

projects/compliance-logging-export/topics/logs-export-subscription

打开所有服务的审核日志

管理员活动审核日志始终会写入且无法停用。但是,默认禁用数据访问的审核日志(BigQuery 除外)。要启用所有审核日志,请使用审核政策文档中列出的配置并按照更新 IAM 政策说明执行操作。步骤包括:

  • 将当前的 IAM 政策下载为文件。
  • 将审核日志政策 JSON 或 YAML 对象添加到当前的政策文件。
  • 使用更改后的政策文件更新 Google Cloud 项目(或组织)。

以下是一个示例 JSON 对象,它为所有服务启用了所有审核日志。

"auditConfigs": [
    {
        "service": "allServices",
        "auditLogConfigs": [
            { "logType": "ADMIN_READ" },
            { "logType": "DATA_READ"  },
            { "logType": "DATA_WRITE" },
        ]
    },
]

配置日志导出

设置集合导出或日志导出后,需要优化日志过滤条件以导出审核日志、与虚拟机相关的日志、存储日志和数据库日志。以下日志过滤条件涵盖了管理员活动和数据访问审核日志以及特定资源类型的日志。

logName:"/logs/cloudaudit.googleapis.com" OR
resource.type:gce OR
resource.type=gcs_bucket OR
resource.type=bigquery_resource

gcloud 命令行工具中,使用 gcloud logging sinks create 命令或 organizations.sinks.create API 调用来创建具有适当过滤条件的接收器。以下 gcloud 命令示例会为组织创建一个名为 gcp_logging_sink_pubsub 的接收器,目标是先前创建的 Pub/Sub 主题 logs-export-topic。该接收器包括所有子项目,并指定过滤条件以选择特定的审核日志。

gcloud logging sinks create gcp_logging_sink_pubsub \
    pubsub.googleapis.com/projects/compliance-logging-export/topics/logs-export-topic \
    --log-filter='logName:"/logs/cloudaudit.googleapis.com" OR \
    resource.type:\"gce\" OR \
    resource.type=\"gcs_bucket\" OR   \
    resource.type=\"bigquery_resource\"' \
    --include-children   \
    --organization=your-organization

输出的结果应类似于以下内容:

Created [https://logging.googleapis.com/v2/organizations/your-organization/sinks/gcp_logging_export_pubsub_sink].
Please remember to grant `serviceAccount:gcp-logging-export-pubsub-si@logging-oyour-organization.iam.gserviceaccount.com` Pub/Sub Publisher role to the topic.
More information about sinks can be found at /logging/docs/export/configure_export

在 API 调用返回的 serviceAccount 条目中,响应中包含身份 gcp-logging-export-pubsub-si@logging-oyour-organization.iam.gserviceaccount.com。该身份表示为导出创建的 Google Cloud 服务帐号。在您授予此身份对目标主题的发布访问权限之前,从此接收器导出日志条目的操作将会失败。如需了解详情,请参阅下一部分或授予资源访问权限文档。

为 Pub/Sub 主题设置 IAM 政策权限

通过将服务帐号 gcp-logging-export-pubsub-si@logging-oyour-organization.iam.gserviceaccount.com 添加到 pubsub.googleapis.com/projects/compliance-logging-export/topics/logs-export-topic 主题并为其设置 Pub/Sub Publisher 权限,可授予该服务帐号向该主题发布消息的权限。添加这些权限之前,接收器导出将失败。

如需向服务帐号添加权限,请按以下步骤操作:

  1. 在 Cloud Console 中,打开 Cloud Pub/Sub 主题页面:

    转到“主题”页面

  2. 选择主题名称。

  3. 点击显示信息面板,然后选择 Pub/Sub Publisher 权限。

    IAM 政策权限 - Pub/Sub Publisher。

使用此过滤条件创建日志记录导出后,日志文件将开始填充到已配置的项目的 Pub/Sub 主题中。您可以使用 Cloud Monitoring 中的 Metrics Explorer 确认主题正在接收消息。使用以下资源类型和指标,观察短时间内的消息发送操作数。如果您已正确配置导出,则将在图表上看到高于 0 的活动,如此屏幕截图所示。

  • 资源类型:pubsub_topic
  • 指标:pubsub/topic/send_message_operation_count

活动图表。

设置 Splunk 数据提取

选项 A:使用 Pub/Sub 将日志流式传输到 Splunk Dataflow

您可以使用 Pub/Sub to Splunk Dataflow 模板创建一个 Dataflow 作业,该作业从先前创建的 Pub/Sub 订阅拉取消息,将负载转换为 Splunk HEC 事件格式,并将其转发到 Splunk HEC。因此,它需要 Splunk HEC 端点网址和 HEC 令牌,并且可以从 Dataflow 作业的网络访问该网址。按照配置 Splunk HEC 说明执行操作(如果尚未配置)。

除了在多个工作器之间并行处理和分配工作负载之外,Dataflow 服务还管理这些资源,并根据 Pub/Sub 中的现有消息积压以及当前工作器的资源利用率自动调节工作器数量。

在容错方面,如果下游端点出现故障或者存在网络连接问题,则 Pub/Sub to Splunk Dataflow 模板会采用指数退避算法重试连接到 Splunk HEC。如果出现消息处理错误以及为了确保不会丢失数据,这些消息将转发到另一个 Pub/Sub 死信主题,该主题必须在运行此 Dataflow 模板之前创建。

将 Splunk HEC 端点配置为接收数据后,可通过 Cloud Console、gcloud 命令行工具或 Dataflow API 执行 Pub/Sub to Splunk Dataflow 流水线。请注意,在将消息负载转移到 Splunk 之前,您可以选择性地应用 JavaScript 用户定义函数。

以下 gcloud 命令示例在输入 Pub/Sub 订阅 logs-export-subscription 上运行最新版本的 Pub/Sub to Splunk Dataflow 模板。将 your-splunk-hec-tokenyour-splunk-hec-url 替换为您的 Splunk HEC 令牌和端点,例如 https://splunk-hec-host:8088

JOB_NAME=pubsub-to-splunk-$USER-`date +"%Y%m%d-%H%M%S%z"`
gcloud dataflow jobs run $JOB_NAME \
    --gcs-location gs://dataflow-templates/latest/Cloud_PubSub_to_Splunk \
    --max-workers 2 \
    --parameters \
  inputSubscription=projects/compliance-logging-export/subscriptions/logs-export-subscription,\
  token=your-splunk-hec-token,\
  url=your-splunk-hec-url,\
  outputDeadletterTopic=projects/compliance-logging-export/topics/splunk-pubsub-deadletter,\
  batchCount=10,\
  parallelism=8

可以使用 Cloud Monitoring 中的 Metrics Explorer 来确认 Dataflow 流水线是否已成功将消息发送到 Splunk。使用以下资源类型和指标,观察短时间内成功的出站事件数量和可能失败的事件数量。

  • 资源类型:dataflow_job
  • 指标 1:custom.googleapis.com/dataflow/outbound-successful-events
  • 指标 1:custom.googleapis.com/dataflow/outbound-failed-events

如果您已正确配置模板,则可在图表上看到高于 0 的活动,如此屏幕截图所示。

出站事件的活动图表。

选项 B:使用 Google Cloud Platform 的 Splunk 插件拉取日志

Google Cloud Platform 的 Splunk 插件使用 Pub/Sub 主题和 Google Cloud 中的服务帐号。该服务帐号用于生成私钥,插件使用该私钥来建立 Pub/Sub 订阅并从日志记录导出主题中提取消息。需要相应的 IAM 权限才能允许该服务帐号创建订阅并列出包含该订阅的 Pub/Sub 项目中的组件。

按照设置 Google Cloud Platform 的 Splunk 插件的相关说明操作。为在 Splunk 插件说明中创建的服务帐号授予 roles/pubsub.viewerroles/pubsub.subscriber Pub/Sub IAM 权限

配置插件后,来自日志记录导出的 Pub/Sub 消息将显示在 Splunk 中。

通过使用 Cloud Monitoring 中的 Metrics Explorer,您可以确认 Splunk 插件所使用的订阅是否正在拉取消息。使用以下资源类型和指标,观察短时间内的消息拉取操作数。

  • 资源类型:pubsub_subscription
  • 指标:pubsub/subscription/pull_message_operation_count

如果您已正确配置导出,则会在图表上看到高于 0 的活动,如此屏幕截图所示。

拉取操作的活动图表。

使用导出的日志

将导出的日志提取到 Splunk 后,您可以像使用任何其他数据源一样使用 Splunk 来执行以下任务:

  • 搜索日志。
  • 关联复杂事件。
  • 使用信息中心可视化结果。

后续步骤