背景:
在学习性能测试时,需要基于Telegraf + InfluxDB + Grafana部署一个性能监控平台。部署方式有多种,可以直接下载资源包进行部署,也可以直接通过容器部署。我推荐直接使用容器部署。当存在多个容器时,我更推荐使用docker compose 进行部署。其中我influxdb的版本为1.8,telegraf、grafana为最新版。
配置docker compose:
Docker Compose 依赖 Docker 引擎,配置前需要先安装docker。建议升级docker版本,在 Docker 24.0.5 中,docker compose 已经作为 CLI 插件原生集成,无需额外安装;其余方式可以查看其他资料。
工具介绍:
【Telegraf 】:主要用于监控服务器资源使用情况。
【InfluxDB 】:用于存储收集的数据。
【Grafana】:可视化平台,用于展示各种数据。
【chronograf】:influx低版本的web页面(influxdb 1.3版本之后就移除了web页面(这就是低版本访问:http://indlux:8086页面404的原因),因此需要加该插件。)
平台架构:
数据采集层 存储层 可视化层
├── Telegraf(监控服务器资源) │
├── JMeter(压测接口性能) → InfluxDB → Grafana(统一仪表盘)
部署步骤:
1.步骤说明:创建目录存放配置和数据,避免容器重启后丢失数据
mkdir -p ~/monitoring/{influxdb,grafana,telegraf}
cd ~/monitoring
2.使用docker pull 拉取对应插件的镜像,版本需要与docker compose文件中的保持一致。
3.编写docker-compose.yml文件
version: '3'
services:
# InfluxDB 1.8 (带 Web 管理界面)
influxdb:
image: influxdb:1.8
container_name: influxdb
ports:
- "8086:8086" # 数据读写端口
- "8083:8083" # Web 管理界面端口
volumes:
- ./influxdb/data:/var/lib/influxdb # 数据持久化目录
environment:
- INFLUXDB_ADMIN_USER=admin # 管理员账号
- INFLUXDB_ADMIN_PASSWORD=admin123 # 管理员密码
- INFLUXDB_HTTP_AUTH_ENABLED=true # 启用认证
- INFLUXDB_DB=telegraf # 默认数据库
networks:
- monitoring_net
# Chronograf 1.8 (InfluxDB 1.x 官方 Web 界面)
chronograf:
image: chronograf:1.8
container_name: chronograf
ports:
- "8888:8888" # Chronograf 访问端口
environment:
- INFLUXDB_URL=http://influxdb:8086 # 指向 InfluxDB 服务
- INFLUXDB_USERNAME=admin
- INFLUXDB_PASSWORD=admin123
depends_on:
- influxdb
networks:
- monitoring_net
# Grafana 最新版 (可视化仪表盘)
grafana:
image: grafana/grafana:latest
container_name: grafana
user: "0"
ports:
- "3000:3000"
volumes:
- ./grafana/data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin123
depends_on:
- influxdb
networks:
- monitoring_net
# Telegraf 最新版 (数据采集)
telegraf:
image: telegraf:latest
container_name: telegraf
volumes:
- ./telegraf/telegraf.conf:/etc/telegraf/telegraf.conf
- /:/hostfs:ro # 宿主机资源监控
- /var/run/docker.sock:/var/run/docker.sock:ro # Docker 监控
environment:
- HOST_ETC=/hostfs/etc
- HOST_PROC=/hostfs/proc
- HOST_SYS=/hostfs/sys
depends_on:
- influxdb
networks:
- monitoring_net
# 自定义网络确保容器互通
networks:
monitoring_net:
driver: bridge
注意!在grafana的模块,有这一配置 user: “0”,其目的是授予超管权限,去解决grafan文件写入无权限的问题,慎用。建议还是按照标准方式处理权限问题。chronograf的配置就是为了解决低版本访问http://indlux:8086页面404的问题。
4.执行命令 docker compose up -d,启动docker compose文件中的镜像;容器状态为running则表示容器已正常运行。
平台配置:
在物理机访问http://ip:3030,登录grafana平台,添加influxdb配置(ip为宿主机ip)
配置页面需要注意填写influxdb服务的地址,鉴权信息、数据库等。
填写完成保存成功,即表示配置完成
访问influxdb的web页面:http://ip:8888(docker compose中做了配置,不然1.8版本的无法访问web页面)
注意事项:
【容器网络不存在】
通过命令检查是否存在名为 monitoring_net 的 Docker 网络时,可以得到如下结果(docker compose中指定了容器间的通信模式),
但是在通过命令docker network inspect monitoringnet grep -E "grafanalinfluxdb"查看指定的容器是否处于同一网段时,提示网络不存在。
原因如下:Docker Compose 默认会将 项目名称 作为网络前缀,因此实际网络名称为monitoring_monitoring_net(假设你的项目目录名为 monitoring)。
【grafana的web页面配置提示网络被重置】
原因如下:配置完全正确,是因为我使用的是公司的环境,公司的防火墙把我配置的接口请求当做攻击拦截了,如果你配置遇到类型的问题,可以找一下公司的运维(这个问题困扰我很久…)
配置完成后,数据无法写入influxdb:
jmeter报错日志如下:
2025-04-18 10:30:07,500 ERROR o.a.j.v.b.i.HttpMetricsSender: Error writing metrics to influxDB Url: http://xx.xx.xx.xx:8086/write?db=jmeter , responseCode: 401, responseBody: {“error”:“unable to parse authentication credentials”}
这是由于我启用了认证,需要授权。
解决步骤:
1.在 JMeter 的 Backend Listener 中添加认证参数:http://ip:8086/write?db=jmeter&u=admin&p=admin123
2.确保用户 admin 对数据库 jmeter 有写权限:
-- 进入 InfluxDB 容器执行
docker exec -it influxdb influx -username admin -password admin123
-- 切换到 jmeter 数据库
USE jmeter
-- 授予 admin 用户所有权限
GRANT ALL PRIVILEGES TO admin
-- 验证权限
SHOW GRANTS FOR admin
-- 预期输出:
-- database privilege
-- ----------- ----------
-- jmeter ALL PRIVILEGES
学海无涯