如何在 Docker 上设置 InfluxDB、Telegraf 和 Grafana:第 2 部分

导航至

本文由 InfluxAce Antoine Solnichkin 撰写,最初发表于 The New Stack,并经许可在此转载。向下滚动查看作者的照片和简介。

本教程介绍如何安装 Telegraf 插件作为 InfluxDB 1.7 和 Docker 的数据收集接口。

在本教程系列的第一部分中,我们介绍了在 Linux 实例的 Docker 上安装 InfluxDB 1.7 的步骤。在第 2 部分中,我们将介绍如何安装 Telegraf 插件作为 InfluxDB 1.7 和 Docker 的数据收集接口。

在 Docker 上安装 Telegraf

对于那些不熟悉 Telegraf 的人来说,它是一个插件驱动的代理,定期从各种不同的系统收集指标。这些指标被推送到 InfluxDB,之后可以在 Chronograf 或 Grafana 中进行分析。幸运的是,Telegraf 也属于官方 Docker 镜像。

在本节中,我们将配置 Telegraf 以收集我们的 Linux 主机(在本例中为 Debian 10,但它在基于 Ubuntu 的主机上以相同方式工作)上的系统指标。

为 InfluxDB 和 Docker 准备 Telegraf

与我们的 InfluxDB 设置类似,我们将为我们的主机创建一个 Telegraf 用户。这确保为我们未来的配置文件设置正确的权限。

$ sudo useradd -rs /bin/false telegraf

在您的 etc 目录中,为您的 Telegraf 配置文件创建一个新文件夹。

$ sudo mkdir -p /etc/telegraf

为 Telegraf 和 Docker 创建配置文件

同样,我们不必自己创建 Telegraf 配置文件。

Telegraf Docker 镜像的构建与 InfluxDB 镜像非常接近。

因此,它能够运行简单的 telegraf config 命令来动态生成配置。

Telegraf 配置文件具有以下默认值

  • 间隔:10 秒。Telegraf 将每 10 秒收集指标并将其发送到 InfluxDB。
  • Round_interval:true。代理将在 :00、:10 或 :(00 + n*interval) 时收集指标。
  • 默认情况下启用 InfluxDB 输出插件。
  • 默认情况下启用 CPU、disk、diskio、kernel、memory、processes、swap 和 system 输入插件。由于这些输入使用 /proc 挂载点来收集指标,我们将不得不在容器上重新映射卷。

要使用 Docker 创建 Telegraf 配置文件,请运行以下命令。

docker run --rm telegraf telegraf config | sudo tee /etc/telegraf/telegraf.conf < /dev/null

create a Telegraf configuration file using Docker

接下来,将正确的权限重新分配给您的 Telegraf 配置文件夹。这将确保只有 Telegraf 本身和 root 帐户能够写入配置文件。

$ sudo chown telegraf:telegraf /etc/telegraf/*

修改您的 Telegraf 配置文件

使用 Telegraf,在大多数情况下,您会希望将指标直接发送到 InfluxDB 本身。这就是为什么在您的 Telegraf 配置文件中默认启用 InfluxDB 输出的原因。默认情况下,Telegraf 会将指标发送到 InfluxDB 上名为 “telegraf” 的数据库。这是一个可自定义的参数;但是,在本例中,我们仅指定 InfluxDB 身份验证参数。

编辑您的 Telegraf 配置文件,并找到 [[outputs.influxdb]] 部分。

Edit Telegraf configuration file

在此配置文件中,找到 “HTTP Basic Auth” 部分并相应地修改凭据。

## HTTP 基本身份验证 username = "admin" password = "admin123"

当然,您可以自由地使用我们上面描述的方法(使用 docker exec)为 Telegraf 创建一个专用的管理员帐户。

保存并退出您的文件。现在是运行容器的时候了。

在 Docker 上运行 Telegraf 容器

如上所述,Telegraf 默认启用系统输入。因此,我们将不得不将 /proc 主机文件夹重新映射到 Docker 镜像上的 /host 文件夹。

这是为了确保 Telegraf 不会从 Docker 容器本身收集指标,并且容器文件系统不会以任何方式被更改。

为了实现这一点,除非您为您的 InfluxDB 容器命名,否则请运行此命令以获取您的 InfluxDB 容器 ID。它将用于将 Telegraf 和 InfluxDB 连接到同一个虚拟网络。

$ docker container ls | grep influxdb 1939ba611410 influxdb "/entrypoint.sh -conf..." 24 minutes ago Up 30 minutes 0.0.0.0:8086-<8086/tcp ecstatic_moore

通过运行以下命令隔离您的 Telegraf 用户 ID

$ getent passwd | grep telegraf telegraf:x:998:998::/etc/telegraf:/bin/false

接下来,要运行 Telegraf Docker 镜像,请运行以下命令

$ docker run -d --user 998:998 --name=telegraf \ --net=container: \ -e HOST_PROC=/host/proc \ -v /proc:/host/proc:ro \ -v /etc/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro \ telegraf

注意:如果您选择使用名称创建 InfluxDB 容器,则 net 选项可以替换为 –net=influxdb。

很好!为了确保您的 Telegraf 实例运行正常,请运行以下命令

$ docker container logs -f --since 10m telegraf

make sure Telegraf instance run correctly

Telegraf 似乎没有引发任何错误消息,但让我们通过检查 InfluxDB 数据库来再次检查我们设置的正确性

$ docker exec -it influx -username admin -password admin123

InfluxDB shell 版本 1.7.8 < SHOW DATABASES

name: databases name ---- weather _internal telegraf

< USE telegraf < SELECT * FROM cpu WHERE time > now() - 1m

如果您看到数据点,恭喜您!您的 Telegraf 实例正在正确地向您的 InfluxDB 服务器发送指标

data points

既然所有指标都存储在 Telegraf 中,一周后,我们可以安装一个现代的仪表板工具来可视化它们:Grafana。

在 Grafana 中可视化 Telegraf 指标

对于那些不熟悉 Grafana 的人来说,它是一个仪表板工具,可以从各种不同的数据源中提取数据,以创建美观的图表和仪表板。它可以从传统的 SQL 数据库中提取数据,也可以从各种时间序列数据库中提取数据,这正是我们将在本节中要做的。

在 Docker 上安装 Grafana

Grafana Docker 镜像存储在 Grafana 仓库

要创建 Grafana 容器,请在您的主机上运行以下命令

$ docker run -d --name=grafana -p 3000:3000 grafana/grafana 现在 Grafana 服务器容器应该在您的主机上启动并运行。要确认这一点,请运行以下命令。 $ docker container ls | grep grafana 您还可以确保它正在端口 3000 上正确监听。 $ netstat -tulpn | grep 3000

为 InfluxDB 配置 Grafana

在您的 Web 浏览器中,访问 http://localhost:3000。

您应该被重定向到 Grafana 首页。Grafana 的默认凭据是 admin/admin。立即,系统会要求您更改密码。选择一个强密码并单击 “Save”。

Configuring Grafana for InfluxDB

您现在应该被重定向到 Grafana 默认 Web UI

Grafana Web UI

单击 “Add data source” 以添加 InfluxDB 数据源

Add an InfluxDB datasource

接下来,选择 InfluxDB 选项并单击 “Select”。

对于本教程,我们不使用 InfluxDB 镜像作为 Docker 服务。因此,我们必须在我们的桥接网络上隔离 InfluxDB 公共 IP。

为此,请运行以下命令

$ docker network inspect bridge | grep influxdb -A 5 "Name": "influxdb", "EndpointID": "7e4eb0574a346687efbb96b6b45", "MacAddress": "02:42:ac:11:00:04", "IPv4Address": "172.17.0.2/16", "IPv6Address": ""

复制 IPv4 地址并将其粘贴到 Grafana 的 InfluxDB 配置中。选择 Basic Auth 选项,指定您的管理员凭据,并填写有关您的 InfluxDB 数据库的详细信息。这是最终配置

final configuration

单击 “Save and Test” 以确保您的配置正常工作。

太棒了!现在 Grafana 中的一切都已设置好,让我们导入一个专为 Telegraf 主机指标设计的仪表板。

导入 Grafana 仪表板

要导入 Grafana 仪表板,请选择左侧菜单中的 “加号” 图标,然后单击 “Import”

Importing a Grafana Dashboard

在导入文本框中,输入 1443 作为仪表板 ID

1443 as a dashboard ID

在下一个窗口中,确保信息正确,并将其绑定到您新创建的数据源

Check all information

Telegraf host metrics

结论

恭喜您,您已经学会了如何使用 Docker 安装 InfluxDB 1.7.x、Telegraf 和 Grafana。正如您可能已经意识到的,本教程侧重于完全自定义的镜像安装。如果您想自动化您的容器设置,使用 docker-compose 可能是个好主意。此外,请务必通读 Telegraf 输入插件 的完整列表,开始了解要监控的内容。

更多内容即将到来:InfluxDB 即将成为 InfluxDB 2.0,它将作为一个单一平台来管理 TICK Stack 的所有组件。另一篇关于如何安装和设置 InfluxDB 2.0 的教程即将推出。

在此之前,祝您玩得愉快,一如既往。

关于作者

Antoine Solnichkin

Antoine 是一位经验丰富的软件工程师和卢森堡有抱负的企业架构师。在日常工作中,他参与架构、开发和维护具有复杂需求的大型工业项目。他专注于围绕消息传递模式构建的分布式系统,利用 Kafka 或 MQ 等工具来满足苛刻的业务需求。他定期在 devconnected 上撰写技术文章,这是一个专门研究 DevOps、开源软件和时间序列数据库的博客。