cAdvisor InfluxDB Grafana搭建监控平台

创建监控使用网络

为了方便跨主机监控数据交换,为监控创建一个独立的overlay网络

docker network create --driver overlay monitor

InfluxDB

InfluxDB 是一个开源分布式时序、事件和指标数据库,用于处理高写入和查询负载。

安装InfluxDB,用于收集容器监控数据

docker service create --network monitor -p 8083:8083 -p 8086:8086 --mount source=influxdb-vol,type=volume,target=/var/lib/influxdb --name=influxdb --constraint 'node.hostname==node1' influxdb
  • 8086用于Influxdb数据读写,8083用于数据库管理界面
  • --constraint 'node.hostname==node1' 用于约束influxdb运行在node1上
  • --mount 挂载一个volume到容器的/var/lib/influxdb用于数据持久化

登录Influxdb管理控制台,点击设置->输入用户名密码(默认用户名:root, 密码:root) 创建一个用于cadvisor存储监控数据的数据库

CREATE DATABASE "cadvisor"

cAdvisor

cAdviosr是Google用来监测单节点的资源信息的监控工具

安装cadvisor, 需要在所有节点安装,用于收集个节点容器资源信息

docker service create --network monitor --name cadvisor -p 8080:8080 --mode global --mount source=/var/run,type=bind,target=/var/run,readonly=false --mount source=/,type=bind,target=/rootfs,readonly=true --mount source=/sys,type=bind,target=/sys,readonly=true --mount source=/var/lib/docker,type=bind,target=/var/lib/docker,readonly=true google/cadvisor -storage_driver=influxdb -storage_driver_host=influxdb:8086 -storage_driver_db=cadvisor
  • --mode global用于在各个节点各部署一个副本
  • --mount 挂载本地socket用于收集资源信息
  • -storage_driver=influxdb 指定存储设备
  • -storage_driver_host=influxdb:8086 指定influxdb地址
  • -storage_driver_db=cadvisor 指定存储数据库
  • -storage_driver_user=root 指定数据库用户名 (默认root,可不写)
  • -storage_driver_password=root 指定数据库密码 (默认root,可不写)

cAdvisor运行以后,可以通过http://10.0.20.121:8080/查看到Docker运行的机器和容器情况。

Grafana

Graphite 是一款开源的监控绘图工具。可以实时收集、存储、显示时间序列类型的数据。

安装grafana

docker service create --network monitor -p 3000:3000 --name grafana --constraint 'node.hostname==node1' --mount source=grafana-vol,type=volume,target=/var/lib/grafana grafana/grafana

登录到Grfana

浏览器打开http://10.0.20.121:3000 (默认用户名admin,密码admin)

配置数据源

因为使用overlay网络,URL填写http://influxdb:8086即可

创建Dashboard

[warning] 这里有个小问题,创建的图标会有左上角有个红色!,并且创建的图无法使用,提示如下:

Invalid interval string, expecting a number followed by one of "Mwdhmsy"

解决方法参考官方github issues。 我使用这个版本目前为最新,解决原理一样只是修改地方有点区别

官方对该选项解释如下

A lower limit for the auto group by time interval. Recommended to be set to write frequency, for example 1m if your data is written every minute. Access auto interval via variable $__interval for time range string and $__interval_ms for numeric variable that can be used in math expressions

[info] 大致意思为:按照时间进行自动分组,建议设置为数据写入的频率。

例子:

cpu监控图表sql

SELECT mean("value") FROM "cpu_usage_system" WHERE ("com.docker.swarm.service.name" = 'cadvisor') AND $timeFilter GROUP BY time($__interval) fill(null)
SELECT mean("value") FROM "cpu_usage_system" WHERE ("com.docker.swarm.service.name" = 'grafana') AND $timeFilter GROUP BY time($__interval) fill(null)
SELECT mean("value") FROM "cpu_usage_system" WHERE ("com.docker.swarm.service.name" = 'influxdb') AND $timeFilter GROUP BY time($__interval) fill(null)

results matching ""

    No results matching ""