

终止支持通知：2026 年 10 月 7 日， AWS 将停止对的支持。 AWS IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 AWS IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Splunk 集成连接器
<a name="splunk-connector"></a>

**警告**  <a name="connectors-extended-life-phase-warning"></a>
此连接器已进入*生命周期延长阶段*， AWS IoT Greengrass 不会发布更新来提供功能、现有功能增强、安全补丁或错误修复。有关更多信息，请参阅 [AWS IoT Greengrass Version 1 维护政策](maintenance-policy.md)。

Splunk 集成[连接器](connectors.md)将数据从 Greengrass 设备发布到 Splunk。这样的话，您可以使用 Splunk 来监控和分析 Greengrass 核心环境，并对本地事件执行操作。连接器与 HTTP 事件收集器 (HEC) 集成。有关更多信息，请参阅 Splunk 文档中的 [Splunk HTTP 事件收集器简介](https://dev.splunk.com/view/event-collector/SP-CAAAE6M)。

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

您可以使用该连接器支持行业方案，比如：
+ 操作员可以使用致动器和传感器的周期性数据（例如，温度、压力和水分读数）在值超出特定阈值时启动警报。
+ 开发人员使用从工业机械收集的数据来构建 ML 模型，以监控设备发现潜在问题。

此连接器具有以下版本。


| 版本 | ARN | 
| --- | --- | 
| 4 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/1` | 

有关版本更改的信息，请参阅[更改日志](#splunk-connector-changelog)。

## 要求
<a name="splunk-connector-req"></a>

此连接器具有以下要求：

------
#### [ Version 3 - 4 ]
+ <a name="conn-req-ggc-v1.9.3-secrets"></a>AWS IoT Greengrass 核心软件 v1.9.3 或更高版本。 AWS IoT Greengrass 必须配置为支持本地密钥，如[密钥要求](secrets.md#secrets-reqs)中所述。
**注意**  
此要求包括允许访问您的 Secrets Manager 密钥。如果使用的是默认 Greengrass 服务角色，则 Greengrass 有权获得名称以 *greengrass-* 开头的密钥的值。
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) 版本 3.7 或 3.8 已安装在核心设备上，并已添加到 PATH 环境变量中。
**注意**  <a name="use-runtime-py3.8"></a>
要使用 Python 3.8，请运行以下命令来创建从默认 Python 3.7 安装文件夹到已安装的 Python 3.8 二进制文件的符号链接。  

  ```
  sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7
  ```
这会将设备配置为满足 AWS IoT Greengrass的 Python 要求。
+ <a name="conn-splunk-req-http-event-collector"></a>必须在 Splunk 中启用 HTTP 事件收集器功能。有关更多信息，请参阅 Splunk 文档中的[在 Splunk Web 中设置和使用 HTTP 事件收集器](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector)。
+ <a name="conn-splunk-req-secret"></a>用于存储您的 Splunk HTTP 事件收集器令牌的文本类型密钥。 AWS Secrets Manager 有关更多信息，请参阅 Splunk 文档中的[关于事件收集器令牌](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector#About_Event_Collector_tokens)和*AWS Secrets Manager 用户指南*中的[创建基本密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)。
**注意**  
要在 Secrets Manager 控制台中创建密钥，请在**明文**选项卡上输入您的令牌。请勿包含引号或其他格式。在 API 中，将令牌指定为 `SecretString` 属性的值。
+ Greengrass 组中引用 Secrets Manager 密钥的密钥资源。有关更多信息，请参阅 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0-secrets"></a>AWS IoT Greengrass 核心软件 v1.7 或更高版本。 AWS IoT Greengrass 必须配置为支持本地密钥，如[密钥要求](secrets.md#secrets-reqs)中所述。
**注意**  
此要求包括允许访问您的 Secrets Manager 密钥。如果使用的是默认 Greengrass 服务角色，则 Greengrass 有权获得名称以 *greengrass-* 开头的密钥的值。
+ [Python](https://www.python.org/) 版本 2.7 已安装在核心设备上，并已添加到 PATH 环境变量中。
+ <a name="conn-splunk-req-http-event-collector"></a>必须在 Splunk 中启用 HTTP 事件收集器功能。有关更多信息，请参阅 Splunk 文档中的[在 Splunk Web 中设置和使用 HTTP 事件收集器](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector)。
+ <a name="conn-splunk-req-secret"></a>用于存储您的 Splunk HTTP 事件收集器令牌的文本类型密钥。 AWS Secrets Manager 有关更多信息，请参阅 Splunk 文档中的[关于事件收集器令牌](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector#About_Event_Collector_tokens)和*AWS Secrets Manager 用户指南*中的[创建基本密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)。
**注意**  
要在 Secrets Manager 控制台中创建密钥，请在**明文**选项卡上输入您的令牌。请勿包含引号或其他格式。在 API 中，将令牌指定为 `SecretString` 属性的值。
+ Greengrass 组中引用 Secrets Manager 密钥的密钥资源。有关更多信息，请参阅 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。

------

## 连接器参数
<a name="splunk-connector-param"></a>

该连接器提供以下参数：

------
#### [ Version 4 ]

`SplunkEndpoint`  <a name="splunk-SplunkEndpoint"></a>
Splunk 实例的终端节点。该值必须包含协议、主机名和端口。  
 AWS IoT 控制台中的显示名称：**Splunk 端点**  
必需：`true`  
类型：`string`  
有效模式：`^(http:\/\/|https:\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$`

`MemorySize`  <a name="splunk-MemorySize"></a>
要分配给此连接器的内存量（以 KB 为单位）。  
 AWS IoT 控制台中的显示名称：**内存大小**  
必需：`true`  
类型：`string`  
有效模式：`^[0-9]+$`

`SplunkQueueSize`  <a name="splunk-SplunkQueueSize"></a>
提交或丢弃项目前可在内存中保存的最大项目数。达到该限制后，队列中最早的项目将被替换为较新项目。该限制通常适用于无 Internet 连接的情况。  
 AWS IoT 控制台中的显示名称：**要保留的最大项目数**  
必需：`true`  
类型：`string`  
有效模式：`^[0-9]+$`

`SplunkFlushIntervalSeconds`  <a name="splunk-SplunkFlushIntervalSeconds"></a>
将收到的数据发布到 Splunk HEC 的时间间隔（以秒为单位）。最大值为 900。要将连接器配置为一收到项目便发布（而不进行批处理），请指定 0。  
 AWS IoT 控制台中的显示名称：**Splunk 发布间隔**  
必需：`true`  
类型：`string`  
有效模式：`[0-9]|[1-9]\d|[1-9]\d\d|900`

`SplunkTokenSecretArn`  <a name="splunk-SplunkTokenSecretArn"></a>
里 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`  <a name="splunk-SplunkTokenSecretArn-ResourceId"></a>
Greengrass 组中引用 Splunk 密钥的密钥资源。  
 AWS IoT 控制台中的显示名称：**Splunk 身份验证令牌资源**  
必需：`true`  
类型：`string`  
有效模式：`.+`

`SplunkCustomCALocation`  <a name="splunk-SplunkCustomCALocation"></a>
Splunk 的自定义证书颁发机构 (CA) 的文件路径（例如，`/etc/ssl/certs/splunk.crt`）。  
 AWS IoT 控制台中的显示名称：**Splunk 自定义证书颁发机构位置**  
必需：`false`  
类型：`string`  
有效模式：`^$|/.*`

`IsolationMode`  <a name="IsolationMode"></a>
此连接器的[容器化](connectors.md#connector-containerization)模式。默认值为`GreengrassContainer`，这意味着连接器在 AWS IoT Greengrass 容器内的隔离运行时环境中运行。  
组的默认容器化设置不适用于连接器。
 AWS IoT 控制台中的显示名称：**容器隔离模式**  
必需：`false`  
类型：`string`  
有效值：`GreengrassContainer` 或 `NoContainer`  
有效模式：`^NoContainer$|^GreengrassContainer$`

------
#### [ Version 1 - 3 ]

`SplunkEndpoint`  <a name="splunk-SplunkEndpoint"></a>
Splunk 实例的终端节点。该值必须包含协议、主机名和端口。  
 AWS IoT 控制台中的显示名称：**Splunk 端点**  
必需：`true`  
类型：`string`  
有效模式：`^(http:\/\/|https:\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$`

`MemorySize`  <a name="splunk-MemorySize"></a>
要分配给此连接器的内存量（以 KB 为单位）。  
 AWS IoT 控制台中的显示名称：**内存大小**  
必需：`true`  
类型：`string`  
有效模式：`^[0-9]+$`

`SplunkQueueSize`  <a name="splunk-SplunkQueueSize"></a>
提交或丢弃项目前可在内存中保存的最大项目数。达到该限制后，队列中最早的项目将被替换为较新项目。该限制通常适用于无 Internet 连接的情况。  
 AWS IoT 控制台中的显示名称：**要保留的最大项目数**  
必需：`true`  
类型：`string`  
有效模式：`^[0-9]+$`

`SplunkFlushIntervalSeconds`  <a name="splunk-SplunkFlushIntervalSeconds"></a>
将收到的数据发布到 Splunk HEC 的时间间隔（以秒为单位）。最大值为 900。要将连接器配置为一收到项目便发布（而不进行批处理），请指定 0。  
 AWS IoT 控制台中的显示名称：**Splunk 发布间隔**  
必需：`true`  
类型：`string`  
有效模式：`[0-9]|[1-9]\d|[1-9]\d\d|900`

`SplunkTokenSecretArn`  <a name="splunk-SplunkTokenSecretArn"></a>
里 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`  <a name="splunk-SplunkTokenSecretArn-ResourceId"></a>
Greengrass 组中引用 Splunk 密钥的密钥资源。  
 AWS IoT 控制台中的显示名称：**Splunk 身份验证令牌资源**  
必需：`true`  
类型：`string`  
有效模式：`.+`

`SplunkCustomCALocation`  <a name="splunk-SplunkCustomCALocation"></a>
Splunk 的自定义证书颁发机构 (CA) 的文件路径（例如，`/etc/ssl/certs/splunk.crt`）。  
 AWS IoT 控制台中的显示名称：**Splunk 自定义证书颁发机构位置**  
必需：`false`  
类型：`string`  
有效模式：`^$|/.*`

------

### 创建连接器示例 (AWS CLI)
<a name="splunk-connector-create"></a>

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

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

**注意**  
此连接器中的 Lambda 函数的生命周期[很长](lambda-functions.md#lambda-lifecycle)。

在 AWS IoT Greengrass 控制台中，您可以从群组的 “连接器” 页面添加**连接器**。有关更多信息，请参阅 [Greengrass 连接器入门（控制台）](connectors-console.md)。

## 输入数据
<a name="splunk-connector-data-input"></a>

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

<a name="topic-filter"></a>**订阅中的主题筛选条件**  
`splunk/logs/put`

**消息属性**    
`request`  
要发送到 Splunk API 的事件数据。事件必须满足 [services/collector](https://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTinput#services.2Fcollector) API 的规范。  
必需：`true`  
类型：`object`。只有 `event` 属性是必需的。  
`id`  
请求的任意 ID。该属性用于将输入请求映射到输出状态。  
必需：`false`  
类型：`string`

**限制**  
使用该连接器时，Splunk API 施加的所有限制均适用。有关更多信息，请参阅 [services/collector](https://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTinput#services.2Fcollector)。

**示例输入**  

```
{
    "request": {
        "event": "some event",
        "fields": {
            "severity": "INFO",
            "category": [
                "value1",
                "value2"
            ]
        }
    },
    "id": "request123"
}
```

## 输出数据
<a name="splunk-connector-data-output"></a>

此连接器发布关于两个主题的输出数据：
+ 有关 `splunk/logs/put/status` 主题的状态信息。
+ 错误位于 `splunk/logs/put/error` 主题上。

**主题筛选条件**：`splunk/logs/put/status`  
使用此主题侦听请求的状态。每次连接器向 Splunk API 发送一批接收到的数据时，都会发布成功和失败 IDs 的请求列表。    
**示例输出**  

```
{
    "response": {
        "succeeded": [
            "request123",
            ...
        ],
        "failed": [
            "request789",
            ...
        ]
    }
}
```

**主题筛选条件**：`splunk/logs/put/error`  
使用此主题侦听连接器中的错误。`error_message` 属性描述处理请求时遇到的错误或超时。    
**示例输出**  

```
{
    "response": {
        "error": "UnauthorizedException",
        "error_message": "invalid splunk token",
        "status": "fail"
    }
}
```
如果连接器检测到可重试的错误（如连接错误），它会在下一批次中重试发布。

## 用法示例
<a name="splunk-connector-usage"></a>

<a name="connectors-setup-intro"></a>使用以下概括步骤设置可用于尝试连接器的示例 Python 3.7 Lambda 函数。

**注意**  <a name="connectors-setup-get-started-topics"></a>
如果要使用其他 Python 运行时，您可以创建从 Python3.x 到 Python 3.7 的符号链接。
[连接器入门（控制台）](connectors-console.md) 和 [连接器入门 (CLI)](connectors-cli.md) 主题包含详细步骤，说明如何配置和部署示例 Twilio 通知连接器。

1. 确保满足连接器的[要求](#splunk-connector-req)。

1. <a name="connectors-setup-function"></a>创建并发布将输入数据发送到连接器的 Lambda 函数。

   将[示例代码](#splunk-connector-usage-example)保存为 PY 文件。<a name="connectors-setup-function-sdk"></a>下载并解压[适用于 Python 的AWS IoT Greengrass Core 软件开发工具包](lambda-functions.md#lambda-sdks-core)。然后，创建一个 zip 包，其中在根级别包含 PY 文件和 `greengrasssdk` 文件夹。此 zip 包是您上传到 AWS Lambda的部署包。

   <a name="connectors-setup-function-publish"></a>创建 Python 3.7 Lambda 函数后，请发布函数版本并创建别名。

1. 配置 Greengrass 组。

   1. <a name="connectors-setup-gg-function"></a>通过别名来添加 Lambda 函数（推荐）。将 Lambda 生命周期配置为长时间生存（或在 CLI 中设置为 `"Pinned": true`）。

   1. <a name="connectors-setup-secret-resource"></a>添加所需的密钥资源并授予对 Lambda 函数的读取访问权限。

   1. 添加连接器并配置其[参数](#splunk-connector-param)。

   1. 添加允许连接器接收[输入数据](#splunk-connector-data-input)并针对支持的主题筛选条件发送[输出数据](#splunk-connector-data-output)的订阅。
      + <a name="connectors-setup-subscription-input-data"></a>将 Lambda 函数设置为源，将连接器设置为目标，并使用支持的输入主题筛选条件。
      + <a name="connectors-setup-subscription-output-data"></a>将连接器设置为源，将 AWS IoT Core 设置为目标，并使用支持的输出主题筛选条件。您可以使用此订阅在 AWS IoT 控制台中查看状态消息。

1. <a name="connectors-setup-deploy-group"></a>部署组。

1. <a name="connectors-setup-test-sub"></a>在 AWS IoT 控制台的 “**测试**” 页面上，订阅输出数据主题以查看来自连接器的状态消息。示例 Lambda 函数是长时间生存的，并且在部署组后立即开始发送消息。

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

### 示例
<a name="splunk-connector-usage-example"></a>

以下示例 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
```

## 许可证
<a name="splunk-connector-license"></a>

该连接器在 [Greengrass Core 软件许可协议](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)下发布。

## 更改日志
<a name="splunk-connector-changelog"></a>

下表介绍每个版本连接器的更改。


| 版本 | 更改 | 
| --- | --- | 
| 4 | <a name="isolation-mode-changelog"></a>增加了用于配置连接器容器化模式的 `IsolationMode` 参数。 | 
| 3 | <a name="upgrade-runtime-py3.7"></a>已将 Lambda 运行时升级到 Python 3.7，这会更改运行时要求。 | 
| 2 | 进行了修复，以减少过多的日志记录。 | 
| 1 | 首次发布。  | 

<a name="one-conn-version"></a>Greengrass 组在一个时间上只能包含一个版本的连接器。有关升级连接器版本的信息，请参阅[升级连接器版本](connectors.md#upgrade-connector-versions)。

## 另请参阅
<a name="splunk-connector-see-also"></a>
+ [使用 Greengrass 连接器与服务和协议集成](connectors.md)
+ [Greengrass 连接器入门（控制台）](connectors-console.md)
+ [Greengrass 连接器入门 (CLI)](connectors-cli.md)