基本性能监控系统组成
- Collectd+influxdDB+Grafana
- Collectd是是一个守护(daemon)进程,用来定期收起系统和引用程序的性能指标,同时提供了以不同的方式来存储这些指标值的机制
- InfluxDB 开源的,高性能的时序型数据库
- Grafana一个非常酷的数据可视化平台,常常应用于显示监控数据,支持多种数据源。
环境搭建
-
Docker部署环境
-
步骤:
- 准备数据文件:types.db collectd.conf
- 启动influxDB
- 启动grafana
- 启动collectd
-
准备过程的报错:
-
在执行:
docker cp temporary:/usr/share/collectd/types.db types.db
命令时报错:successfully copied 512b to /home/xianzhe/桌面/types.db
open /home/xianzhe/桌面/types.db: permission denied
原因:虚拟机里的桌面文件夹的权限不够,无法打开新建文件。
解决:更改文件夹权限:
$ sudo chmod -R 777 lib64
命令解析:-R 指目标文件夹及其所有子文件递归,777指全权限 lib64 目标文件夹 :即修改目标文件夹及其所有子孙的权限全开放。检查:查看文件夹权限:
ls -l /home/xianzhe/
这样会查看xianzhe下所有文件夹的权限,而不会查看xianzhe这个文件夹本身的权限。
-
准备数据文件
> docker create --name temporary mwaeckerlin/collectd
创建一个名为temporary的docker容器并且基于 mwaeckerlin/collectd 这个镜像。mwaeckerlin/collectd 镜像来源可能是 Docker Hub 或其他 Docker 仓库中可用的一个镜像,它可能包含了一个预先配置好的 Collectd 环境
> docker cp temporary:/usr/share/collectd/types.db types.db
从temporary容器中拷贝`usr/share/collectd/types.db`文件 到当前目录下的types.db文件
> docker cp temporary:/etc/collectd/collectd.conf collectd.conf
从temporary容器中拷贝`/etc/collectd/collectd.conf`文件 到当前目录下的collectd.conf文件
(一般当前目录为桌面目录)
> sudo mkdir -p <your path>
> sudo mv -i types.db <your path>
> sudo mv -i collectd.conf <your path>
> docker rm temporary
启动 InfluxDB服务
docker run -d \
--name influxdb \
-e INFLUXDB_COLLECTD_ENABLED=true \
-e INFLUXDB_COLLECTD_DATABASE=_internal \
-e INFLUXDB_COLLECTD_TYPESDB=/usr/share/collectd/types.db \
-e INFLUXDB_COLLECTD_SECURITY_LEVEL=none \
-v <your path>/types.db:/usr/share/collectd/types.db \
influxdb:1.8
解析:上面应该是启动一个名为influxdb的容器,然后 -e全是容器的权限,设置啥的,然后 -v好像是获取的镜像地址,然后没找到,就到dockhub去找这个名为influxdb :1.8的镜像。输入的时候全输入就好,上面的命令慢慢敲
启动grafana服务
docker run -d \
--name=grafana \
-p 3000:3000 \
--link influxdb:influxdb grafana/grafana
解析:启动一个名为grafana的容器,与本地的映射端口为 3000 映射虚拟机的3000端口
--link 需要连接的 influxdb服务对应的容器名为 influxdb
然后镜像时 grafana/grafana
然后本地找不到,就到线上找
默认用户名/密码:admin/admin
启动collectd服务
docker run -d \
--name collectd \
--hostname localhost \
--link influxdb:influxdb \
-v <your path>/collectd.conf:/etc/collectd/collectd.conf \
mwaeckerlin/collectd
创建并运行一个名为collectd的容器,然后是设置hostname名localhost,连接influxdb服务对应的启动容器influxdb,-v 则是将主机上的 <your path>/collectd.conf文件挂载到容器里的/etc/collectd/collectd.conf文件 然后是镜像源:mwaeckerlin/collectd
注意上述三个服务都要启动在同一个虚拟机上或者本地机器上
查看正在运行的容器:docker ps
环境配置与监控环境的使用
Grafana中配置数据源
类型: InfluxDB
URL: http://influxdb:8086
Database: _internal
Grafana 中配置Dashboard
Import id 555
如果一开始点进来没有influxdb数据库,就点击add database,添加一下就好
然后进入可视化页面:
配置文件
collectd 启用对应的监控数据
编辑配置文件 collectd.conf
启用对应的监控选项
使用vim collectd.conf
然后 输入 :set number
输入 :/uptime
然后找到 #load plugin uptime
光标移到#号位置,按下键盘s,然后就进入了编辑模式并且删除了光标所指字符,然后按esc退出编辑模式
输入 :wq 保存并退出
如果因为权限问题无法修改,就 :q,先退出
然后输入权限修改命令 $ sudo chmod -R 777 ./
然后查看权限:ls -l ./
然后再进行修改
报错:没有数据,下面的panel报错:“missing parameter: __auto_interval”
原因:在grafana页面里没有填写host:localhost 勾选箭头所指的地方,因为这个参数本身应该是grafana自动填写的,然而并没有,大概是因为并没有告诉grafana要监控谁的数据,因为当时并没有填写host,这个host要填的东西好像是当初创建collectd容器时指定的hostname
注意需要下载 influxdb 1.8的镜像,因为好像下载最新的influxdb的话,根据已有的命令行,根本连不上去。
如果需要放开某些面板比如 uptime(上图的N/A)的监控数据,则要进入collectd.conf文件里,然后找到# loading plugin uptime 的那行,将#删掉。
现在讲解一下涉及到的linux修改文件的命令:首先去到所在文件夹,
vim 文件名
注意以下的:都是要切切实实在键盘里嗯出来,输出的
输入 :/uptime 这一句会找到文件里包含uptime字样的段落
按下键盘 i,或者a,或者s,当按下s时会在进入编辑模式的同时删除光标所指的字符
按下esc退出编辑模式
输入:wq 保存并退出
从某种意义来说 键盘按下 : 会让文件进入命令模式
做完上述操作后,重启collectd容器即可 sudo docker restart collectd
总结命令行
准备数据,没什么坑
> docker create --name temporary mwaeckerlin/collectd
> docker cp temporary:/usr/share/collectd/types.db types.db
> docker cp temporary:/etc/collectd/collectd.conf collectd.conf
> sudo mkdir -p <your path>
> sudo mv -i types.db <your path>
> sudo mv -i collectd.conf <your path>
> docker rm temporary
启动influxdb服务容器,老师的代码里没有 -p 8086:8086
这个挂载端口的操作。我这里加上了。
因为如果不加,那么开启容器时,确实显示在监听8086端口,可是在linux里查端口时却又显示8086端口没人在用,问题在于,容器里的那个显示在监听8086端口是指容器内部的8086端口在被监听,不代表其宿主机,即linux的8086端口在被监听,所以这里我给它进行了端口绑定。
而且必须要指定下载1.8的镜像,因为1.8稳定,而且如果下载最新的镜像,后续操作里在grafana里会连接不上数据库
docker run -d \
--name influxdb \
-p 8086:8086\
-e INFLUXDB_COLLECTD_ENABLED=true \
-e INFLUXDB_COLLECTD_DATABASE=_internal \
-e INFLUXDB_COLLECTD_TYPESDB=/usr/share/collectd/types.db \
-e INFLUXDB_COLLECTD_SECURITY_LEVEL=none \
-v <your path>/types.db:/usr/share/collectd/types.db \
influxdb:1.8
启动grafana服务容器,没什么坑
docker run -d \
--name=grafana \
-p 3000:3000 \
--link influxdb:influxdb grafana/grafana
默认账号密码 admin / admin
启动collectd容器服务,有坑,要注意-v 操作里是挂载文件或者挂载目录,如果跑下面脚本时报错,则先看容器日志:sudo docker logs 容器名
然后发现是挂载失败:说是无法将文件夹挂载到文件里,换句话说就是两边不对等,要么全是文件,要么全是文件夹。但是从命令来看,很明显是文件,但是眼见未必为实。
检查是否为文件:ls -l ./
会输出当前文件夹下的东西的权限,而不会输出当前文件夹本身的权限,如果权限开头是-
则为文件,如果为d
则为文件夹。
docker run -d \
--name collectd \
--hostname localhost \
--link influxdb:influxdb \
-v <your path>/collectd.conf:/etc/collectd/collectd.conf \
mwaeckerlin/collectd