docker部署influxdb+jmeter+grafana

docker-compose 部署 influxdb+grafana

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# version: "3"

# services:
#   influxdb:
#     image: influxdb
#     ports:
#       - "8086:8086"
#     volumes:
#       - influxdb:/var/lib/influxdb

# volumes:
#   influxdb:
version: "2"
services:
    influxdb:
       image: influxdb:latest
       volumes:
           - ./data-volumne:/var/lib/influxdb2
           - ./config.yml:/etc/influxdb2/config.yml
           - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
       ports:
           - 8086:8086
       environment:
           DOCKER_INFLUXDB_INIT_MODE: setup
           DOCKER_INFLUXDB_INIT_USERNAME: my-user
           DOCKER_INFLUXDB_INIT_PASSWORD: my-password
           DOCKER_INFLUXDB_INIT_ORG: my-org
           DOCKER_INFLUXDB_INIT_BUCKET: my-bucket
    grafana:
       image: grafana/grafana:latest
       ports:
           - 3000:3000

访问 influx 的 UI 界面配置一些登录和数据库信息,获取 apitoken,点击 load your data + api token

influxdb v2 使用 token 登录检验,这里可以获取到 token 的值

image-20230302132730307

访问 grafana 的 UI 界面

http://localhost:3000/login

输入默认用户名密码

1
admin  admin

这里可以在进入容器后修改 grafana 的配置文件

1
2
docker exec -it grafana bash
cat /etc/grafana/grafana.ini

进入后直接添加数据源

influxdb v2 选择 flux

连接信息如图:

1
2
3
4
5
URL:http://localhost:8086
Access: Server(default)
Organization:jemter    # 这里就是在上面配置influxDB时创建的
Token:xxxx # 复制上面提到的token
Default Bucket:jemter   # 上文创建的bucket

因为在一个 docker 网桥下

如上图所示为 Docker 中 bridge 驱动模式的示意图,其中蓝色的模块表示主机上的网卡。当 Docker 启动时会自动在主机上创建一个虚拟网桥 docker0,使用默认网络模式创建 docker 容器时会自动创建一对儿 veth pair 接口,一端连接在 docker 容器中(如图容器中的 eth0),一端连接在虚拟网桥 docker0 上(如图 veth)。这种 veth pair 是一种虚拟网络设备,主要用于不同 namespace 中(意味着网络隔离)的网络通信,它总是成对存在的。在这里可以把它想象成一对儿靠虚拟网线连接起来的两个虚拟网卡,一端连接着 docker 容器,一端连接着虚拟网桥 docker0。

通过这种方式,不同 docker 容器之间可以通过 ip 地址互相通信,也可以通过虚拟网桥访问主机上的网络 eth0(添加 iptables 规则,将 docker 容器对目标地址发出的访问通过地址伪装的方式修改为主机对目标地址进行访问)。

也就是说容器间可以通信通过的是 ip

于是

1
2
3
docker exec -it influxdb bash

ip addr

再次测试 save&test

这里有一个 ID 可以试试 5496,如图 import 一个模板

image-20230302132941975

你也可以选择 v2 版本的模板

4、配置 jmeter

1
2
3
4
添加一个线程组
添加一个接口请求
添加一个结果树
添加一个Backend Listener

image-20230302133014130

image-20230302133033898

  • influxdbUrl 修改为 http://localhost:8086/api/v2/write?org=jmeter&bucket=jmeter
  • 注意如果是其他的 org 和 bucket 需要按你在 influxDB 里配置的修改
  • application 随便写
  • measurement 也是随便写,但是这个字段在后面筛选数据时会用到

然后点击 Add,添加一个 name value

  • name 为 influxdbToken
  • value 的值可以点 Detail cv 填进去

image-20230302133128251

然后我们先设置 thread-group 的 loop count 为循环,测试一下数据

image-20230302133208138

5、配置 UI 和查询语句

回到 influxDB 的 UI,这里也有一些图表显示,我们来查询一下数据看看

from 选择 bucket ,相当于选择数据库

后面的都是过滤条件 filter

在第一个 filter 我们选择_measurement 选择 codetop2 这里就是刚才在 jmeter 配置的

img

这里可以看出来 jmeter 传了一些数据到 influxDB,具体的这些参数的含义可以去研究下,但是看名字比如 avg 是平均数吧,count 是总的请求条数?

img

我们这样选择

img

然后点击 submit,其实看得出来,这里就是在可视化的配置查询语句

这里显示 10 条,就是刚才我只发送了 10 次请求就停下来了,如果你是循环应该会一直递增

img

因为这是可视化的,我们需要把语句 copy 一下,去刚才的低版本模板修改 SQL(新版本基于 influxdb v2 flux 的模板写的查询语句应该是不需要修改的)

img

把这里的语句 copy 一下,回到 grafana 的这个模板,我们编辑一下这个版块

img

可以看到这个 SQL 是 influxDB v2 版本以下的查询语句,我们把刚才在 influxDB 的 UI copy 的 SQL 替换图示的 SQL

img

因为我这里不是一直循环,所以目前没有数据,因为 influxDB 是时序数据库,数据查询都是带时间条件的不带默认是截止是 now,我们可以选择过去 1 小时,如果还是没有数据可以选择 3 小时

再把其他字段也这样,选择一个相应的 panel,填入 SQL,一个大的仪表板就做好了,类似刚才的那个模板

image-20230302133518077

点击 script editor 既可以看见 influxdb 的 sql

image-20230302133604010

参考文章

https://huaweicloud.csdn.net/638db22ddacf622b8df8c8c0.html

Licensed under CC BY-NC-SA 4.0
最后更新于 Jan 06, 2025 05:52 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up