Docker监控教程 - 如何使用Telegraf和InfluxDB监控Docker
作者:社区 / 产品
2023年1月11日
导航到
本文最初发布在CNCF博客上,由Cameron Pavey撰写。向下滚动查看作者简介。
为什么监控Docker
与传统非容器化工作负载一样,有几个原因说明为什么监控基于Docker的应用至关重要。密切关注您应用程序的关键指标,可以让您在性能问题和资源分配优化等方面采取主动。如果您的应用程序经常消耗比预期更多的资源,您需要尽早了解这一点。如果这些问题被忽视,可能会导致云服务提供商的意外账单或不满客户的支持请求(如果存在潜在的性能问题)。
如果您有详细的指标来描述应用程序在运行时的行为,您就有机会在问题早期就解决它们。通常,您想收集的指标包括CPU和内存使用情况,以及磁盘和网络I/O,以及其他根据您应用程序需求而定的更多具体指标。
然而,收集大量此类数据可能会很快变得棘手。您需要以有意义的方式收集数据并将其存储,并有一种机制可以拉取数据进行分析和可视化。这正是InfluxDB和Telegraf发挥作用的地方。
InfluxDB是一个专为时间序列数据库设计的数据库,具有许多强大的功能。特别是,内置的数据可视化工具和强大的Flux数据脚本语言是现有时间序列数据库提供的强大补充。InfluxDB可以与Telegraf配合使用,Telegraf是一个基于服务器的代理,用于从各种系统收集指标。得益于灵活的插件架构,Telegraf已经支持300多个插件,用于从不同的端点收集指标,包括Docker。
先决条件
在开始本教程之前,您需要在您的系统上安装并正确配置Docker。您可以通过参考您所选择操作系统的官方文档来安装Docker。如果您使用的是基于Unix的操作系统,您还可以将用户添加到Docker组,以便您可以用非root用户身份使用Docker。
一旦您安装并配置了Docker,您可以通过运行以下命令来验证它是否按预期工作
docker run hello-world
此命令应打印一些输出以确认一切正常
请注意,本教程假定您使用基于Linux的操作系统,如Ubuntu,用于代码片段和命令。教程中稍后有一个部分,如果使用macOS,则命令将失败,但请放心,如果发生这种情况,有一个简单的解决方案。
使用InfluxDB和Telegraf监控Docker
安装Docker后,您现在可以安装并配置InfluxDB和Telegraf。虽然您可以直接在机器上安装这两个软件包,但本教程将向您展示如何作为Docker容器安装和集成它们。
在创建容器之前,您需要创建一个Docker网络,以便它们可以相互通信。您可以使用以下命令来完成此操作
docker network create --driver bridge influxdb-net
InfluxDB
现在您需要创建一个新的influx-data/目录。您将把这个目录挂载到该容器使用的Docker卷上,这意味着即使容器停止运行,您的数据也能持久化
mkdir influx-data && cd influx-data
进入目录后,您可以使用以下命令来拉取influxdb Docker镜像并使用它创建一个容器(将您的influx-data/目录映射到容器的卷)
docker run \
--name influxdb \
-p 8086:8086 \
--volume $PWD:/var/lib/influxdb2 \
--net=influxdb-net \
-d \
influxdb:2.1.1
运行此命令将在容器中启动一个InfluxDB实例,可在主机的IP地址上的8086端口访问。在配置Telegraf之前,您需要设置您的InfluxDB安装并设置一些参数,如bucket名称。
配置InfluxDB
将您的Docker主机IP地址导航到端口8086(如果您在本地上运行Docker,请尝试http://127.0.0.1:8086/。)现在,您应该会看到InfluxDB欢迎屏幕。点击开始。然后,系统会提示您创建初始用户。请记下您提供的初始组织名称和初始桶名称,因为您将在Telegraf配置中很快需要它们。
填写这些详细信息后,点击继续,在最后一页选择稍后配置。然后,您将返回主仪表板。从那里,选择加载您的数据,在随后的页面中选择Telegraf选项卡。
在此选项卡上,选择+ 创建配置。您将被询问要监控哪种系统。选择Docker并点击继续。为配置提供一个语义名称(如“Docker”)并点击创建和验证。然后,InfluxDB将向您提供一个API令牌和一个URL,这将为您提供Telegraf的部分配置文件。
请记下此API密钥,您将很快需要它。
有了这个API密钥,您就拥有了配置Telegraf容器并开始记录一些度量所需的所有最终部分。对于这个教程,您不需要提供的配置文件,因为将为您提供一个包含一些额外部分的配置文件。
Telegraf
回到您的终端,如果您仍然在influx-data/目录中,您可以离开此目录并创建一个名为telegraf-data/的新目录。此目录将保存Docker将挂载到容器中的Telegraf配置文件。
# If you’re still in the influx-data/ directory
cd ..
mkdir telegraf-data && cd telegraf-data
在此目录中,创建一个名为telegraf.conf的文件,并按如下设置其内容
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = ""
hostname = ""
omit_hostname = false
[[inputs.docker]]
endpoint = "unix:///var/run/docker.sock"
gather_services = false
container_names = []
source_tag = false
container_name_include = []
container_name_exclude = []
timeout = "5s"
perdevice = true
total = false
docker_label_include = []
docker_label_exclude = []
tag_env = ["JAVA_HOME", "HEAP_SIZE"]
[[outputs.influxdb_v2]]
urls = ["http://influxdb:8086"]
token = "$INFLUX_TOKEN"
organization = "influx-docker-demo"
bucket = "influx-docker-demo"
您可能需要编辑此文件的最后一个块,如果您使用了不同的组织或桶名称。同样,如果您给InfluxDB容器起了一个不同于influxdb的名称,您需要在配置文件中更改的urls键的值中反映这一更改。
一旦创建了此文件,您就可以从您的telegraf-data/目录运行以下命令来创建容器
docker run -d --name=telegraf \
-v $(pwd)/telegraf.conf:/etc/telegraf/telegraf.conf \
-v /var/run/docker.sock:/var/run/docker.sock \
--net=influxdb-net \
--user telegraf:$(stat -c '%g' /var/run/docker.sock) \
--env INFLUX_TOKEN="your_api_key" \
telegraf
注意:如果您使用macOS,此命令可能会失败,因为Mac和Linux之间的stat命令略有不同。如果发生这种情况,请尝试将-c标志替换为类似这样的-f标志:–user telegraf:$(stat -f ‘%g’ /var/run/docker.sock)。
前面的命令为了正确运行执行了几个重要操作。以下是逐行说明
- 第一个-v标志挂载了您刚刚创建的配置文件。
- 第二个-v标志挂载了主机的Docker套接字,这是Telegraf收集有关您的Docker服务器详细信息的方式。
- –net标志确保此容器和之前创建的InfluxDB容器都在同一网络上,这是您创建的配置文件如何通过DNS名称引用InfluxDB容器(influxdb)的方式。
- –user标志是必要的,因为Telegraf镜像内部使用名为telegraf的用户和组,因此您必须将其映射到有权访问docker.sock文件的用户。
- –env标志指定了一个包含您在配置文件中创建的InfluxDB实例API密钥的环境变量。
运行此命令后,您可以检查Docker日志以查看是否存在任何意外问题。
docker logs telegraf
如果一切正常,您应该会看到类似以下输出,没有错误
如果一切看起来都很正常,您就可以在InfluxDB中可视化您的数据了。
如果在尝试访问 /var/run/docker.sock 时出现权限被拒绝的错误,您可以通过运行以下命令来解决这个问题,该命令将更改容器中套接字的权限,允许 telegraf 用户正确访问它
docker exec -u root -it telegraf /bin/sh -c "chmod 666 /var/run/docker.sock"
数据可视化
在浏览器中返回 InfluxDB,从侧边栏中选择 数据。接下来,选择 桶 选项卡,然后选择您配置 Telegraf 使用的数据桶名称
这将带您进入 数据探索器 页面,您应该能够看到 Telegraf 提供给 InfluxDB 的数据。默认情况下,捕获了相当多的指标,包括 CPU 和内存使用情况以及网络统计信息。您可以通过点击屏幕底部的不同过滤器查看所有其他可用数据
有关如何从数据中提取有意义的可视化信息的更多信息,您可以参考官方文档以获取更多信息。
总结
在本教程中,您学习了如何使用 Docker、Telegraf 和 InfluxDB 监控关键指标。
作为时序数据库,InfluxDB 完美地定位了存储和可视化的指标类型,这些指标通常是应用监控经常处理的,因为通常有大量的定期间隔的数据点。对于如此大量的数据,您必须有一个机制来可视化、搜索和理解数据以获取洞察。InfluxDB 通过其易于配置的可视化和强大的 Flux 数据脚本语言,允许您查询和分析数据,在这方面符合要求。
关于作者
Cameron 是一位居住在墨尔本的全栈开发者。他致力于理解优质代码、开发者生产力和工作满足感的复杂性的永不停止的旅程。