容器监控
在公司的时候,监控类的还是接触的比较多。基本上就是grafana + datasource(prometheus、pg、es) + 告警规则
下面简单介绍一些监控维度以及几种数据源工具和grafana使用(全部以docker部署,方便学习)
监控维度
在主机上运⾏的容器是监控的重中之重。作为应⽤的直接载体,使⽤者需要对容器的各类信息进⾏实时监控,以保证应⽤的正常运⾏。Docker在底层使⽤了Linux内核提供的资源机制——namespace和cgroups,以此来⽀持容器的运⾏。通过这些机制,我们可以很⽅便地获取容器的各项监控指标。
- 容器的基本信息
- 容器的运⾏状态
- 容器的⽤量信息
容器的基本信息包括容器的总数、ID、名称、镜像、启动命令、端⼝等信息。容器监控时可以依据容器的运⾏状态,即运⾏中、暂停、停⽌及异常退出,来统计各状态的容器的数量,并实时反馈各个容器的运⾏状态。容器的⽤量信息则是⽤户最关⼼的,也是监控中最为复杂的部分,它可以统计容器的CPU使⽤率、内存使⽤量、块设备I/O使⽤量、⽹络使⽤情况等资源的使⽤情况
监控命令
- docker ps 命令
通过使⽤docker ps 命令,可以查看当前主机上的容器信息,包括容器ID、镜像名、容器启动执⾏命令、创建时间、状态、端⼝信息和容器名称。
- docker images 命令
通过使⽤docker images 命令,可以查看当前主机上的镜像信息,包括镜像所属的库、标签、ID、创建时间和实际⼤⼩。该命令默认只会列出所有顶层镜像的信息,可以通过-a参数来查看所有中间层的镜像信息
- docker stats命令
docker stats 命令是Docker1.5版本提供的命令,专⻔⽤于容器状态信息的统计,同时还有配套的API(GET /containers/(id)/stats),可供开发⼈员调⽤。使⽤该命令,可以实时监控运⾏中的容器运⾏情况,包括CPU、内存、块设备I/O和⽹络I/O,这些信息都会定期刷新以现实最新运⾏情况。
docker stats container_name_or_id
echo-e"GET /containers/cidemo/stats HTTP/1.0\r\n"|nc-U /var/run/docker.sock
者可以使⽤stats api 将容器的运⾏状态信息传递到⾃⼰构建的应⽤中,以实现容器的的系统监控
- docker inspect 命令
通过使⽤docker inspect 命令,可以查看镜像或容器的底层详细信息,以此来了解镜像或容器的完整构建信息,包括基础配置、主机配置、⽹络设置、状态信息等。同时,如果需要查看其他特定信息,可以通过-f参数来设定输出格式。
docker inspect -f{{.NetworkSettings.IPAddress}}<容器名称/ID>
- docker top 命令
通过使⽤docker top 命令,可以查看正在运⾏的容器中的进程的运⾏情况。该命令可以使⽤户在没有通过/bin/bash终端与容器交互式,帮助⽤户查看容器内的进程信息,包括进程号、⽗进程号、命令等。
- docker port
docker port 命令的⽤途较为特定化,⽤于查看容器与主机之间的端⼝映射关系。
常用监控工具
cAdvisor
cAdvisor对Node机器上的资源及容器进⾏实时监控和性能数据采集,包括CPU使⽤情况、内存使⽤情况、⽹络吞吐量及⽂件系统使⽤情况。
源码
cadvisor获取的典型监控指标
指标名称 类型 含义
container_cpu_load_average_10s gauge 过去10秒容器CPU的平均负
载
container_cpu_usage_seconds_total counter 容器在每个CPU内核上的累
积占⽤时间 (单位:秒)
container_cpu_system_seconds_total counter System CPU累积占⽤时间
(单位:秒)
container_cpu_user_seconds_total counter User CPU累积占⽤时间
(单位:秒)
container_fs_usage_bytes gauge 容器中⽂件系统的使⽤量
(单位:字节)
container_fs_limit_bytes gauge 容器可以使⽤的⽂件系统总
量(单位:字节)
container_fs_reads_bytes_total counter 容器累积读取数据的总量
(单位:字节)
container_fs_writes_bytes_total counter 容器累积写⼊数据的总量
(单位:字节)
container_memory_max_usage_bytes gauge 容器的最⼤内存使⽤量(单
位:字节)
container_memory_usage_bytes gauge 容器当前的内存使⽤量(单
位:字节
container_spec_memory_limit_bytes gauge 容器的内存使⽤量限制
machine_memory_bytes gauge 当前主机的内存总量
container_network_receive_bytes_total counter 容器⽹络累积接收数据总量
(单位:字节)
container_network_transmit_bytes_total counter 容器⽹络累积传输数据总量
(单位:字节)
cAdvisor 对外暴露的Prometheus容器指标
docker启动cAdvisor
# 安装cAdvisor 来收集容器信息 所有节点运⾏以下命令来安装cAdvisordocker run -d\--volume=/:/rootfs:ro \--volume=/var/run:/var/run:ro \--volume=/sys:/sys:ro \--volume=/var/lib/docker/:/var/lib/docker:ro \--volume=/dev/disk/:/dev/disk:ro \--publish=8081:8080 \--detach=true \--name=cadvisor \--privileged=true \-v"/etc/localtime:/etc/localtime"\
google/cadvisor:latest
Node Exporter
Node Exporter 是prometheus官⽅提供的agent,是非常常用的采集agent。 同时可以在代码中自定义实现exporter,将指标暴露给prometheus采集
1.源码地址
2.默认启⽤指标
3.默认禁用指标
安装Node Exporter
# 安装Node Exporter 来收集硬件信息docker run -d-p9100:9100 \-v"/proc:/host/proc"\-v"/sys:/host/sys"\-v"/:/rootfs"\-v"/etc/localtime:/etc/localtime"\--net=bridge \
prom/node-exporter \--path.procfs /host/proc \--path.sysfs /host/sys \
--collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)
($|/)"
Prometheus
⼀个系统和服务监控系统。它以给定的时间间隔从配置的⽬标收集度量,评估规则表达式,显示结果,并在观察到指定条件时触发警报。
- 多维数据模型(由度量名称和键/值维度集定义的时间序列)
- PromQL提供⼀种强⼤⽽灵活的查询语⾔
- 不依赖分布式存储;单服务器节点是⾃治的
- ⼀种⽤于时间序列采集的HTTP pull模型
- 通过批处理作业的中间⽹关⽀持推送时间序列
- 通过服务发现或静态配置发现⽬标
- 多种图形和仪表板⽀持模式
源码地址
安装
# 拉取镜像docker pull prom/prometheus
# 查看docker的ip地址ifconfig|grep-A1 docker0
# 创建⽬录/opt/prometheusmkdir-p /opt/prometheus
# 新增prometheus.yml⽂件vim /opt/prometheus/prometheus.yml
# prometheus.yml的内容如下# 其中targets中的⽹址是对应服务器所在的地址
global:
scrape_interval: 20s
evaluation_interval: 20s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['192.168.28.12:9090']
- job_name: 'linux'
static_configs:
- targets: ['192.168.28.12:9100']
- job_name: 'cadvisor'
static_configs:
- targets: ['192.168.28.12:8081']# 创建prometheus容器docker run -itd--name prometheus -p9090:9090 \-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \-v /etc/localtime:/etc/localtime:ro \
prom/prometheus
grafana
⼀个开源的监控系统Web UI ,⽀持多种数据源。⽀持⾃定义看板
可以去官网导入各种模板,并配置数据源配合使用
官网
docker run -d-i-p3000:3000 \-v"/etc/localtime:/etc/localtime"\-e"GF_SERVER_ROOT_URL=http://grafana.server.name"\-e"GF_SECURITY_ADMIN_PASSWORD=admin123"\--net=bridge \
grafana/grafana
访问对应主机3000端口即可,admin账户密码设置为admin123
版权归原作者 咚伢 所有, 如有侵权,请联系我们删除。