如何构建Docker容器监控系统

这篇文章主要讲解了“如何构建Docker容器监控系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何构建Docker容器监控系统”吧!

凌云ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

Docker作为目前十分出色的容器管理技术,得到大量企睐,在生产环境中使用Docker容器部署服务及应用的场景越来越多。所以面对日益庞大的docker服务群应用,如何具有针对性的,有效的监控也变成了企业运维人员工作需求。

容器信息采集及监控的方案有很多,有 docker自身的 docker stats命令、 Scout、Data Dog、Prometheus等,本次为搭建分享两款比较经典的容器开源监控组合方案Cadvisor+InfluxDB+Grafana和Cadvisor+Prometheus+Grafana。

Cadvisor+InfluxDB+Grafana

1.1、Cadvisor

Cadvisor是 Google用来监测单节点资源信息的监控工具。 Cadvisor提供了基础查询界面和http接口,方便其他组件如 Grafana、 Prometheus等进行数据抓取。 Cadvisor可以对Docker主机上的资源及容器进行实时监控和性能数据采集,包括CpU使用情况、内存使用情况、网络吞吐量及文件系统使用情况等。Cadvisor使用Go语言开发,利用Liunx的Cagroups获取容器的资源使用信息。
        Google的 Kubernetes中也默认地将其作为单节点的资源监控工具,各个节点默认会安装上 Advisor组件。

Cadvisor产品特点:

  • 可以展示主机和容器两个层次的监控数据。

  • 可以展示历史变化数据。

  • 谷歌公司的开源产品。

  • 监控指标齐全。

  • 方便部署,有官方的 docker镜像。

  • 默认只在本地保存1分钟数据,可以继承InfluxDB等第三方存储使用。

由于Cadvisor提供的操作界面略显简陋,而且需要在不同页面之间跳转,并且只能 监控一个Host,这不免会让人质疑它的实用性。但Cadvisor的一个亮点是他可以将监控到的数据到处给第三方工具,由这些工具进一步加工处理。

我们可以把Cadvisor定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据。

1.2、InfluxDB

InfluxDB是一个InfluxData开发的开源非关系型时序型数据库。它由Go写成,着力于髙性能地査询与存储时序型数据。 InfluxDB被广泛应用于存储系统的监控数据,loT行业的实时数据等场景。同类型的数据库产品还有 Elasticsearch、Graphite等。←
        InfluxDB应用场景:性能监控,应用程序指标,物联网传感器数据和实时分析等的后端存储。
nfluxDB主要功能:

  • 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等);

  • 可度量性:你可以实时对大量数据进行计算;

  • 基于事件:它支持任意的事件数据;

InfluxDB主要特点:

  • 无结构(无模式):可以是任意数量的列;

  • 支持拓展;

  • 支持min,max,sum, count,mean, median等一系列函数,方便统计;

  • 原生的HTTP支持,内置HTTP API;

  • 强大的类SQL语法;

1.3、Grafana

Grafana是一个可视化面板(Dashboard)工具,有着非常漂亮的图标和布局等展示功能,功能齐全的度量仪表盘和编译器,支持Graphite、zabbix、InfluxDB、Prometheus和Grafana主要特性

  • 灵活丰富的图形化选项;

  • 可以混合多种风格;

  • 支持白天和夜间模式;

  • 支持多个数据源;

1.4、监控组建架构

监控组件架构图:

如何构建Docker容器监控系统

提示:InfluxDB用于数据存储,Cadvisor用户数据采集,Grafana用于数据展示。

监控组件架构部署方案:

  1. 创建自定义网络monitor(自定义网络名称),用于后期容器加入此网络中;

  2. 创建InfluxDB容器,创建数据用户、数据库;

  3. 创建Cadvisor容器;

  4. 创建Grafana容器,配置grafana;

1.5、开始部署

[root@flag ~]# iptables -F 
[root@flag ~]# setenforce 0
setenforce: SELinux is disabled
[root@flag ~]# systemctl stop firewalld

安装docker-ce配置镜像加速 略

下载镜像组件

docker pull tutum/influxdb
docker pull google/cadvisor
docker pull grafana/grafana
[root@flag ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
grafana/grafana     latest              651ff2dc930f        2 weeks ago         187MB
google/cadvisor     latest              eb1210707573        2 years ago         69.6MB
tutum/influxdb      latest              c061e5808198        4 years ago         290MB

创建自定义网络

为了把后期创建的Cadvisor+InfluxDB+Grafana这三个容器都加入自己定义的网络便于理
解和管理,所以才新建一个自定义网络。(让这三个容器相互之间进行统一的管理和通信)

[root@flag ~]# docker network create monitor
0533cc85ed9f3f9d6865e091120aa2ed051cbde09d8daf342dab456b6d7fc0ca
[root@flag ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
8aecbd2a0b19        bridge              bridge              local
fc1c55c5fa26        host                host                local
0533cc85ed9f        monitor             bridge              local
8714055457ff        none                null                local

创建InfluxDB容器

启动容器,tutum/influxdb镜像这里没有指定版本,默认会pull最新版本的InfluxDB:

参数说明:

  • -d:后台运行此容器;

  • --name:启运容器分配名字influxdb;

  • --net:把容器加入到新的网络monitor;

  • -p:映射端口,8083端口为influxdb后台控制端口,8086端口是infuxdb的数据端口;

  • tutum/influxdb:通过这个容器来运行的,默认会在docker官方仓库pull下来;

查看influxdb容器是否启动:

[root@flag ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
a6f6543140ed        tutum/influxdb      "/run.sh">

访问influxdb控制台http://192.168.200.111:8083

如何构建Docker容器监控系统

        从上图可以看到,在Query Templates选项中提供了常用的操作模板,可根据这些模板来管理influxdb,下面我们就来创建数据库和数据库用户。

CREATE USER "root" WITH PASSWORD '890' WITH ALL PRIVILEGES

如何构建Docker容器监控系统

        创建Cadvisor数据库cadvisor、用户root,用户和数据库大家可以自行随意定义,用于后期grafana的配置:

CREATE DATABASE "cadvisor"

如何构建Docker容器监控系统

创建Cadvisor容器

[root@flag ~]# docker run -d --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --net monitor --publish=8080:8080 --name=cadvisor google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086
effa70d8cd00189b6ea51ae8e187d29df574fcd6194e5deda2ab5cd218430a55

参数说明:

  • -d:后台运行次容器;

  • --name:启动容器分配名字Cadvisor;

  • --net:把容器加入到新的网络monitor;

  • -p:映射端口8080;

  • --mout:把宿主机的相文目录绑定到容器中,这些目录都是Cadvisor需要采集的目录文件和监控内容;

  • -storage_driver:需要指定Cadvisor的存储驱动、数据主机、数据库名;

  • google/Cadvisor:通过Cadvisor这个镜像来运行容器,默认会在docker官方仓库把镜像pull下来;

查看Cadvisor容器;

[root@flag ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
effa70d8cd00        google/cadvisor     "/usr/bin/cadvisor -…"   6 minutes ago       Up 6 minutes        0.0.0.0:8080->8080/tcp   cadvisor

通过http://192.168.200.10:8080短裤访问测试一下,第一次访问这个页面有点慢

如何构建Docker容器监控系统

        从上图可以看到,其实Cadvisor也有基础的图形界面展示功能,我么这里主要由它来做数据采集。

创建grafana容器

[root@flag ~]# docker run -d --name grafana --net monitor -p 3000:3000 grafana/grafana
6a4a527897bcf6b009ae8cc00e0ed21f1e330f9cd0aa4e5f004685a55ed38e71

查看运行结果:

[root@flag ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
6a4a527897bc        grafana/grafana     "/run.sh"           8 seconds ago       Up 6 seconds        0.0.0.0:3000->3000/tcp   grafana

        访问grafana,通过http://192.168.200.10:3000端口的方式访问,默认账号密码(admin/admin),首次陆续需要更新密码。

如何构建Docker容器监控系统

如何构建Docker容器监控系统

添加数据源Add data source,如下图:

如何构建Docker容器监控系统

如何构建Docker容器监控系统

如何构建Docker容器监控系统

如何构建Docker容器监控系统

新建Dashboard,如下图:

如何构建Docker容器监控系统

如何构建Docker容器监控系统

如何构建Docker容器监控系统

如何构建Docker容器监控系统

如何构建Docker容器监控系统

如何构建Docker容器监控系统

如何构建Docker容器监控系统

Cadvisor+Prometheus+Grafana

2.1、Cadvisor产品简介

        Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的方式向用户展示。

2.2、部署Cadvisor

被监控主机上部署Cadvisor容器

[root@10 ~]# docker rm -f $(docker ps -aq)
6a4a527897bc
effa70d8cd00
a6f6543140ed
[root@10 ~]# 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=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
e7493105e8a02b82f1ec67517a2ee28124d2b6f2659d4c9524361ca0cdc95350

2.3、访问Cadvisor页面

访问http://192.168.200.10 cadvisor页面看到手机到的数据

如何构建Docker容器监控系统

2.4、Prometheus产品简介

        Prometheus 是一个最初在 SoundCloud 上构建的开源系统监视和警报工具包。自 2012年成立以来,很多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发者和用户社区。 它现在是一个独立的开源项目,可以独立于任何公司进行维护。 为了强调这一点,并阐明项目的治理结构,Prometheus于2016年加入Cloud Native Computing Foundation,作为继 Kubernetes 之后的第二个托管项目。


Prometheus 的主要特征有∶

  • 多维度数据模型-由指标键值对标识的时间序列数据组成

  • PromQL,一种灵活的查询语言

  • 不依赖分布式存储;单个服务器节点是自治的

  • 以 HTTP 方式,通过 pull模型拉取时间序列数据

  • 支持通过中间网关推送时间序列数据

  • 通过服务发现或者静态配置,来发现目标服务对象

  • 支持多种多样的图表和界面展示

2.5、部署Prometheus

[root@10 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
prom/prometheus     latest              0bc82119c95b        2 weeks ago         169MB
grafana/grafana     latest              651ff2dc930f        2 weeks ago         187MB
google/cadvisor     latest              eb1210707573        2 years ago         69.6MB

先准备配置

[root@10 ~]# vi /tmp/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=` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'docker'  #定义一个叫docker的组
    static_configs:
      - targets: ['192.168.200.10:8080']        #填写一个或多个cadvisor的主机地址用逗号隔开

运行容器

[root@10 ~]# docker run -d \
--name=prometheus -p 9090:9090 \
-v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /etc/localtime:/etc/localrime \
prom/prometheus

2.6、访问Prometheus页面

http://192.168.200.10:9090

如何构建Docker容器监控系统

如何构建Docker容器监控系统

看到docker组状态up为正常

查询项是可以查到数据的

如何构建Docker容器监控系统

2.7、部署Grafana

[root@10 ~]# docker run -d \
--name=grafana \
-p 3000:3000 \
grafana/grafana

2.8、配置Grafana

访问http://192.168.200.10:3000默认账户admin密码admin首次登陆需要修改密码

如何构建Docker容器监控系统

如何构建Docker容器监控系统

配置数据源

如何构建Docker容器监控系统

如何构建Docker容器监控系统

如何构建Docker容器监控系统

如何构建Docker容器监控系统

导入模板

如何构建Docker容器监控系统

如何构建Docker容器监控系统

选择对应的数据源,点击导入,就可以看到被监控主机的数据

如何构建Docker容器监控系统

准备测试容器

如何构建Docker容器监控系统

感谢各位的阅读,以上就是“如何构建Docker容器监控系统”的内容了,经过本文的学习后,相信大家对如何构建Docker容器监控系统这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


网页名称:如何构建Docker容器监控系统
分享链接:http://myzitong.com/article/gpdhhe.html