监控系统搭建
1 参考文档
https://www.jianshu.com/p/6ce027eabd91
https://blog.csdn.net/qq_22211217/article/details/80867801
2 架构图
3 搭建docker
在centOS上安装docker,执行以下命令
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
创建虚拟网卡(为了网络环境隔离)
docker network create docker-monitor #为docker主机创建一个网卡名为docker-monitor
windows安装docker
问题较多,失败率较高,不推荐使用。常见报错信息如下:
这个问题由于未启动hyper-v虚拟化导致。
System.InvalidOperationException:
job failed with message: “DockerDesktopVM”无法启动。(虚拟机 ID EA1E6B68-2361-4F14-8127-F4E37698689D)
虚拟机管理服务无法启动虚拟机“DockerDesktopVM”,因为一个 Hyper-V 组件尚未运行。(虚拟机 ID EA1E6B68-2361-4F14-8127-F4E37698689D)。
在 Docker.Backend.HyperVInfrastructure.HandleUpdatedJob(CIMConcreteJob updatedJob) 位置 C:\workspaces\PR-17066\src\github.com\docker\pinata\win\src\Docker.Backend\HyperV\HyperVInfrastructure.cs:行号 770
在 Docker.Backend.HyperVInfrastructure.<HandleMaybeAsyncJob>d__39.MoveNext() 位置 C:\workspaces\PR-17066\src\github.com\docker\pinata\win\src\Docker.Backend\HyperV\HyperVInfrastructure.cs:行号 704
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 Docker.Backend.HyperVInfrastructure.<StartVMAsync>d__31.MoveNext() 位置 C:\workspaces\PR-17066\src\github.com\docker\pinata\win\src\Docker.Backend\HyperV\HyperVInfrastructure.cs:行号 552
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 Docker.Backend.HyperV.<StartAsync>d__6.MoveNext() 位置 C:\workspaces\PR-17066\src\github.com\docker\pinata\win\src\Docker.Backend\HyperV\HyperV.cs:行号 105
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 Docker.Backend.HttpAPI.HyperVController.<StartAsync>d__7.MoveNext() 位置 C:\workspaces\PR-17066\src\github.com\docker\pinata\win\src\Docker.Backend\HttpAPI\HyperVController.cs:行号 43
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__1`1.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()
4 部署influxdb
部署influxdb
docker run -d --name influxdb --net docker-monitor -p 8083:8083 -p 8086:8086 tutum/influxdb
备注:-d:守护线程运行
--name:容器名influxdb
--net:加入到网络docker-monitor
-p: 主机端口(自己分配):容器端口 8083为infuxdb后台控制端口,8086是infuxdb的数据端口
tutum/influxdb:默认会在docker官方仓库pull下来influxdb镜像
配置influxdb
http://docker主机的ip:容器映射出来的端口
http://192.168.182.131:8083/
## 创建管理员角色 root 密码 root 供使用
CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES
## 创建数据库
CREATE DATABASE "cadvisor"
5 部署cadvisor
docker run --privileged=true --net docker-monitor --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker:/var/lib/docker:ro --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro -p 8087:8080 --detach=true --name=cadvisor google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086
备注:上诉语句请勿换行
docker run
--privileged=true :设置挂载目录权限为最大 否则挂载出错
--net docker-monitor :设置加入docker-monitor网络
--volume=/:/rootfs:ro :将容器/rootfs目录挂载到docker /
--volume=/var/run:/var/run:rw :将容器/var/run 挂载到docker /var/run
--volume=/sys:/sys:ro :rw表示读写 ro表示只读
--volume=/var/lib/docker:/var/lib/docker:ro
--volume=/sys/fs/cgroup:/sys/fs/cgroup:ro
-p 8087:8080 :设置cadvisor端口映射 由于8080被我使用oracle 我分配8087
--detach=true :是否后台运行容器服务
--name=cadvisor google/cadvisor :容器服务名 为cadvisor 从docker默认仓库 下载google/cadvisor镜像
-storage_driver=influxdb :绑定存储驱动 为 influxdb
-storage_driver_db=cadvisor :数据库为 cadvisor 请对应
-storage_driver_host=influxdb:8086 :绑定数据库管理地址 容器名:容器端口
浏览器验证
http://docker主机的ip:容器映射出来host 本来为8080 修改为8087
6 部署grafana
docker run -d --name grafana --net docker-monitor -p 3000:3000 grafana/grafana
备注:docker run
-d :后台运行
--name grafana :容器别名
--net docker-monitor :加入docker-monitor网络
-p 3000:3000 :端口映射
grafana/grafana :默认docker仓库下载grafana镜像
浏览器验证
http://docker主机的ip:容器映射出来host 默认帐号admin admin
创建数据源,配置连接influxdb
创建面板,添加监控指标
7 运行demo程序将数据写入influxdb
参考文档:https://www.jianshu.com/p/67bcc64f8dc9
influxDB的sql操作:https://blog.hhui.top/hexblog/2019/07/18/190718-Influx-Sql%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8B%E4%B8%80%EF%BC%9Adatabase-%E6%95%B0%E6%8D%AE%E5%BA%93/