使用您自己的Telegraf
作者:David Flanagan / / 用例,开发者,产品
2019年6月6日
导航至
我有幸告诉人们我在一家真正的开源公司工作。我这是什么意思?
InfluxData代码的90%是开源的,其余10%是我们数据库InfluxDB的企业级扩展。这10%推动了公司及其对开源的承诺。
我们对开源的承诺不止于此。我们还积极鼓励、维护和支持将我们的产品与其他产品集成的贡献,无论是开源的还是其他类型的;即使是那些可能被认为是我们的“竞争对手”的产品。然而,我们并不这样看待。我们欢迎并鼓励围绕时序、监控和警报建立开放和支持的生态系统。
当然,这也有代价。虽然Telegraf支持读取和写入200多个软件组件,例如DataDog、Elasticsearch、Kafka、MongoDB、OpenTSDB、Prometheus、Wavefront等,但这也有代价……字节的代价。
<figcaption> 插件无处不在</figcaption>
目前,Telegraf的二进制文件大小为60MiB
(amd64二进制文件),244MiB
(Docker镜像),80MiB
 ;(Docker镜像Alpine)。
虽然不算庞大,但根据您对我们插件的用途,这也许会超出您的处理能力。随着我们越来越多的社区采用Kubernetes,接受像sidecars这样的模式,使用多个Telegraf实例的大小可能会成为问题。
介绍:自行携带Telegraf (BYOT)
BYOT是一个基于Docker的框架,用于构建包含自定义、精简的Telegraf二进制的Docker镜像;只包含您需要的插件。这不需要任何特殊配置。您只需提供您的Telegraf配置,就像平时一样。
这将导致镜像大小显著减小。让我们看看一个比较。下面是正常Telegraf镜像和Alpine变种的镜像大小。旁边是我构建的一个自定义Kubernetes镜像,它只包含以下插件
- 输入
- Prometheus
- 输出
- InfluxDB
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
telegraf 1.10 c14f9454c5aa 13 days ago 244MB
telegraf 1.10-alpine f6d6ea3f4972 4 days ago 80MB
rawkode/telegraf kubernetes 3437fe686f23 4 days ago 25.4MB
入门指南
我推荐的方法是在您的基础设施中的每个Telegraf配置提供Git仓库。假设我们想要构建一个包含以下插件的Telegraf
- 输入
- Docker
- 输出
- InfluxDB 2
配置Telegraf
首先,我们创建Telegraf配置。构建过程预期在构建上下文的根目录下有一个telegraf
目录。这个目录与任何其他系统的/etc/telegraf
目录没有什么不同。您可以使用单个文件telegraf.conf
,或者基于目录的方法telegraf.d
。为了简单起见,此示例使用单个文件。
[agent]
interval = "5s"
omit_hostname = true
[[inputs.docker]]
endpoint = "unix:///var/run/docker.sock"
[[outputs.influxdb_v2]]
urls = ["http://influxdb2:9999"]
token = "$INFLUXDB_2_TOKEN"
organization = "InfluxData"
bucket = "default"
接下来,您需要在您的仓库中添加一个Dockerfile
FROM rawkode/telegraf:byo AS build
FROM alpine:3.7 AS telegraf
COPY --from=build /etc/telegraf /etc/telegraf
COPY --from=build /go/src/github.com/influxdata/telegraf/telegraf /bin/telegraf
ENTRYPOINT [ "/bin/telegraf" ]
构建
这就完成了!让您的CI系统在每次提交和推送时自动构建此镜像到您的仓库,您就可以开始了。您可以使用build-arg
指定要构建的Telegraf版本。
docker image build --build-arg VERSION=1.10 -t my_telegraf
仅包含您所需插件的定制Telegraf,几分钟内完成!
它是如何工作的?
BYOT利用了Dockerfile中经常被遗忘的ONBUILD
指令。这允许我们定义延迟执行的指令,直到后续调用,例如您的docker image build
命令。您可以随意查看我的代码,或者查看我的示例仓库,以更好地理解它。
还有其他改进吗?
在我的初步测试中,这些测试并不广泛,我发现Telegraf的内存使用量大约是运行正常Telegraf二进制文件(仅启用4个插件:系统、cpu、mem、disk)的1/3(6MiB
与 12MiB
)。这可能只是巧合,我将在适当的时候发布更多结果。
接下来是什么
目前,BYOT支持根据您的配置自定义构建基于输入和输出插件的镜像。我计划很快添加对聚合器和处理器的支持,这将进一步减小我们的镜像大小。
感谢您的聆听。我很乐意知道您的想法,所以请在评论区或通过Twitter联系我。