docker——监控以及常用监控工具介绍和docker部署

容器监控

在公司的时候,监控类的还是接触的比较多。基本上就是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 来收集容器信息 所有节点运⾏以下命令来安装cAdvisor
docker 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 -p 9100: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 -A 1 docker0
# 创建⽬录/opt/prometheus
mkdir -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 -p 9090: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 -p 3000: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

你可能感兴趣的:(docker,prometheus,grafana)