容器监控方案

发布时间 2023-12-20 14:58:11作者: Mrterrific

再次强调,时序数据库的ntp问题!!!!

ntpdate -u ntp.aliyun.com

当企业级容器上升到一定规模的时候,我们必须得实时监控每个容器的状态。我们可以执行

docket stats

这个统计命令是实时的,小公司的话,容器少还可以,够用。如果想看前几天的流量监控数据,显然是没有的,这个时候就需要更强大的容器监控软件。

容器监控架构组件

# docker stats

CONTAINER ID   NAME             CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O        PIDS
093020ea60c6   blog_mysql       0.08%     227.3MiB / 3.685GiB   6.03%     1.73MB / 802kB    29.3MB / 641MB   30
748d2e63ec01   blog_wordpress   0.00%     112.7MiB / 3.685GiB   2.99%     2.46MB / 2.93MB   163MB / 16.4kB   8
215e25e8b63e   blog_phpadmin    0.00%     40.87MiB / 3.685GiB   1.08%     314kB / 895kB     901kB / 41kB     7

通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据,一般小公司够用了

但是,docker stats统计结果只能是当前宿主机的全部容器,数据资料是实时的,没有地方存储、没有健康指标过线预警等功能。

如何解决,那就要用到接下来所要讲的方案:cAdvisor+InfluxDB+Grafana

cAdvisor监控收集 + InfluxDB存储数据 + Grafana展示图表

 

cAdvisor

cAdvisor 是一个容器资源监控工具,包括容器的内存、CPU、网络IO、磁盘IO等监控,同时提供了一个Web页面用于查看容器的实时运行状态。

cAdivisor 默认存储2分钟的数据,而且只是针对单物理机。

不过,cAdivisor提供了很多数据集成接口,支持InfluxDB、Redis、Kafka、Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。

cAdvisor 功能主要有两点:

  • 展示Host和容器两个层次的监控数据。
  • 展示历史变化数据。

InfluxDB

InfluxDB 使用Go语言编写的一个开源分布式时序、时间和指标数据库,无需外部依赖。

cAdvisor 默认旨在本机保存最近2分钟的数据,为了持久化存储数据和统一收集展示监控数据,需要将数据存储到InfluxDB中。

InfluxDB是一个时许数据库,专门用于存储时许相关数据,很适合存储CADvisor的数据,而且,CAdvisor本身已经提供了InfluxDB的集成方法,启动容器时指定配置即可。

InfluxDB主要功能:

  • 基于时间序列,支持与时间有关的相关函数(如最大、最小、求和等);
  • 可度量性:你可以实时对大量数据进行计算;
  • 基于事件:它支持任意的事件数据。

Grafana

Grafana 是一个开源的数据监控分析可视化平台,支持多种数据源配置(支持的数据源包括InfluxDB、Mysql、Elasticsearch、OpenTSDB、Graphite等)和丰富的插件及模块功能,支持图表权限控制和报警。

Grafana主要特性:

  • 灵活丰富的图形化选项;
  • 可以混合多种风格;
  • 支持白天和夜间模式;
  • 多个数据源。

部署思路

1.监控服务端主机,运行InfluxDB 、Grafana
涉及的容器环境变量
INFLUXDB_DB=cadvisor     # 初始数据库名称
INFLUXDB_USER=root        # 初始数据库用户名
INFLUXDB_USER_PASSWORD=www.yuchaoit.cn     # 初始数据库密码

docker run -d -p 8086:8086 --restart=always --name www.yuchaoit.cn_influxdb \
-e INFLUXDB_DB=cadvisor \
-e INFLUXDB_USER=root \
-e INFLUXDB_USER_PASSWORD=www.yuchaoit.cn \
-v influxdb_data:/var/lib/influxdb \
influxdb:1.8

部署grafana
docker run -d -p 3000:3000 --restart=always --name grafana \
-v grafana_data:/var/lib/grafana \
grafana/grafana




2.被监控的容器主机,运行CAdvisor
-storage_driver_db=cadvisor                          # influxdb的数据库名称
-storage_driver_host=10.0.0.200:8086    # influxdb的主机地址
-storage_driver_user=root                              # influxdb的用户名
-storage_driver_password=www.yuchaoit.cn          # influxdb的密码


docker run -d -p 8080:8080 --restart=always --name cadvisor \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
google/cadvisor \
-storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=192.168.92.148:8086 -storage_driver_user=root -storage_driver_password=www.yuchaoit.cn

单机一键部署

如果你想将cAdvisor+InfluxDB+Grafana以及其他的容器都安装到同一台主机上,那使用这个compose一套带走方案就可以了。

version: '3.1'

services:    
  influxdb:
    image: influxdb:1.8
    restart: always
    environment:
      - INFLUXDB_DB=cadvisor
      - INFLUXDB_USER=root
      - INFLUXDB_USER_PASSWORD=www.yuchaoit.cn
    ports:
      - "8086:8086"
    volumes:
      - influxdb_data:/var/lib/influxdb

  cadvisor:
    image: google/cadvisor
    depends_on:
      - influxdb
    command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086 -storage_driver_user=root -storage_driver_password=www.yuchaoit.cn
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

  grafana:
    user: "104"
    image: grafana/grafana
    restart: always

    depends_on:
      - influxdb
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana

volumes:
  influxdb_data: {}
  grafana_data: {}

检测语法

[root@docker-200 /tmp]#docker-compose config -q

运行compose

[root@docker-200 /tmp]#docker-compose up -d

检查监控组件3剑客

 

访问cAdvisor

http://10.0.0.200:8080/ 可视化入口
http://10.0.0.200:8080/metrics 指标接口

 

访问InfluxDB

http://10.0.0.200:8086/metrics

访问Grafana

http://10.0.0.200:3000/login

默认admin、admin
修改为www.yuchaoit.cn

添加InfluxDB数据源

http://10.0.0.200:8086

http://influxdb:8086
compose已经做好依赖关系了

 

添加cAdvisor的数据源

 

添加仪表盘

 

看到数据即可。