首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法让Docker Splunk驱动程序在亚马逊EC2容器服务上运行时将EC2实例Id发送给Splunk?

问有没有办法让Docker Splunk驱动程序在亚马逊EC2容器服务上运行时将EC2实例Id发送给Splunk?
EN

Stack Overflow用户
提问于 2016-08-30 13:39:26
回答 1查看 548关注 0票数 1

我的EC2容器由亚马逊网络服务上的ECS ( Docker容器服务)管理。ECS集群决定容器将在哪个EC2实例上运行。

我看到有一种方法可以配置Splunk驱动程序将Docker容器Id和/或容器名称与每个日志条目一起发送到Splunk,但我找不到发送EC2实例Id的方法。对于这一点似乎没有一个变量(参见https://docs.docker.com/engine/admin/logging/log_tags)。

EN

回答 1

Stack Overflow用户

发布于 2016-08-30 16:46:34

此similar question for fluentd介绍了通过日志选项设置标签的详细信息。

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

密钥= tag

值= {{ index .ContainerLabels "com.amazonaws.ecs.container-name" }}

实例ID

看起来ECS不会将EC2实例ID发送给Docker和it's really hard in ECS to populate anything from the hosts environment。

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

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

您可以使用user-data脚本在构建时设置主机名,也可以使用启动脚本在每次实例引导时设置主机名。

代码语言:javascript
复制
#!/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实例上运行一个local splunk forwarder并在其中添加标记或字段,我认为您可以执行类似的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39219486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档