使用grafana + telegraf 快速搭建docker监控平台
grafana 不用在介绍了,非常好用的一款出色的度量仪表盘和图形编辑器,而且最近还新增了 Alerting 功能
docker 监控有很多中方式去实现,这儿介绍使用 telegraf 来收集docker监控数据存入influxdb中,在使用grafana来做一些UI呈现
telegraf
telegraf 是用go实现的用于收集,处理和写入各种指标的代理.具有占用内存小,收集类型广(例如支持 docker, redis, hadoop, mysql 等等 还支持第三方的服务)等众多优点
支持的收集的插件列表 例如常见的系统基本信息 cpu 内存 网络 文件io 都能收集,以及自定义的http json收集
telegraf.conf
配置 telegraf的各项收集指标, 这儿简单的写一个
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = ""
debug = false
quiet = false
hostname = ""
omit_hostname = false
[[outputs.influxdb]]
urls = ["http://<influxdb>:8086"] # required
database = "telegraf" # required
retention_policy = ""
write_consistency = "any"
timeout = "5s"
username = "user"
password = "password"
# 收集 cpu 磁盘 内存 docker 等
[[inputs.cpu]]
percpu = true
totalcpu = true
fielddrop = ["time_*"]
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs"]
[[inputs.diskio]]
[[inputs.kernel]]
[[inputs.mem]]
[[inputs.processes]]
[[inputs.swap]]
# docker 需要指定sock文件位置 可能还需要加个权限 sudo usermod -aG docker telegraf
[[inputs.docker]]
endpoint = "unix:///var/run/docker.sock"
# 收集指定网卡的网络情况
[[inputs.net]]
interfaces = ["eno1"]
[[inputs.system]]
这儿把收集过来的数据存放到 influxdb中方便grfana读取,当然也可以选择其他的存储方式.
官方提供的配置文件有详细的说明.
配置完了之后可以启动telegraf服务,在centos 7 中 如下
systemctl start telegraf
也可以用docker 方式运行,这儿提供一个docker-compose
telegraf:
net: "host"
container_name: telegraf
image: telegraf:1.2.1-alpine
volumes:
- ./config:/etc/telegraf
- /sys:/rootfs/sys:ro
- /proc:/rootfs/proc:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- 'HOST_PROC=/rootfs/proc'
- 'HOST_SYS=/rootfs/sys'
influxdb
telegraf 允许之后就会把数据陆陆续续的写入influxdb中,这儿可以看下有那些数据.
如上图所示 cpu disk docker net 等等信息均以写入influxdb中
grafana
grafana 新建一个graph 面板,编辑查询语句填入
SELECT mean("usage_percent") FROM "docker_container_cpu" WHERE $timeFilter GROUP BY time($interval), "container_name" fill(null)
查询所有主机容器的cpu使用率
自己写各种查询很繁琐官方提供了一套现成的dashboard直接导入即可.
导入之前需要先安装Pie Chart插件
效果如下:
导入的东西很全,可以删除不需要的留下需要的
Alerting
Grafana 支持Alerting 通知功能,允许添加一个条件当满足时自动出发通知
可以参考官方的文档 alerting 以及 notifications
基本上telegraf 可以满足收集的大部分需求, 其实官方还提供了一个叫做chronograf 功能和grafana类似可能更加易用
还有一个叫做 kapacitor的工具也是基于influxdb 做通知用的
其实看下influxdata旗下的产品 可以很容易搭建一个数据分析监控系统