1 docker监控方式
Docker的监控,可以使⽤Docker⾃带的stats命令来获取当前主机上运⾏中的容器的资源使⽤情况。例如:容器的CPU使⽤率、内存占⽤、⽹络IO以及磁盘IO等指标。
另外,Google开源的CAdvisor⼯具就是专⻔针对容器的性能进⾏监测和分析。它提供了⼀个直观的UI界⾯,⽤于展示容器的实时或历史资源使⽤情况。
最为重要的是,CAdvisor能够导出与Prometheus兼容的监控指标,这使得Prometheus可以抓取这些指标,从⽽对容器的资源使⽤进⾏监控和分析。 Cadvisor项⽬地址:(https://github.com/google/cadvisor/releases)
2 Cadvisor
2.1 运行docker容器
运行两个容器应用
docker run -d --memory=100m -p 8081:80 --name nginx1 hub.atomgit.com/amd64/nginx:latest
docker run -d --memory=50m -p 8082:80 --name nginx2 hub.atomgit.com/amd64/nginx:latest
2.2 运⾏Cadvisor
2.3 配置Prometheus
2.4 Docker常⽤指标与示例
2.4.1 Docker CPU相关指标
指标名称 | 指标类型 | 指标含义 |
container_cpu_usage_seconds_total | counter | 容器在所有CPU核⼼上累积使⽤的时间,以秒为单位。 |
container_cpu_user_seconds_total | counter | 容器在所有CPU核⼼user模式下累积使⽤的时间,以秒为单位。 |
container_cpu_system_seconds_total | counter | 容器在所有CPU核⼼system模式下累积使⽤的时间,以秒为单位。 |
2.4.2 Docker 内存相关指标
指标名称 | 指标类型 | 指标含义 |
container_memory_usage_bytes | gauge | 容器当前正在使⽤的内存。包括常驻内存,缓存、交换(swap)等类型的内存使⽤情况。 |
container_memory_working_set_bytes | gauge | 容器当前实际使⽤的内存量。仅包括常驻内存,不包括缓存,以及可被回收的内存,因此更它准确。 |
container_spec_memory_limit_bytes | gauge | 容器的内存使⽤上限。如果容器没有设置内存限制,则可能会显示0,或者宿主机的内存。 |
machine_memory_bytes | gauge | 代表当前主机(宿主机)的总内存量(以字节为单位) |
2.4.3 Docker磁盘相关指标
指标名称 | 指标类型 | 指标含义 |
container_fs_writes_b ytes_total | counter | 容器写⼊的总⼤⼩。 |
container_fs_reads_bytes_total | counter | 容器读取的总⼤⼩。 |
container_fs_writes_t otal | counter | 容器⾃启动以来的⽂件系统IO写操作的总次数。(IOPS) |
container_fs_reads_to tal | counter | 容器⾃启动以来的⽂件系统IO读操作的总次数。(IOPS) |
2.4.4 Docker inode相关指标
指标名称 | 指标类型 | 指标含义 |
container_fs_inodes_free | gauge | 容器的空闲inode数量。 |
container_fs_inodes_total | gauge | 容器的inode总数。 |
2.4.5 Docker⽹络相关指标
指标名称 | 指标类型 | 指标含义 |
container_network_transmit_bytes_total | counter | 容器⾃启动以来发送的⽹络流量的总量,以字节为单位 |
container_network_receive_bytes_total | counter | 容器⾃启动以来接收的⽹络流量的总量,以字节为单位。 |
2.4.6 Docker其他相关指标
指标名称 | 指标类型 | 指标含义 |
container_tasks_state | gauge | 跟踪不同状态下的容器状态的数量,例如:(running、sleeping、stopped)等 |
container_start_time_seconds | gauge | 容器启动的时间戳,可以⽤来确定容器的运⾏时⻓。 |
container_last_seen | gauge | 容器最后⼀次被探测到的时间戳。 |
2.5 Docker告警规则⽂件
2.5.1 告警规则⽂件
2.5.2 检查rules语法
/app/module/prometheus/promtool check rules /app/module/prometheus/rules/docker_rules.yml
2.5.3 重新加载Prometheus
curl -X POST http://192.168.137.131:9090/-/reload
2.5.4 验证告警规则
2.5.5 模拟告警测试
2.6 导⼊Docker图形
导⼊⼀个Docker Container的Grafana模板。Dashboard ID为 11600