前言
有时候我们想查看实时的Docker
容器占用资源的情况和主机的资源占用,我们还需要ssh
到主机,执行docker stats
和top
命令,数据不直观,无法显示一段时间来的数据变化。我们基于cAdvisor
,Grafana
,Prometheus
,node_exporter
搭建一套可视化监控平台。主要用到的组件如下。
- Grafana: 数据可视化展示平台。
- Prometheus:数据结构化存储。
- cAdvisor:容器监控(实时数据,不存储数据)。
- node_exporter:prometheus提供的监控主机的软件。
cAdvisor
拉取cAdvisor
镜像并运行。
# 拉取镜像
docker pull google/cadvisor:v0.33.0
#运行容器
docker run -d \
-v /:/rootfs \
-v /var/run:/var/run \
-v /sys:/sys \
-v /var/lib/docker:/var/lib/docker \
-p 4000:8080 \
--privileged=true \
--name cadvisor google/cadvisor:v0.33.0
运行容器后,我们访问 4000 端口,即可看到容器的实时监控数据,但是它并不存储数据,所以我们需要使用其它组件来存储,如influxDB
或者prometheus
等。metrics
的地址为ip:端口/metrics
。
Prometheus
拉取镜像并运行容器。Prometheus
需要一个yaml
格式的配置文件,我们在运行时指定挂载的配置文件。我们可以上官网找一份原始的配置文件,也可以运行一个临时的容器,使用docker cp
从容器/etc/prometheus/prometheus.yml
里面拷贝出来。命令如下:
# 拉取镜像
docker pull prom/prometheus:v2.24.0
# 运行临时容器,用于拷贝原始配置文件
docker run --name prometheus-temp prom/prometheus:v2.24.0
# 拷贝文件到宿主机
docker cp prometheus-temp:/etc/prometheus/prometheus.yml /usr/local/prometheus/config
# 删除临时容器
docker rm prometheus-temp
# 修改prometheus.yml配置文件,添加cAdvisor端点,启动容器
docker run -d -p 5500:9090 \
-v /usr/local/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml \
--name prometheus \
prom/prometheus:v2.24.0
prometheus.yml
配置
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
#============= 添加cAdvisor端点,地址为192.168.0.10:5500/metrics, metrics可省略
- job_name: 'docker监控'
static_configs:
- targets: ['192.168.0.10:5500']
启动成功后,我们访问宿主机5500
端口,已经成功启动,等一会儿,输入container
发现已经有数据了,cAdvisor数据以container开头,所以prometheus
已经成功获取cAdvisor
数据。
Grafana
docker pull grafana/grafana:7.3.7
# 运行
docker run -d -p 5000:3000 --name grafana grafana/grafana:7.3.7
浏览器打开5000端口,成功进入grafana
输入,默认用户名密码都为admin
修改密码后,进入主界面。
node_exporter
node_exporter
是prometheus
提供的开源的主机监控软件,也可以使用docker
运行,但官方并不推荐使用docker
运行,所以我们直接安装在宿主机上。
# 从github获取,我是放在 /usr/local/node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
# 解压
tar zxf node_exporter-1.0.1.linux-amd64.tar.gz
# 创建启动脚本
cat <<EOF > /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=https://github.com/prometheus
[Service]
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WanteBy=muti-user.target
EOF
# 开机自启
systemctl enable node_exporter
# 启动
systemctl start node_exporter
node_exporter
默认的端口是9100
,我们访问浏览器ip:9100/metrics
发现已经有数据了,启动成功。我们需要配置Prometheus
也获取node_exporter
数据,我们在prometheus.yml
中增加端点,重启Prometheus
,访问Prometheus
地址,使用node
搜索,有提示,说明已经成功监控node_exporter
- job_name: '主机监控'
static_configs:
- targets: ['192.168.0.10:9100']
配置容器可视化监控
增加数据源,添加Prometheus
数据源,点击save&test
成功访问。
我们可以上grafana
官方寻找合适的模板或者自己自定义添加图表,这里我们选择导入grafana
容器监控的模板id为193
,修改名称为docker监控
,导入,进入页面,已经成功监控容器了。
配置主机可视化监控
我们同样选择导入一个新的模板,id为9276
,改名为主机监控
,保存后进入页面,已经成功监控主机状态。
如果无法读取网络数据,有可能是网卡信息错误,我们手动修改一下网卡信息即可。
至此,我们旧成功的搭建了主机和容器的可视化监控。
评论区