有没有办法让Docker Splunk驱动程序在AWS EC2容器服务(ECS)上运行时将EC2实例Id发送到Splunk?

我的Docker容器由AWS上的ECS(EC2容器服务)pipe理。 ECS集群决定容器将运行在哪个EC2实例上。

我发现有一种方法可以configurationSplunk驱动程序将Docker容器Id和/或容器名称与每个日志条目一起发送到Splunk,但是我找不到发送EC2实例Id的方式。 这似乎没有variables(请参阅https://docs.docker.com/engine/admin/logging/log_tags )。

对于fluentd这个类似的问题涵盖了通过日志选项设置标签的细节。

在ECS上,您可以将自定义的“日志选项”添加到任务或服务的“日志configuration”中:

key = tag
value = {{ index .ContainerLabels "com.amazonaws.ecs.container-name" }}

实例ID

它看起来并不像ECS发送EC2实例ID到Docker ,ECS很难从主机环境中填充任何东西 。

主机名在Docker中可以通过{{ .Hostname }}作为--log-opt tag使用,因此将主机名设置为实例ID并使用它可能是最简单的。

实例ID可通过http:// instance-data / latest / meta-data / instance-id获取

您可以使用用户数据脚本在生成时设置主机名,也可以使用启动脚本在每次实例引导时设置主机名。

 #!/bin/bash set -ue INSTANCE_ID=$(curl -s --retry 5 --retry-delay 1 http://instance-data/latest/meta-data/instance-id) # Set the network hostname sed -ri "s/^HOSTNAME=.*/HOSTNAME=$INSTANCE_ID/" /etc/sysconfig/network # Set the local host lookup if ! grep -Eq "127.0.0.1.*$INSTANCE_ID" /etc/hosts; then sed -ri "s/^(127.0.0.1.*)/\1 $INSTANCE_ID/" /etc/hosts fi 

我认为如果您在每个EC2实例上运行本地splunk转发器并在其中添加标记或字段,则可以执行类似的操作。