Docker监控方案实践telegraf+influxdb+Grafana
1. telegraf+influxdb+grafana介绍
-
telegraf Google开源的用于监控基础设施应用的工具,可以零配置运行在docker主机上来监控Docker主机以及Docker容器。其为单节点监控,只能监控一个主机, 作为docker服务的监控数据收集器,提供给influxdb
-
influxdb InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖、提供管理界面。提供基于时间序列,基于事件的可度量的实时计算功能。
-
grafana Grafana可视化大型测量数据的开源程序,有灵活丰富的图形化选项,可以混合多种风格,多个数据源例如Graphite、zabbix、InfluxDB、Prometheus、mysql和OpenTSDB 详见配置页面。作为数据分析的可视化展示,与influxdb配合实现监控目的。
2.架构图
数据流向: docker主机+docker容器–>telegraf–>influxdb–>granfana–>web页面
3.搭建
1)环境准备
– 安装docker以及docker compose(目前武汉SQA所使用的CentOS测试机都已经装好),如果没有网上有很多资料教你怎么在CentOS安装Docker以及docker-compose
2)创建虚拟网卡(为了网络环境隔离)
docker network create monitor
#为docker主机创建一个网卡名为monitor
[root@localhost ~]# docker network create monitor
185165a2caf09d9055cd69e780ef09e430edb24555ffe97d123e2c788d4da895
docker network inspect monitor
#查看创建的虚拟网卡
[root@localhost ~]# docker network inspect monitor
[
{
"Name": "monitor",
"Id": "185165a2caf09d9055cd69e780ef09e430edb24555ffe97d123e2c788d4da895",
"Created": "2019-01-24T11:23:12.935020586-05:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
3)部署influxdb
3.1)方式一:创建并启动influxdb容器,手动创建数据库用户名和密码
#命令:
docker run -d --name influxdb --net monitor -p 38083:8083 -p 38086:8086 tutum/influxdb:latest
[root@localhost ~]# docker run -d --name influxdb --net monitor -p 38083:8083 -p 38086:8086 tutum/influxdb:latest
d16f017a54a1a8658ab0a9f707a7698ec9c272cf2ebc7aa1fcd9b9d3bf867f3d
备注:-d: 守护线程运行
–name:容器名influxdb
–net:加入到网络monitor
-p: 主机端口(自己分配):容器端口 8083为infuxdb后台控制端口,8086是infuxdb的数据端口
tutum/influxdb:默认会在docker官方仓库pull下来influxdb镜像
容器创建完毕后docker ps –a查看容器是否是up状态。打开http://{ipaddr}:38083就会显示以下页面:
添加管理员账户和数据库:
在Query输入框依次输入以下两个命令,按enter执行。
##创建管理员角色 root 密码 123456 供使用
CREATE USER "root" WITH PASSWORD '123456' WITH ALL PRIVILEGES
##创建数据库 telegraf用于接收telegraf的监控数据
CREATE DATABASE "telegraf"
3.2)方式二:创建并启动influxdb容器的同时自动创建数据库用户名和密码
##命令:
docker run -d --name influxdb --privileged=true --net monitor -p 38083:8083 -p 38086:8086 -e ADMIN_USER=root -e INFLUXDB_INIT_PWD=root -e PRE_CREATE_DB=telegraf tutum/influxdb
##执行效果:
[root@CNWH-CentOS timezone]# docker run -d --name influxdb --privileged=true --net monitor -p 38083:8083 -p 38086:8086 -e ADMIN_USER=root -e INFLUXDB_INIT_PWD=root -e PRE_CREATE_DB=telegraf docker.io/tutum/influxdb
Unable to find image 'tutum/influxdb:latest' locally
latest: Pulling from tutum/influxdb
a3ed95caeb02: Pull complete
23efb549476f: Pull complete
aa2f8df21433: Pull complete
ef072d3c9b41: Pull complete
c9f371853f28: Pull complete
a248b0871c3c: Pull complete
749db6d368d0: Pull complete
db2492acfcc3: Pull complete
b7e7d2e12d53: Pull complete
4272a53eef10: Pull complete
9b2fefdb5321: Pull complete
Digest: sha256:5b7c5e318303ad059f3d1a73d084c12cb39ae4f35f7391b79b0ff2c0ba45304b
Status: Downloaded newer image for tutum/influxdb:latest
da70d0cbc27659306fa2625b3eefb4b945b4a3729606fa01dbb5442bdeaebd07
4)部署telegraf
部署telegraf容器的命令如下:
docker run -d --name telegraf --privileged=true --net monitor -v /sqa/ennis/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro -v /var/run/docker.sock:/var/run/docker.sock:ro telegraf:latest
执行效果:
[root@CNWH-CentOS ennis]# docker run -d --name telegraf --privileged=true --net monitor -v /sqa/ennis/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro -v /var/run/docker.sock:/var/run/docker.sock:ro telegraf:latest
64a2cddd0a5b0e27984ae540dfb9ca3f2127c5e61dafe5793ef32be9e7682b7a
备注:
–privileged=true设置挂载目录权限为最大 否则挂载出错
–net monitor设置加入monitor网络
–volume=/:/rootfs:ro将容器/rootfs目录挂载到docker /
–d 是否后台运行容器服务
Docker ps –a 查看容器启动成功
5)部署Grafana
部署Grafana命令如下:
docker run -d --name grafana --net monitor -p 33000:3000 docker.io/grafana/grafana
执行效果:
[root@localhost ~]# docker run -d --name grafana --net monitor -p 33000:3000 docker.io/grafana/grafana
Unable to find image 'grafana/grafana:latest' locally
latest: Pulling from grafana/grafana
177e7ef0df69: Already exists
2fef65ef6d27: Pull complete
1853722c53f1: Pull complete
799ba0768193: Pull complete
1f95ab204ad8: Pull complete
f9afb204ae74: Pull complete
Digest: sha256:39b5b657dcba6d8628f650877c4027b672236bdfe761d6463fe05e2b97ee9eb4
Status: Downloaded newer image for grafana/grafana:latest
1a7698b2f3b39bd7f410013eba0b8dcd3767f9b0bc16dc13488b1715ad9baf7b
docker ps –a验证容器是否启动,然后打开http://{ipaddr}:33000 默认登录密码 admin/admin
4. docker-compose 搭建telegraf+influxdb+Grafana环境
1)docker-compose.yml
version: '3'
services:
influxdb:
image: tutum/influxdb
container_name: influxdb
networks:
- monitor
ports:
- "8083:8083"
- "8086:8086"
environment:
- ADMIN_USER="root"
- INFLUXDB_INIT_PWD="root"
- PRE_CREATE_DB="telegraf"
restart: unless-stopped
telegraf:
image: telegraf
container_name: telegraf
networks:
- monitor
# depends_on:
# - influxdb
privileged: true
volumes:
- ./telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
grafana:
image: docker.io/grafana/grafana
container_name: grafana
networks:
- monitor
ports:
- "33000:3000"
restart: unless-stopped
networks:
monitor:
driver: bridge
2)shell 脚本
根据自己的情况编写shell脚本,下面脚本是一个例子
#!/bin/bash
# Launch Postgres
docker-compose up -d Postgres
sleep 15
docker-compose up -d Rabbitmq
sleep 5
docker-compose up -d elasticsearch
docker-compose up -d td-agent
docker-compose up -d Runtime
sleep 5
docker-compose up -d Container
3)telegraf.conf
请观察另外一个博客
4)如果想销毁监控部署的环境
进入docker-compose.yml的目录下执行命令:
docker-compose down,则所有的安装文件都会被清除。
5. 数据展示
1)登录grafana
默认的登录密码为admin/admin 登录过程中可以修改密码。
2)设置数据源
打开Grafana主页http://{ipaddr}:33000,点击add data source,输入的值如下图
3)点击左上角的+号-> Create Dashboard->Graph,点击Panel title的下拉选择edit
点击General,可以修改图表的titel名称
点击Axes,可以修改Y轴的单位-unit,以及显示的数值范围Min/Max
下面提供CPU/MEM/Network/File system/System Disk监控的查询方式供大家参考:
[CPU_total_usage]
[MEM_usage]
[FS_usage]
[Netwok I/O]
[System Disk usage]
另外大家可以通过右上角的时间筛选框选择你想查看的时间段的资源消耗情况