使用您自己的Telegraf

导航至

我有幸告诉人们我在一家真正的开源公司工作。我这是什么意思?

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(6MiB12MiB)。这可能只是巧合,我将在适当的时候发布更多结果。

接下来是什么

目前,BYOT支持根据您的配置自定义构建基于输入和输出插件的镜像。我计划很快添加对聚合器和处理器的支持,这将进一步减小我们的镜像大小。

感谢您的聆听。我很乐意知道您的想法,所以请在评论区或通过Twitter联系我。