单节点监控
docker监控(Docker+Jmeter+InfluxDB+Grafana)
InfluxDB
一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据。
cAdvisor
Google用来监测单节点的资源信息的监控工具。Kubernetes中也缺省地将其作为单节点的资源监控工具,各个节点缺省会被安装上Cadvisor。
Grafana
一款可视化度量分析和可视化套件,常用于可视化基础设施和应用程序分析,与Kibana类似,UI更加灵活,且插件丰富。
Jmeter
Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。
安装influxDB
docker run -d \
-p 8083:8083 \
-p 8086:8086 \
--expose 8090 \
--expose 8099 \
--name influxsrv \
tutum/influxdb
安装cadvisor
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
-p 8080:8080 \
--detach=true --link influxsrv:influxsrv \
--name=cadvisor \
google/cadvisor:latest \
-storage_driver=influxdb \
-storage_driver_db=cadvisor \
-storage_driver_host=influxsrv:8086
安装granfana
docker run -d \
-p 3000:3000 \
-e INFLUXDB_HOST=localhost \
-e INFLUXDB_PORT=8086 \
-e INFLUXDB_NAME=cadvisor \
-e INFLUXDB_USER=root -e INFLUXDB_PASS=root \
--link influxsrv:influxsrv \
--name grafana \
grafana/grafana
直接访问http://host-ip:8083/进入配置管理界面。点击配置管理界面右上角的 配置按钮图标 进入配置配置管理后台,使用root/root登录。
在上图中我可以看到influxdb提供了一些查询/操作数据的语句模版,这对我们这些不太熟悉它的人写SQL非常有帮助。
我们选择模板CREATE DATABASE,在输入框会出现CREATE DATABASE "db_name",把db_name 替换成我们的数据源cadvisor,回车,我们的数据库就创建完成了。接下来我们继续执行下面的SQL来完成用户的创建和授权:
CREATE USER "cadvisor" WITH PASSWORD 'cadvisor'
grant all privileges on "cadvisor" to "cadvisor"
执行成功会有 Success! (no results to display) 的提示。
http://host-ip:8080/containers/能看到信息
访问http://host-ip:3000使用admin/admin即可登录配置管理后台,如果不想修改密码可以选择跳过。
配置Granfana数据源
选择数据库类型为influxdb,host为http://influxsrv:8086,填写cadvisor的账户密码:
保存之后,点击保存并测试:
添加Dashboard
点击左侧的 + 号,选择Dashboard,选择graph
进入心界面后,选择title,选择编辑
在展示数据配置界面选择一个数据源,比如内存,点击保存,即可完成该数据的动态展示:
在配置界面Axes选项卡中配置相关的显示单位。可以根据实际的情况选择监控的单位。,因为我们监控的内存,所以选择的是相关的单位。
至此, 所有配置步骤完成,简单配置了两个图像:
多节点监控
集群监控(Swarm多节点部署)
# 创建InfluxDB的宿主机目录挂载到容器
[root@master1 ~]# mkdir -p /opt/influxdb
# 编写docker-compose.yml文件
[root@master1 ~]# mkdir test
[root@master1 test]# cat docker-compose.yml
version: '3.7'
services:
influx:
image: tutum/influxdb
ports:
- "8083:8083"
- "8086:8086"
volumes:
- "/opt/influxdb:/var/lib/influxdb"
deploy:
replicas: 1
placement:
constraints: [node.role==manager]
grafana:
image: grafana/grafana
ports:
- "3000:3000"
depends_on:
- "influx"
deploy:
replicas: 1
placement:
constraints: [node.role==manager]
cadvisor:
image: google/cadvisor
ports:
- "8080:8080"
hostname: '{{.Node.Hostname}}'
command: -logtostderr -docker_only -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influx:8086
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
depends_on:
- influx
deploy:
mode: global
volumes:
influx:
driver: local
grafana:
driver: local
# 在master1上执行
[root@master1 test]# docker swarm init --advertise-addr 192.168.15.129
Swarm initialized: current node (xtooqr30af6fdcu51jzdv79wh) is now a manager.
To add a worker to this swarm, run the following command:
# 这里已经提示使用下面的命令在node节点上执行就可以加入集群(前提docker服务一定是启动的)
docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
# 在node1和node2上执行
[root@node1 ~]# docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377
This node joined a swarm as a worker
[root@node2 ~]# docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377
This node joined a swarm as a worker.
# 在master1上查看集群主机
[root@master1 test]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xtooqr30af6fdcu51jzdv79wh * master1 Ready Active Leader 18.06.1-ce
y24c6sfs3smv5sd5h7k66x8zv node1 Ready Active 18.06.1-ce
k554xe59lcaeu1suaguvxdnel node2 Ready Active 18.06.1-ce
# 创建集群容器
[root@master1 test]# docker stack deploy -c docker-compose.yml swarm-monitor
Creating network swarm-monitor_default
Creating service swarm-monitor_cadvisor
Creating service swarm-monitor_influx
Creating service swarm-monitor_grafana
# 查看创建的容器
[root@master1 test]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
wn36f7be6i5a swarm-monitor_cadvisor global 3/3 google/cadvisor:latest *:8080->8080/tcp
ufn3lqbhbww3 swarm-monitor_grafana replicated 1/1 grafana/grafana:latest *:3000->3000/tcp
lf0z6dp1u8sn swarm-monitor_influx replicated 1/1 tutum/influxdb:latest *:8083->8083/tcp, *:8086->8086/tcp
# 查看容器的服务
[root@master1 test]# docker service ps swarm-monitor_cadvisor
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
vy1kqg5u8x3f swarm-monitor_cadvisor.k554xe59lcaeu1suaguvxdnel google/cadvisor:latest node2 Running Running about a minute ago
a08b5bysra3d swarm-monitor_cadvisor.y24c6sfs3smv5sd5h7k66x8zv google/cadvisor:latest node1 Running Running about a minute ago
kkca4kyojgr2 swarm-monitor_cadvisor.xtooqr30af6fdcu51jzdv79wh google/cadvisor:latest master1 Running Running 59 seconds ago
[root@master1 test]# docker service ps swarm-monitor_grafana
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
klyjl7rxzmoz swarm-monitor_grafana.1 grafana/grafana:latest master1 Running Running about a minute ago
[root@master1 test]# docker service ps swarm-monitor_influx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
pan5yvwq7b79 swarm-monitor_influx.1 tutum/influxdb:latest master1 Running Running about a minute ago
5. 访问web测试
1) 访问influxdb并创建数据库
登录InfluxDB的8083端口,并添加数据库
登录URL:http://192.168.15.129:8083
2) 访问cadvisor
登录URL:http://192.168.15.129:8080
登录数据库查看有没有把采集的数据写入
3) 访问grafana并配置
登录URL:http://192.168.15.129:3000
默认用户名:admin
默认密码:admin
温馨提示:
首次登录会提示修改密码才可以登录,我这里修改密码为admin