Splunk 集成 连接器 - AWS IoT Greengrass
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Splunk 集成 连接器

Splunk 集成连接器将数据从 Greengrass 设备发布到 Splunk。这样的话,您可以使用 Splunk 来监控和分析 Greengrass 核心环境,并对本地事件执行操作。连接器与 HTTP 事件收集器 (HEC) 集成。有关更多信息,请参阅 Splunk 文档中的 Splunk HTTP 事件收集器简介

此连接器接收关于 MQTT 主题的日志记录和事件数据,并按原样将数据发布到 Splunk API。

您可以使用该连接器支持行业方案,比如:

  • 操作员可以使用致动器和传感器的周期性数据(例如,温度、压力和水分读数)在值超出特定阈值时触发警报。

  • 开发人员使用从工业机械收集的数据来构建 ML 模型,以监控设备发现潜在问题。

此连接器具有以下版本。

版本

ARN

3

arn:aws:greengrass:区域::/connectors/SplunkIntegration/versions/3

2

arn:aws:greengrass:区域::/connectors/SplunkIntegration/versions/2

1

arn:aws:greengrass:区域::/connectors/SplunkIntegration/versions/1

有关版本更改的信息,请参阅更改日志

要求

此连接器具有以下要求:

Version 3
  • AWS IoT Greengrass Core 软件 v1.9.3 版或更高版本。AWS IoT Greengrass 必须配置为支持本地密钥,如密钥要求中所述。

    注意

    此要求包括允许访问您的 Secrets Manager 密钥。如果使用的是默认 Greengrass 服务角色,则Greengrass有权获得名称以 greengrass- 开头的密钥的值。

  • Python 版本 3.7 已安装在核心设备上并且已添加到 PATH 环境变量。

  • 必须在 Splunk 中启用 HTTP 事件收集器功能。有关更多信息,请参阅 Splunk 文档中的在 Splunk Web 中设置和使用 HTTP 事件收集器

  • AWS Secrets Manager 中的文本类型密钥,用于存储您的 Splunk HTTP 事件收集器令牌。有关更多信息,请参阅 Splunk 文档中的关于事件收集器令牌AWS Secrets Manager 用户指南 中的创建基本密钥

    注意

    要在 Secrets Manager 控制台中创建密钥,请在明文选项卡上输入您的令牌。不要加入引号或其他格式。在 API 中,将令牌指定为 SecretString 属性的值。

  • Greengrass 组中引用 Secrets Manager 密钥的密钥资源。有关更多信息,请参阅 将密钥部署到 AWS IoT Greengrass 核心

Versions 1 - 2
  • AWS IoT Greengrass Core 软件 v1.7 or later. AWS IoT Greengrass 必须配置为支持本地密钥,如密钥要求中所述。

    注意

    此要求包括允许访问您的 Secrets Manager 密钥。如果使用的是默认 Greengrass 服务角色,则Greengrass有权获得名称以 greengrass- 开头的密钥的值。

  • Python 版本 2.7 已安装在核心设备上并且已添加到 PATH 环境变量。

  • 必须在 Splunk 中启用 HTTP 事件收集器功能。有关更多信息,请参阅 Splunk 文档中的在 Splunk Web 中设置和使用 HTTP 事件收集器

  • AWS Secrets Manager 中的文本类型密钥,用于存储您的 Splunk HTTP 事件收集器令牌。有关更多信息,请参阅 Splunk 文档中的关于事件收集器令牌AWS Secrets Manager 用户指南 中的创建基本密钥

    注意

    要在 Secrets Manager 控制台中创建密钥,请在明文选项卡上输入您的令牌。不要加入引号或其他格式。在 API 中,将令牌指定为 SecretString 属性的值。

  • Greengrass 组中引用 Secrets Manager 密钥的密钥资源。有关更多信息,请参阅 将密钥部署到 AWS IoT Greengrass 核心

连接器参数

该连接器提供以下参数:

SplunkEndpoint

Splunk 实例的终端节点。该值必须包含协议、主机名和端口。

在 AWS IoT 控制台中显示名称:Splunk 终端节点

必需:true

类型:string

有效模式:^(http:\/\/|https:\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$

MemorySize

要分配给此连接器的内存量(以 KB 为单位)。

在 AWS IoT 控制台中显示名称:Memory size (内存大小)

必需:true

类型:string

有效模式:^[0-9]+$

SplunkQueueSize

提交或丢弃项目前可在内存中保存的最大项目数。达到该限制后,队列中最早的项目将被替换为较新项目。该限制通常适用于无 Internet 连接的情况。

在 AWS IoT 控制台中显示名称:可保留的最大项目数

必需:true

类型:string

有效模式:^[0-9]+$

SplunkFlushIntervalSeconds

将收到的数据发布到 Splunk HEC 的时间间隔(以秒为单位)。最大值为 900。要将连接器配置为一收到项目便发布(而不进行批处理),请指定 0。

在 AWS IoT 控制台中显示名称:Splunk 发布时间间隔

必需:true

类型:string

有效模式:[0-9]|[1-9]\d|[1-9]\d\d|900

SplunkTokenSecretArn

AWS Secrets Manager 中的密钥,用于存储 Splunk 令牌。这必须是文本类型密钥。

在 AWS IoT 控制台中显示名称:Splunk 身份验证令牌密钥的 ARN

必需:true

类型:string

有效模式:arn:aws:secretsmanager:[a-z]{2}-[a-z]+-\d{1}:\d{12}?:secret:[a-zA-Z0-9-_]+-[a-zA-Z0-9-_]+

SplunkTokenSecretArn-ResourceId

Greengrass 组中引用 Splunk 密钥的密钥资源。

在 AWS IoT 控制台中显示名称:Splunk 身份验证令牌资源

必需:true

类型:string

有效模式:.+

SplunkCustomCALocation

Splunk 的自定义证书颁发机构 (CA) 的文件路径(例如,/etc/ssl/certs/splunk.crt)。

在 AWS IoT 控制台中显示名称:Splunk 自定义证书颁发机构位置

必需:false

类型:string

有效模式:^$|/.*

创建连接器示例 (AWS CLI)

以下 CLI 命令创建一个 ConnectorDefinition,其初始版本包含 Splunk 集成连接器。

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MySplunkIntegrationConnector", "ConnectorArn": "arn:aws:greengrass:区域::/connectors/SplunkIntegration/versions/3", "Parameters": { "SplunkEndpoint": "https://myinstance.cloud.splunk.com:8088", "MemorySize": 200000, "SplunkQueueSize": 10000, "SplunkFlushIntervalSeconds": 5, "SplunkTokenSecretArn":"arn:aws-cn:secretsmanager:region:account-id:secret:greengrass-secret-hash", "SplunkTokenSecretArn-ResourceId": "MySplunkResource" } } ] }'
注意

该连接器中的 Lambda 函数具有很长的生命周期。

在 AWS IoT Greengrass 控制台 中,您可以从该组的 Connectors (连接器)页面添加一个连接器。有关更多信息,请参阅 Greengrass 连接器入门(控制台)

输入数据

此连接器接受关于 MQTT 主题的日志记录和事件数据,并按原样将收到的数据发布到 Splunk API。输入消息必须采用 JSON 格式。

订阅中的主题筛选条件

splunk/logs/put

消息属性
request

要发送到 Splunk API 的事件数据。事件必须满足 services/collector API 的规范。

必需:true

类型:object。只有 event 属性是必需的。

id

请求的任意 ID。该属性用于将输入请求映射到输出状态。

必需:false

类型:string

限制

使用该连接器时,Splunk API 施加的所有限制均适用。有关更多信息,请参阅 services/collector

示例输入
{ "request": { "event": "some event", "fields": { "severity": "INFO", "category": [ "value1", "value2" ] } }, "id": "request123" }

输出数据

此连接器发布关于两个主题的输出数据:

  • 有关 splunk/logs/put/status 主题的状态信息。

  • 错误位于 splunk/logs/put/error 主题上。

主题筛选条件:splunk/logs/put/status

使用此主题侦听请求的状态。每当连接器向 Splunk API 发送一批收到的数据时,它就会发布一个包含成功请求和失败请求的 ID 列表。

输出示例
{ "response": { "succeeded": [ "request123", ... ], "failed": [ "request789", ... ] } }
主题筛选条件:splunk/logs/put/error

使用此主题侦听连接器中的错误。error_message 属性描述处理请求时遇到的错误或超时。

输出示例
{ "response": { "error": "UnauthorizedException", "error_message": "invalid splunk token", "status": "fail" } }
注意

如果连接器检测到可重试的错误(例如,连接错误),它将在下一个批处理中重试发布操作。

示例用法

使用以下概括步骤设置可用于尝试连接器的示例 Python 3.7 Lambda 函数。

注意

连接器入门(控制台)连接器入门 (CLI) 主题包含详细步骤,说明如何配置和部署示例 Twilio 通知连接器。

 

  1. 确保满足连接器的要求

  2. 创建并发布将输入数据发送到连接器的 Lambda 函数。

    示例代码保存为 PY 文件。 下载并解压缩 适用于 Python 的 AWS IoT Greengrass Core 开发工具包。然后,创建一个 zip 包,其中在根级别包含 PY 文件和 greengrasssdk 文件夹。此 zip 包是您上传到 AWS Lambda 的部署包。

    创建 Python 3.7 Lambda 函数后,发布函数版本并创建别名。

  3. 配置 Greengrass 组。

    1. 通过 Lambda 函数的别名添加此函数(推荐)。将 Lambda 生命周期配置为长时间生存(或在 CLI 中设置为 "Pinned": true)。

    2. 添加所需的密钥资源并授予对 Lambda 函数的读取访问权限。

    3. 添加连接器并配置其参数

    4. 添加允许连接器接收输入数据并针对支持的主题筛选条件发送输出数据的订阅。

      • 将 Lambda 函数设置为源,将连接器设置为目标,并使用支持的输入主题筛选条件。

      • 将连接器设置为源,将 AWS IoT Core 设置为目标,并使用支持的输出主题筛选条件。您可以使用此订阅查看 AWS IoT 控制台 中的状态消息。

  4. 部署组。

  5. 在 AWS IoT 控制台 中,在 Test (测试) 页面上,订阅输出数据主题以查看连接器中的状态消息。示例 Lambda 函数是长时间生存的,并且在部署组后立即开始发送消息。

    完成测试后,您可以将 Lambda 生命周期设置为按需(或在 CLI 中设置为 "Pinned": false )并部署组。这会阻止函数发送消息。

Ejemplo

以下是 Lambda 功能将输入消息发送到连接器的示例。

import greengrasssdk import time import json iot_client = greengrasssdk.client('iot-data') send_topic = 'splunk/logs/put' def create_request_with_all_fields(): return { "request": { "event": "Access log test message." }, "id" : "req_123" } def publish_basic_message(): messageToPublish = create_request_with_all_fields() print("Message To Publish: ", messageToPublish) iot_client.publish(topic=send_topic, payload=json.dumps(messageToPublish)) publish_basic_message() def lambda_handler(event, context): return

许可证

此连接器按照 Greengrass 核心软件许可协议发布。

Changelog

下表描述了连接器每个版本中所做的更改。

版本

更改

3

已将 Lambda 运行时升级到 Python 3.7,这会更改运行时要求。

2

进行了修复,以减少过多的日志记录。

1

首次发布。

Greengrass 组一次只能包含一个版本的连接器。有关升级连接器版本的信息,请参阅升级连接器版本

另请参阅