有没有办法让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转发器并在其中添加标记或字段,则可以执行类似的操作。
- Elastic Beanstalk上的Docker连接到上游时connect()失败(111:连接被拒绝)
- jenkins部署到弹性beanstalk
- Angular 2应用程序部署在AWS上运行的Docker容器中
- 运行存储在EC2容器实例中的Docker镜像
- <CoreOS,cloud-config>如何在Docker Private Registry准备好之前等待?
- 在AWS上远程debuggingNodeJS容器
- Docker通过Ansible拉长意外时间
- 在AWS ECS容器上注册新用户时,Laravel 5.4.36无法正常工作
- 什么触发Elastic Beanstalk拉入更新的Docker镜像