上次更新时间:2020 年 11 月 12 日
我想在 AWS Fargate 上将一个 Splunk 日志驱动程序与一个 Amazon Elastic Container Service (Amazon ECS) 任务结合使用。
您可以在 Fargate 中使用来自 Docker 的 Splunk 日志驱动程序(也称为“日志记录驱动程序”),以将您的容器日志发送到 Enterprise Splunk 日志收集器或 Splunk Cloud。有关更多信息,请参阅 Docker 网站上的 Splunk 日志记录驱动程序 。
解决方法 设置 Splunk Cloud 环境以接收 Fargate 日志1. 使用 Free Splunk 选项创建一个 Splunk Cloud 账户。如果您已经拥有 Splunk Cloud 账户,请跳至第 2 步。有关更多信息,请参阅 Splunk 网站上的 Free Splunk。
2. 登录您的 Splunk Cloud 账户。
3.在导航窗格中,选择 Settings(设置)。
4. 在 DATA(数据)部分中,选择 Data inputs(数据输入)。
5. 在 Local inputs(本地输入)部分的 Actions(操作)列下,选择 Add new(新添加)。
注意:您会创建一个 HTTP 事件收集器 (HEC) 令牌,以便通过 HTTP 和安全 HTTP (HTTPS) 协议将数据和应用程序事件发送到 Splunk 部署。
6. 对于 Name(名称),输入令牌的名称,然后选择 Next(下一步)。
7. 依次完成设置向导中剩余页面的操作,然后选择 Submit(提交)以创建 HEC 令牌。
注意:您可以保留默认值不变。
8. 使用 curl 或 Docker 测试新令牌。
注意:默认情况下,Splunk 会侦听端口 8088 并接受 /services/collector 路径上的事件。
使用 curl:
curl -k https://prd-p-9l79p.splunkcloud.com:8088/services/collector -H "Authorization: Splunk splunk-token" -d '{"event": "Put this message in Splunk"}'
注意:请将 splunk-token 替换为您之前创建的 HEC 令牌。
使用 Docker:
docker run --publish 80:80 --log-driver=splunk --log-opt splunk-token=splunk token --log-opt splunk-url=https://prd-p-u7z1u.splunkcloud.com:8088 --log-opt splunk-insecureskipverify=true --log-opt splunk-sourcetype=docker-test --log-opt splunk-index=main nginx
注意:请将 splunk-token 替换为您之前创建的 HEC 令牌。
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
要将您的 HEC 令牌存储在 AWS Secrets Manager 中,以便 Fargate 能够安全地使用您的令牌,请运行以下命令:
aws secretsmanager create-secret --name splunk-token --secret-string token-value
注意:请将 splunk-token 替换为您的 HEC 令牌。请将 token-value 替换为您的令牌值。
配置一个具有密钥访问权限的任务执行角色1.打开 AWS Identity and Access Management (IAM) 控制台。
2. 从导航窗格中,选择角色。
3. 从角色列表中,搜索并选择 ecsTaskExecutionRole。
4. 选择添加内联策略。
5. 选择编辑器的 JSON 选项卡,然后输入以下策略:
{
"Version": "2012-10-17",
"Statement": ,
"Resource":
}
]
}
注意:如果您使用自定义的 AWS Key Management Service (AWS KMS) 密钥来加密您的密钥,则必须为您的 KMS 密钥提供 KMS:Decrypt 权限和 Amazon 资源名称 (ARN)。
6.选择查看策略。
7.在名称字段中输入策略名称。
8.选择 Create policy(创建策略)。
在 Fargate 上为您的 Amazon ECS 任务配置任务定义1.打开 Amazon ECS 控制台。
2.在导航窗格中的 Amazon ECS 部分中,选择 Task Definitions(任务定义)。
3.选择 Create new Task Definition(创建新任务定义)。
4.选择 Fargate,然后选择 Next step(下一步)。
5.在 Configure task and container definitions(配置任务和容器定义)部分,对于 Task definition name(任务定义名称),输入任务定义的名称。
6.对于 Task Role(任务角色),选择您之前配置的角色。
7.在 Task size(任务大小)部分,对于 Task memory (GB)(任务内存 (GB))和 Task CPU (vCPU)(任务 CPU (vCPU)),输入您任务的相应值。
8.在 Container Definitions(容器定义)部分,选择 Add container(添加容器)。
9.根据您的容器需求选择适当的选项。
10.在 STORAGE AND LOGGING(存储和日志记录)部分,清除 Log configuration(日志配置)复选框。
11.对于 Log driver(日志驱动程序),选择 splunk。
12.对于 Log options(日志选项)中的键和值选项,请输入以下内容:
键关键:splunk-url
值:您的 splunk 终端节点(例如:https://prd-p-9l79p.splunkcloud.com:8088/)
键:splunk-insecureskipverify
值:True
键:splunk-token
值:您之前创建的秘密 ARN
13.选择 Add(添加)。
注意:有关 Splunk 的代码和配置的更多详细信息,请参阅 GitHub 上的日志驱动程序代码和 Docker 网站上的 Splunk 选项。
14.要创建任务定义,请选择 Create(创建)。
15.创建一个 Amazon ECS 服务或运行一个使用您之前创建的任务定义的任务。
在 Splunk Cloud 中检查日志之前,请确保您的任务正在运行。
注意:默认情况下,您的日志位于 main 索引中的 splunk-index,因为您未在日志配置中指定 splunk-index。
1.连接到您的 Splunk Cloud 账户。
2. 在导航窗格中,选择 Search(搜索)。
3. 在搜索框中输入 index="main"。
这时您可以在 Splunk 日志收集器中看到您的日志。
注意:您可以按照上述步骤在 Amazon ECS 中为 Amazon Elastic Compute Cloud (Amazon EC2) 启动类型创建任务定义。然后,您可以使用来自您的任何 ECS 任务的 Splunk 日志驱动程序将日志发送到 Splunk 日志收集器。