侧边栏壁纸
博主头像
彼豆博主等级

行动起来,活在当下

  • 累计撰写 14 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Docker容器可视化和主机可视化监控

彼豆
2021-01-17 / 0 评论 / 1 点赞 / 23 阅读 / 8037 字

前言

有时候我们想查看实时的Docker容器占用资源的情况和主机的资源占用,我们还需要ssh到主机,执行docker statstop命令,数据不直观,无法显示一段时间来的数据变化。我们基于cAdvisorGrafanaPrometheusnode_exporter 搭建一套可视化监控平台。主要用到的组件如下。

  • Grafana: 数据可视化展示平台。
  • Prometheus:数据结构化存储。
  • cAdvisor:容器监控(实时数据,不存储数据)。
  • node_exporter:prometheus提供的监控主机的软件。

docker-moniter-1

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

cadvisor

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数据。

prometheus

Grafana

docker pull grafana/grafana:7.3.7

# 运行
docker run -d -p 5000:3000 --name grafana grafana/grafana:7.3.7

浏览器打开5000端口,成功进入grafana输入,默认用户名密码都为admin修改密码后,进入主界面。

grafana

node_exporter

node_exporterprometheus提供的开源的主机监控软件,也可以使用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']

node_exporter

配置容器可视化监控

增加数据源,添加Prometheus数据源,点击save&test成功访问。

grafana

grafana

我们可以上grafana官方寻找合适的模板或者自己自定义添加图表,这里我们选择导入grafana容器监控的模板id为193,修改名称为docker监控,导入,进入页面,已经成功监控容器了。

template

docker monitor

配置主机可视化监控

我们同样选择导入一个新的模板,id为9276,改名为主机监控,保存后进入页面,已经成功监控主机状态。

node_exporter

如果无法读取网络数据,有可能是网卡信息错误,我们手动修改一下网卡信息即可。

network

至此,我们旧成功的搭建了主机和容器的可视化监控。

1

评论区