S_lion's Studio

cadvisor+node_exporter+prometheus+grafana实现docker与主机监控

字数统计: 1k阅读时长: 4 min
2021/07/12 Share

网上一大堆关于docker监控的工具和案例,这章主要说下如何通过cadvisor+node_exporter+prometheus完成对docker及主机的监控,并且通过grafana来完成监控数据的展示。

简述下今天用到的几个组件,其中node_exporter是用来监控主机信息的,cadvisor是用来监控容器信息的,这俩组件对于prometheus而言都是采集器的作用,prometheus会收集这些采集器的监控数据,存储到内置的数据库中,后续可以通过Prometheus表达式来进行过滤查看等操作(这篇不作为重点讲),最后Grafana 会对接Prometheus,将监控数据通过Web UI的方式展示出来。

环境准备

先说下我本地的环境:

主机名 IP地址 已运行docker容器
slions_pc1 192.168.100.10 slions_nginx1;slions_busybox1
slions_pc2 192.168.100.11 slions_nginx2;slions_busybox2

准备了2台机器,并且上面已经启动了一些容器。

安装node_exporter

2台机器都执行以下命令(–name处根据自己喜好改):

1
2
3
4
5
6
7
[root@slions_pc1 ~]# docker run -d \
> --net="host" \
> --pid="host" \
> -v "/:/host:ro,rslave" \
> --name slions_node-exporter1 \
> quay.io/prometheus/node-exporter:latest \
> --path.rootfs=/host

安装好后可以检查下node_exporter默认的监听端口是否存在,如下说明正常

1
2
[root@slions_pc1 ~]# ss -lntp|grep 9100
LISTEN 0 128 :::9100 :::* users:(("node_exporter",pid=12094,fd=3))

可以使用chrome访问下,出现如下则说明成功,如果你使用浏览器刷不出来数据请先确保防火墙是否关闭。

image-20210713101912265

安装cadvisor

2台机器都执行以下命令(–name处根据自己喜好改):

1
2
3
4
5
6
7
8
9
10
11
[root@slions_pc1 ~]# docker run \
> --volume=/:/rootfs:ro \
> --volume=/var/run:/var/run:ro \
> --volume=/sys:/sys:ro \
> --volume=/var/lib/docker/:/var/lib/docker:ro \
> --publish=8080:8080 \
> --detach=true \
> --name=slions_cadvisor1 \
> --privileged \
> --network host \
> google/cadvisor

安装好后可以检查下node_exporter默认的监听端口是否存在,如下说明正常

1
2
[root@slions_pc1 ~]# ss -lntp|grep 8080
LISTEN 0 128 :::8080 :::* users:(("cadvisor",pid=12344,fd=9))

同样我们可以使用chrome访问下主机的8080,如图出现了cadvisor的监控数据。

image-20210713104008822

安装prometheus

选择第一台机器作为prometheus服务端,prometheus服务需要通过配置文件来读取监控目标,我们先在本地编写配置文件,后续通过挂载的方式置入服务中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@slions_pc1 ~]# cat prometheus/prometheus.yml
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
evaluation_interval: 15s # Evaluate rules every 15 seconds.

# Attach these extra labels to all timeseries collected by this Prometheus instance.
external_labels:
monitor: 'slions-monitor'

rule_files:
# - 'prometheus.rules.yml'

scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']

- job_name: 'node'
scrape_interval: 5s
static_configs:
- targets:
- 192.168.100.10:9100
- 192.168.100.11:9100

- job_name: 'docker'
scrape_interval: 5s
static_configs:
- targets:
- 192.168.100.10:8080
- 192.168.100.11:8080

启动Prometheus服务:

1
[root@slions_pc1 ~]# docker run -d -p 9090:9090 --volume /root/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml --name slions_prometheus --network host prom/prometheus

验证服务是否正常启动:

1
2
[root@slions_pc1 ~]# ss -lntp|grep 9090
LISTEN 0 128 :::9090 :::* users:(("prometheus",pid=13113,fd=7))

chrome访问http://192.168.100.10:9090可以看到已经出现了prometheus的页面

image-20210713110434391

点击Status中的Targets按钮,会发现正是我们配置的那几个监控目标

image-20210713110811438

安装grafana

在第一台机器部署grafana,启动时设置登录密码

1
2
[root@slions_pc1 ~]# docker run -itd --name slions_grafana -p 3000:3000 -e "GF_SERVER_ROOT_URL=http://grafana.server.name" -e "GF_SECURITY_ADMIN_PASSWORD=slions" --network host grafana/grafana

查看服务是否正常:

1
2
[root@slions_pc1 ~]# ss -lntp|grep 3000
LISTEN 0 128 :::3000 :::* users:(("grafana-server",pid=13581,fd=10))

使用浏览器查看,用户名为admin,密码是我启动服务时设置的slions

image-20210713111849209

选择DATA SOURCES来添加数据源:

image-20210713112133355

选择Prometheus后,将URL填写上我们自己的服务地址就可以保存了:

image-20210713112328341

我们可以直接找一个合适的模板来导入

image-20210713112714427

模板在grafana官网找就好:

image-20210713112947279

比如我找到一个看起来不错的模板,点击Download JSON下载到本地

image-20210713113715380

然后在import页面导入此JSON文件就好了,选择生效于我们刚创建好的slions_Prometheus:

image-20210713113812164

最后让我们看一下监控的效果吧。

image-20210713114101676

参考文档

cadvisor: https://github.com/google/cadvisor

node_exporter: https://github.com/prometheus/node_exporter

prometheus: https://github.com/prometheus/prometheushttps://prometheus.io/

grafana: https://grafana.com/docs/grafana/latest/installation/docker/

CATALOG
  1. 1. 环境准备
  2. 2. 安装node_exporter
  3. 3. 安装cadvisor
  4. 4. 安装prometheus
  5. 5. 安装grafana
  6. 6. 参考文档