如何在 Fargate 上将 Splunk 日志驱动程序与 Amazon ECS 任务结合使用?

上次更新时间: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 Secrets Manager 以使用您的 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": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue",
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>",
        "arn:aws:kms:<region>:<aws_account_id>:key/<key_id>"
      ]
    }
  ]
}

注意:如果您使用自定义的 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 中检查您的日志

在 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 日志收集器。  


这篇文章对您有帮助吗?


您是否需要账单或技术支持?