写在前面,目前这里仅仅完成了容器性能的监控;如CPU,MEM,DISK,NET; 运行在容器的中应用的监控还未涉及!
Docker监控数据来源
-
docker stats api
GET /containers/container_name/stats HTTP/1.1
-
cadvisor
其实是docker stats api的封装,同时提供了web页面查看,通过cadvisor获取stats的APIGET /api/v1.2/docker/<container_name>
监控框架
不同的监控框架都会有各自要求的数据结构,在数据采集完成后,需要转换成各自要求的数据结构;
-
Zabbix
-
架构图
-
接受的数据格式
key_name = value的形式,一次只能处理一个
-
Docker容器数据的采集方式
通过docker stats的API采集,自己处理数据
GET /containers/container_name/stats HTTP/1.1
-
-
Prometheus
-
架构图
-
接受的数据格式
<metric name>{<label name>=<label value>, ...} example: api_http_requests_total{method="POST", handler="/messages"}
-
Docker容器数据的采集方式
CAdvisor暴露了一个HTTP接口,且格式为prometheus要求的格式:
-
- Open-Falcon
- 架构图
-
接受数据的格式
{ "CounterType": "GAUGE", "Endpoint": "open-falcon-test", #这是一个特殊的tags,代表主机名 "Metric": "redis.keyspace_hit_ratio", "Step": 60, "TAGS": "port=6379", "Timestamp": 1449711164, "Value": 0.72131147540983609 }
-
Docker容器数据的采集方式
基于CAdvisor之上,将docker容器的数据转换成了要求的格式,采集指标如下:
Counters | Notes |
---|---|
cpu.busy | cpu使用情况百分比 |
cpu.user | 用户态使用的CPU百分比 |
cpu.system | 内核态使用的CPU百分比 |
cpu.core.busy | 每个cpu的使用情况 |
mem.memused.percent | 内存使用百分比 |
mem.memused | 内存使用原值 |
mem.memtotal | 内存总量 |
mem.memused.hot | 内存热使用情况 |
disk.io.read_bytes | 磁盘io读字节数 |
disk.io.write_bytes | 磁盘io写字节数 |
net.if.in.bytes | 网络io流入字节数 |
net.if.in.packets | 网络io流入包数 |
net.if.in.errors | 网络io流入出错数 |
net.if.in.dropped | 网络io流入丢弃数 |
net.if.out.bytes | 网络io流出字节数 |
net.if.out.packets | 网络io流出包数 |
net.if.out.errors | 网络io流出出错数 |
net.if.out.dropped | 网络io流出丢弃数 |