GVKun编程网logo

Docker 监控(1):prometheus+cadviso+grafana 实现对 docker 容器和宿主机进行监控

16

在本文中,我们将给您介绍关于Docker监控的详细内容,并且为您解答1:prometheus+cadviso+grafana实现对docker容器和宿主机进行监控的相关问题,此外,我们还将为您提供关于

在本文中,我们将给您介绍关于Docker 监控的详细内容,并且为您解答1:prometheus+cadviso+grafana 实现对 docker 容器和宿主机进行监控的相关问题,此外,我们还将为您提供关于CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统、cAdvisor+InfluxDB+Grafana 监控Docker、cAdvisor+Prometheus+Grafana监控docker、CentOS-Docker监控minio集群(grafana+prometheus)的知识。

本文目录一览:

Docker 监控(1):prometheus+cadviso+grafana 实现对 docker 容器和宿主机进行监控

Docker 监控(1):prometheus+cadviso+grafana 实现对 docker 容器和宿主机进行监控

Prometheus 特点:

	1)多维数据模型:由度量名称和键值对标识的时间序列数据(TSDB:存储临时数据还行)
	2)promSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
	3)不依赖分布式存储,单个服务器节点可直接工作
	4)基于HTTP的pull方式采集时间序列数据
	5)推送时间序列数据通过PushGateway组件支持
	6)通过服务发现或者静态配置发现目标
	7)多种图形模式及仪表盘支持(grafana)

在这里插入图片描述

各个组件的作用:

Prometheus Server	收集指标和存储时间序列数据,并提供查询接口
ClientLibrary	客户端库
Push Gateway	短期存储指标数据,主要用于临时性的任务
Exports	采集已有的第三方服务监控指标并暴露metrics
Altertmanager	告警
Web UI	简单的web控制台

最终展示:(官网找的最新模板,在导入模板中替换就行了)

在这里插入图片描述

一、安装 prometheus

Docker部署:https://prometheus.io/docs/prometheus/latest/installation/
1、将配置文件放入/tmp中,并生成服务端
	[root@prometheus ~]# mv prometheus.yml /tmp/
	[root@prometheus ~]# docker run -d --name=prometheus -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
2、使用网页查看能正常访问
	http://192.168.200.90:9090

在这里插入图片描述

二、配置监控 (cadvisor)

cadvisor部署:https://github.com/google/cadvisor
1、生成容器监控(在需要监控的docker宿主机中进行配置)
		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
2、使用网页查看能正常访问
	http://192.168.200.80:8080

在这里插入图片描述

三、部署 granafa

granafa模板地址:https://grafana.com/grafana/dashboards
	1、生成granafa容器(可在任何docker宿主机中运行,我这里在prometheus服务器服务器中运行的)
		[root@prometheus ~]# docker run -d --name=grafana -p 3000:3000 grafana/grafana
	2、监控docker
		1)修改prometheus.yml文件监控容器
			[root@prometheus ~]# vim /tmp/prometheus.yml 
			  - job_name: ''prometheus''    #默认的名字,

			  - job_name: "prometheus-docker"	 	#添加,名字不要和默认的一致
			    static_configs:						#添加
			    - targets: [''192.168.200.90:8080'']	#添加

			  - job_name: "docker01"				#添加
			    static_configs:						#添加
			    - targets: [''192.168.200.80:8080'']	#添加
			[root@prometheus ~]# docker restart prometheus 		#更新配置文件
		2)随便生成一个测试容器
			[root@docker01 ~]# docker run --name nginx -d nginx

3)查看 prometheus 是否监控到数据
在这里插入图片描述
在这里插入图片描述

4)配置 granafa 导入 prometheus
在这里插入图片描述
5)添加模板
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

6)查看生成的图像
在这里插入图片描述

3、监控docker宿主机
		1)修改prometheus.yml文件监控容器,并加载配置文件
			[root@prometheus ~]# vim /tmp/prometheus.yml		
			  - job_name: "Linux"
			    static_configs:
			    - targets: [''192.168.200.80:9100'']
			[root@prometheus ~]# docker restart prometheus
		2)下载客户端监控端
			[root@docker01 ~]# wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
		3)解压tar包
			[root@docker01 ~]# tar xzvf ./node_exporter-0.17.0.linux-amd64.tar.gz -C /usr/local/
			[root@docker01 ~]# cd /usr/local/
			[root@docker01 local]# mv ./node_exporter-0.17.0.linux-amd64/ ./node_exporter
		4)生成系统文件
			[root@docker01 node_exporter]# vim ./node_exporter.sh 

				#!/bin/bash

				cat <<EOF >/usr/lib/systemd/system/node_exporter.service
				[Unit]
				Description=https://prometheus.io

				[Service]
				Restart=on-failure
				ExecStart=/usr/local/node_exporter/node_exporter

				[Install]
				WantedBy=multi-user.target
				EOF

				systemctl daemon-reload
				systemctl enable node_exporter
				systemctl restart node_exporter
			[root@docker01 node_exporter]# sh ./node_exporter.sh
		5)查看服务是否启动
			[root@docker01 node_exporter]# ps -aux | grep node
				root      43063  0.1  1.1 113740 11772 ?        Ssl  10:18   0:00 /usr/local/node_exporter/node_exporter
			[root@docker01 node_exporter]# netstat -anptu | grep node
				tcp6       0      0 :::9100                 :::*                    LISTEN      43063/node_exporter

6)查看 promenadetheus 采集的数据
在这里插入图片描述
7)导入模板
在这里插入图片描述
在这里插入图片描述

8)查看图像
在这里插入图片描述
9)解决图像中网络无数据的现象
修改为 ens32 (linux 主机的真实网卡)
在这里插入图片描述
#查看图像
在这里插入图片描述

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

利用docker compose组合应用并利用scale可以快速对容器进行扩充,而docker compose启动的服务容器都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的运行情况,如:cpu使用率,内存使用率,网络状态,磁盘空间等一系列随时间变化的时序数据信息,都需要进行了解,因此监控是必须的。

容器监控方案选择

对于容器的监控方案可谓多种多样,除了docker本身自带的 docker stats 命令,还有Scout,Data Dog,Sysdig Cloud,Sensu Monitoring Framework,CAdvisor等都可以对容器进行监控。

通过 docker stats 命令可以很方便的看到当前宿主机上所有容器的cpu,内存,以及网络流量等数据。但 docker stats 命令的缺点是只是统计当前宿主机的所有容器,获取的数据是实时的,没有地方存储,也没有报警功能。

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

而Scout,Data Dog,Sysdig Cloud虽然都提供了较完善的服务,但是它们都是托管的服务且都是收费的,Sensu Monitoring Framework集成度较高,也免费,但是部署过于复杂,综合考虑选择CAdvisor做监控工具。

CAdvisor出自Google,优点是开源产品,监控指标齐全,部署方便,而且有官方的docker镜像。缺点是集成度不高,默认只在本地保存2分钟数据。不过,可以加上InfluxDB存储数据,对接Grafana展示图表,比较便利搭建容器监控系统,数据收集和图表展示效果良好,对系统性能也几乎没什么影响。

CAdvisor + InfluxDB + Grafana搭建容器监控系统

CAdvisor

CAdvisor是一个容器资源监控工具,包括容器的内存,cpu,网络IO,磁盘IO等,同时提供了一个WEB页面用于查看容器的实时运行状态。CAdvisor默认存储2分钟的数据,而且只是针对单物理机,不过,CAdvisor提供了很多数据集成接口,支持InfluxDB,Redis,Kafka,Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。

CAdvisor功能主要有两点,展示Host,容器两个层次的监控数据和展示历史变化

InfluxDB

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

由于CAdvisor默认只在本地保存最近2分钟的数据,为了持久化数据和统一收集展示监控数据,需要将数据存储到InfluxDB中。InfluxDB是一个时序数据库,专门用于存储时序相关数据,很适合存储CAdvisor数据,而且CAdvisor本身提供了InfluxDB集成的方法,在启动容器时指定配置即可。

InfluxDB主要功能:

  • 基于时间序列,支持与时间有关的相关函数

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

  • 基于事件,支持任意的事件数据

InfluxDB主要特点:

  • 无结构

  • 可以是任意数量的列

  • 可拓展

  • 支持min,max等一系列的函数,方便统计

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

  • 强大的类sql语法

Granfana

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

Grafana主要特点

  • 灵活丰富的图形化选项

  • 可以混合多种风格

  • 支持白天和夜间模式

  • 多数据源

CAdvisor负责收集容器随时间变化的数据

InfluxDB负责存储时序数据

Grafana负责分析和展示时序数据

安装部署

部署InfluxDB服务

启动InfluxDB的服务容器:

docker run -d --name influxdb -p 8086:8086 \
-v /data/influxdb:/var/lib/influxdb \
--hostname influexdb \
influxdb

在容器中创建test数据库和root用户

docker exec -it influxdb influx
> CREATE DATABASE "test"
> CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

部署CAdvisor

启动CAdvisor的服务容器:

docker run \
 --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 \
 -storage_driver=influxdb \
 -storage_driver_host=influxdb:8086 \
 -storage_driver_db=test \
 -storage_driver_user=root \
 -storage_driver_password=root

服务容器起来后可通过浏览器访问 http:///ip:8080

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

部署Grafana

启动Grafana服务容器:

docker run -d -p 3000:3000 \
-v /data/grafana:/var/lib/grafana \
--link=influxdb:influxdb \
--name grafana grafana/grafana

直接运行该命令后有可能会发现容器并没有启起来,通过 docker logs 命令会发现”mkdir: can’t create directory ‘/var/lib/grafana/plugins’: Permission denied“的错误,其实就是没有 数据卷对应的主机上 /data/grafana 的权限,可以在运行启动命令前先创建 /data/grafana 目录并给定权限777,或者通过”docker run —entrypoint “id” grafana/grafana“ 查看uid,gid,groups (默认为472),然后通过”chown -R 472:472 /data/grafana“修改权限。

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

Grafana正常启动后就可以 http://ip:3000 访问,出现以下的登录页面,初次访问需要修改密码,默认用户名密码为:admin/admin

Docker Compose集成部署

准备docker-compose.yml文件

version: '3.1'
volumes:
 grafana_data: {}
services:
 influxdb:
   image: influxdb
   restart: always
   environment:
     - PRE_CREATE_DB=cadvisor
   ports:
     - "8086:8086"
   expose:
     - "8090"
     - "8099"
   volumes:
     - ./data/influxdb:/data
 cadvisor:
   image: google/cadvisor
   links:
     - influxdb:influxdb-host
   command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb-host:8086
   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
   links:
     - influxdb:influxdb-host
   ports:
     - "3000:3000"
   volumes:
     - grafana_data:/var/lib/data
   environment:
     - HTTP_USER=admin
     - HTTP_PASS=admin
     - INFLUXDB_HOST=influxdb-host
     - INFLUXDB_PORT=8086
     - INFLUXDB_NAME=cadvisor
     - INFLUXDB_USER=root
     - INFLUXDB_PASS=root

在docker-compose.yml文件目录运行以下命令启动服务:

docker-compose up -d

-d指定在后台启动,初次启动可以不加可以在控制台查看启动日志,当然后台启动也可以通过“docker-compose logs”进行查看启动日志。

服务正常启动后就可以 http://ip:3000 访问Granafa,在Home Dashboard页面点击添加data source

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

配置InfluxDB连接信息,当然在配置连接信息前需要进入InfluxDB容器创建相应的cadvisor数据库和用户root/root

在容器中创建cadvisor数据库和root用户

docker exec -it influxdb-contianer-id influx
> CREATE DATABASE "cadvisor"
> CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES

配置连接InfluxDB连接:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

数据源配好之后可以回到Home Dashboard添加添加dashboard图表展示监控信息,Grafana提供了丰富的图片模板对监控数据进行展示。

添加dashboard:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

可选模板:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

编辑图表:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

配置监控cadvisor容器的内存使用情况的图表展示,配置好之后点击保存就可以了。

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注小编行业资讯频道,感谢您对小编的支持。

cAdvisor+InfluxDB+Grafana 监控Docker

cAdvisor+InfluxDB+Grafana 监控Docker

容器的监控方案其实有很多,有docker自身的docker stats命令、有Scout、有Data Dog等等,本文主要和大家分享一下比较经典的容器开源监控方案组合:cAdvisor+InfluxDB+Grafan

一、概念

1). InfluxDB是什么
        nfluxDB是用GO语言编写的一个开源分布式时序、事件和指标数据库,无需外部的依赖,类似的数据库有Elasticsearch、Graphite等等

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

        InfluxDB的主要特点:
            无结构(无模式):可以是任意数量的列
            可拓展的
            支持min, max, sum, count, mean, median 等一系列函数,方便统计
            原生的HTTP支持,内置HTTP API
            强大的类SQL语法
            自带管理界面,方便使用

2). cAdvisor是什么
        它是Google用来监测单节点的资源信息的监控工具。Cadvisor提供了一目了然的单节点多容器的资源监控功能。Google的Kubernetes中也缺省地将其作为单节点的资源监控工具,各个节点缺省会被安装上Cadvisor
        cAvisor是利用docker status的数据信息,了解运行时容器资源使用和性能特征的一种工具
        cAdvisor的容器抽象基于Google的lmctfy容器栈,因此原生支持Docker容器并能够“开箱即用”地支持其他的容器类型。
        cAdvisor部署为一个运行中的daemon,它会收集、聚集、处理并导出运行中容器的信息。
        这些信息能够包含容器级别的资源隔离参数、资源的历史使用状况、反映资源使用和网络统计数据完整历史状况的柱状图。

        cAdvisor功能:
            展示Host和容器两个层次的监控数据
            展示历史变化数据

        温馨提示:
            由于 cAdvisor 提供的操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个 host,这不免会让人质疑它的实用性。
            但 cAdvisor 的一个亮点是它可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。
            我们可以把 cAdvisor 定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据

3). Grafana是什么
        Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源

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

温馨提示:
    在这套监控方案中:InfluxDB用于数据存储,cAdvisor用户数据采集,Grafana用于数据展示

二、单节点部署

温馨提示:
服务器信息:
主机IP:192.168.15.129
主机名:master1
docker版本:18.06.1-ce

1. 下载镜像(可做可不做,在创建容器的时候会如果本地没有会自动下载)

# 下载镜像
[root@master1 ~]# docker pull tutum/influxdb
[root@master1 ~]# docker pull google/cadvisor
[root@master1 ~]# docker pull grafana/grafana

# 查看镜像
[root@master1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
grafana/grafana     latest              7038dbc9a50c        7 days ago          223MB
google/cadvisor     latest              75f88e3ec333        10 months ago       62.2MB
tutum/influxdb      latest              c061e5808198        2 years ago         290MB

2. 创建InfluxDB容器

# 创建InfluxDB容器
[root@master1 ~]# docker run -itd -p 8083:8083 -p 8086:8086 --name influxdb tutum/influxdb

参数详解:
-itd:已交互模式运行容器,并分配伪终端,并在后台启动容器
-p:端口映射 8083端口为influxdb后台控制端口,8086端口是influxdb的数据端口
--name:给容器起个名字
tutum/influxdb:以这个镜像运行容器(本地有使用本地,没有先去下载然后启动容器)

# 查看容器
[root@master1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
f01c5e754bc0        tutum/influxdb      "/run.sh"           3 seconds ago       Up 2 seconds        0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

配置InfluxDB

登录InfluxDB的8083端口,也是管理平台设置管理员用户名密码,并添加数据库

登录URL:http://192.168.15.129:8083

设置管理员用户名密码,并添加数据库

3. 创建cadvisor容器

# 创建cadvisor容器
[root@master1 ~]# docker run -itd --name cadvisor -p 8080:8080 --mount type=bind,src=/,dst=/rootfs,ro --mount type=bind,src=/var/run,dst=/var/run --mount type=bind,src=/sys,dst=/sys,ro --mount type=bind,src=/var/lib/docker/,dst=/var/lib/docker,ro google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_user=root -storage_driver_password=root -storage_driver_host=192.168.15.129:8086

参数详解:
-itd:已交互模式运行容器,并分配伪终端,并在后台启动容器
-p: 端口映射 8080为cadvisor的管理平台端口
--name:给容器起个名字
--mout:把宿主机的相文目录绑定到容器中,这些目录都是cadvisor需要采集的目录文件和监控内容
google/cadvisor:以这个镜像运行容器(本地有使用本地,没有先去下载然后启动容器)
-storage_driver:需要指定cadvisor的存储驱动这里是influxdb
-storage_driver_db:需要指定存储的数据库
-storage_driver_user:influxdb数据库的用户名(测试可以加可以不加)
-storage_driver_password:influxdb数据库的密码(测试可以加可以不加)
-storage_driver_host:influxdb数据库的地址和端口

# 查看容器
[root@master1 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
7c2005bb79d1        google/cadvisor     "/usr/bin/cadvisor -…"   3 seconds ago       Up 2 seconds        0.0.0.0:8080->8080/tcp                           cadvisor
2fa150d3c52b        tutum/influxdb      "/run.sh"                10 minutes ago      Up 10 minutes       0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

查看cadvisor管理平台
登录URL:http://192.168.15.129:8080

登录数据库查看有没有把采集的数据写入(SHOW MEASUREMENTS执行这个命令)

得到上面的结果说明已经采集到数据并且写入到数据库了

4. 创建grafana容器

# 创建grafana容器
[root@master1 ~]# docker run -itd --name grafana  -p 3000:3000 grafana/grafana

参数详解:
-itd:已交互模式运行容器,并分配伪终端,并在后台启动容器
-p: 端口映射 3000为grafana的管理平台端口
--name:给容器起个名字
grafana/grafana:以这个镜像运行容器(本地有使用本地,没有先去下载然后启动容器)

# 查看容器
[root@master1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
57f335665902        grafana/grafana     "/run.sh"                2 seconds ago       Up 1 second         0.0.0.0:3000->3000/tcp                           grafana
7c2005bb79d1        google/cadvisor     "/usr/bin/cadvisor -…"   15 minutes ago      Up 15 minutes       0.0.0.0:8080->8080/tcp                           cadvisor
2fa150d3c52b        tutum/influxdb      "/run.sh"                25 minutes ago      Up 25 minutes       0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

配置granfana
登录URL:http://192.168.15.129:3000
默认用户名:admin
默认密码:admin
温馨提示:
首次登录会提示修改密码才可以登录,我这里修改密码为admin

 得到上面的结果表示整个监控已经部署完成并可以对基础监控进行实施监控,具体需要监控什么,grafana怎么样排版,怎样起名字,根据个人的业务需求来进行设置即可 

三、Swarm多节点部署

刚刚上面的例子是在一台主机上监控一台主机的容器信息,这里我们要使用Swarm的集群部署多台主机容器之间的监控
温馨提示:
主机IP:192.168.15.129 主机名:master1 角色:Swarm的主 granfana容器 influxdb容器 cadvisor容器
主机IP:192.168.15.130 主机名:node1 角色:Swarm的node节点 cadvisor容器
主机IP:192.168.15.131 主机名:node2 角色:Swarm的node节点 cadvisor容器

1. 准备工作

# 创建InfluxDB的宿主机目录挂载到容器
[root@master1 ~]# mkdir -p /opt/influxdb

# 下载镜像(可做可不做,在创建容器的时候会如果本地没有会自动下载)
[root@master1 ~]# docker pull tutum/influxdb
[root@master1 ~]# docker pull google/cadvisor
[root@master1 ~]# docker pull grafana/grafana

# 查看镜像
[root@master1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
grafana/grafana     latest              7038dbc9a50c        7 days ago          223MB
google/cadvisor     latest              75f88e3ec333        10 months ago       62.2MB
tutum/influxdb      latest              c061e5808198        2 years ago         290MB

2. 编写创建容器的yml文件

# 编写docker-compose.yml文件
[root@master1 ~]# mkdir test
[root@master1 test]# cat docker-compose.yml 
version: ''3.7''

services:
  influx:
    image: tutum/influxdb
    ports: 
      - "8083:8083"
      - "8086:8086"
    volumes: 
      - "/opt/influxdb:/var/lib/influxdb"
    deploy: 
      replicas: 1
      placement: 
        constraints: [node.role==manager]

  grafana: 
    image: grafana/grafana
    ports: 
      - "3000:3000"
    depends_on:
      - "influx"
    deploy: 
      replicas: 1
      placement: 
        constraints: [node.role==manager]

  cadvisor:
    image: google/cadvisor
    ports:
      - "8080:8080"
    hostname: ''{{.Node.Hostname}}''
    command: -logtostderr -docker_only -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influx:8086
    volumes: 
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    depends_on: 
      - influx
    deploy: 
      mode: global

volumes: 
  influx:
    driver: local
  grafana: 
    driver: local

3. 创建Swarm集群

# 在master1上执行
[root@master1 test]# docker swarm init --advertise-addr 192.168.15.129
Swarm initialized: current node (xtooqr30af6fdcu51jzdv79wh) is now a manager.

To add a worker to this swarm, run the following command:
    # 这里已经提示使用下面的命令在node节点上执行就可以加入集群(前提docker服务一定是启动的)
    docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377

To add a manager to this swarm, run ''docker swarm join-token manager'' and follow the instructions.


# 在node1和node2上执行
[root@node1 ~]# docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377
This node joined a swarm as a worker

[root@node2 ~]# docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377
This node joined a swarm as a worker.

# 在master1上查看集群主机
[root@master1 test]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
xtooqr30af6fdcu51jzdv79wh *   master1             Ready               Active              Leader              18.06.1-ce
y24c6sfs3smv5sd5h7k66x8zv     node1               Ready               Active                                  18.06.1-ce
k554xe59lcaeu1suaguvxdnel     node2               Ready               Active                                  18.06.1-ce

4. 创建集群容器

# 创建集群容器
[root@master1 test]# docker stack deploy -c docker-compose.yml swarm-monitor
Creating network swarm-monitor_default
Creating service swarm-monitor_cadvisor
Creating service swarm-monitor_influx
Creating service swarm-monitor_grafana


# 查看创建的容器
[root@master1 test]# docker service  ls
ID                  NAME                     MODE                REPLICAS            IMAGE                    PORTS
wn36f7be6i5a        swarm-monitor_cadvisor   global              3/3                 google/cadvisor:latest   *:8080->8080/tcp
ufn3lqbhbww3        swarm-monitor_grafana    replicated          1/1                 grafana/grafana:latest   *:3000->3000/tcp
lf0z6dp1u8sn        swarm-monitor_influx     replicated          1/1                 tutum/influxdb:latest    *:8083->8083/tcp, *:8086->8086/tcp

# 查看容器的服务
[root@master1 test]# docker service ps swarm-monitor_cadvisor
ID                  NAME                                               IMAGE                    NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
vy1kqg5u8x3f        swarm-monitor_cadvisor.k554xe59lcaeu1suaguvxdnel   google/cadvisor:latest   node2               Running             Running about a minute ago                       
a08b5bysra3d        swarm-monitor_cadvisor.y24c6sfs3smv5sd5h7k66x8zv   google/cadvisor:latest   node1               Running             Running about a minute ago                       
kkca4kyojgr2        swarm-monitor_cadvisor.xtooqr30af6fdcu51jzdv79wh   google/cadvisor:latest   master1             Running             Running 59 seconds ago   

[root@master1 test]# docker service ps swarm-monitor_grafana 
ID                  NAME                      IMAGE                    NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
klyjl7rxzmoz        swarm-monitor_grafana.1   grafana/grafana:latest   master1             Running             Running about a minute ago        

[root@master1 test]# docker service ps swarm-monitor_influx 
ID                  NAME                     IMAGE                   NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
pan5yvwq7b79        swarm-monitor_influx.1   tutum/influxdb:latest   master1             Running             Running about a minute ago

5. 访问web测试
1) 访问influxdb并创建数据库
登录InfluxDB的8083端口,并添加数据库
登录URL:http://192.168.15.129:8083

2) 访问cadvisor
登录URL:http://192.168.15.129:8080
登录数据库查看有没有把采集的数据写入

 

3) 访问grafana并配置
登录URL:http://192.168.15.129:3000
默认用户名:admin
默认密码:admin
温馨提示:
首次登录会提示修改密码才可以登录,我这里修改密码为admin

这个动图比较长 主要是对grafana的配置操作,注意里面的alpine_test容器不是和集群一块创建的是我单独创建的  

做到以上的效果,说明已经部署成功了,具体的配置方案就是因需求而异了

cAdvisor+Prometheus+Grafana监控docker

cAdvisor+Prometheus+Grafana监控docker

                               cAdvisor+Prometheus+Grafana监控docker

一、cAdvisor(需要监控的主机都要安装)

官方地址:https://github.com/google/cadvisor

CAdvisor是谷歌开发的用于分析运行中容器的资源占用和性能指标的开源工具。CAdvisor是一个运行时的守护进程,负责收集、聚合、处理和输出运行中容器的信息。
注意在查找相关资料后发现这是最新版cAdvisor的bug,换成版本为google/cadvisor:v0.24.1 就ok了,映射主机端口默认是8080,可以修改。

sudo docker run \
  --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=8090:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:v0.24.1

cAdvisor exposes a web UI at its port:
http://<hostname>:<port>/

下图为cAdvisor的web界面,数据实时刷新但是不能存储。


 查看json格式
 http://192.168.247.212:8090/metrics
 

二、Prometheus

官方地址:https://prometheus.io/
随着容器技术的迅速发展,Kubernetes 已然成为大家追捧的容器集群管理系统。Prometheus 作为生态圈 Cloud Native Computing Foundation(简称:CNCF)中的重要一员,其活跃度仅次于 Kubernetes, 现已广泛用于 Kubernetes 集群的监控系统中。本文将简要介绍 Prometheus 的组成和相关概念,并实例演示 Prometheus 的安装,配置及使用,以便开发人员和云平台运维人员可以快速的掌握 Prometheus。
Prometheus 简介
Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。
作为新一代的监控框架,Prometheus 具有以下特点:

    强大的多维度数据模型:

  •         时间序列数据通过 metric 名和键值对来区分。
  •         所有的 metrics 都可以设置任意的多维标签。
  •         数据模型更随意,不需要刻意设置为以点分隔的字符串。
  •         可以对数据模型进行聚合,切割和切片操作。
  •         支持双精度浮点类型,标签可以设为全 unicode。


    灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。
    易于管理: Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
    高效:平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。
    使用 pull 模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。
    可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端。
    可以通过服务发现或者静态配置去获取监控的 targets。
    有多种可视化图形界面。
    易于伸缩。

需要指出的是,由于数据采集可能会有丢失,所以 Prometheus 不适用对采集数据要 100% 准确的情形。但如果用于记录时间序列数据,Prometheus 具有很大的查询优势,此外,Prometheus 适用于微服务的体系架构
Prometheus 组成及架构

Prometheus 生态圈中包含了多个组件,其中许多组件是可选的:

  •     Prometheus Server: 用于收集和存储时间序列数据。
  •     Client Library: 客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。
  •     Push Gateway: 主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。
  •     Exporters: 用于暴露已有的第三方服务的 metrics 给 Prometheus。
  •     Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。一些其他的工具。


Prometheus 架构图

安装步骤:

wget https://github.com/prometheus/prometheus/releases/download/v2.8.0/prometheus-2.8.0.linux-amd64.tar.gz
tar -xf prometheus-2.8.0.linux-amd64.tar.gz
cd prometheus-2.8.0.linux-amd64
修改配置文件prometheus.yml,添加以下内容
    static_configs:
    - targets: ['192.168.247.211:9090']
  - job_name: 'docker'
    static_configs:
    - targets:
      - "192.168.247.211:8090"
      - "192.168.247.212:8090"

cp prometheus promtool /usr/local/bin/

启动:
nohup prometheus --config.file=./prometheus.yml &

 我的完整简单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: ['192.168.247.211:9090']
  - job_name: 'docker'
    static_configs:
    - targets: 
      - "192.168.247.211:8090"
      - "192.168.247.212:8090"

访问:http://192.168.247.211:9090

三、Grafana

官方地址:https://grafana.com/
安装步骤:

wget https://dl.grafana.com/oss/release/grafana-6.0.1-1.x86_64.rpm
sudo yum localinstall grafana-6.0.1-1.x86_64.rpm -y
systemctl daemon-reload
systemctl start grafana-server
systemctl status grafana-server
#设置开机自启动
Enable the systemd service so that Grafana starts at boot.
sudo systemctl enable grafana-server.service

1.访问:http://192.168.247.211:3000/login
默认密码:admin/admin

2.配置Prometheus数据源


3.下载模板模板地址:https://grafana.com/dashboards

4.导入模板

5.成品

 







CentOS-Docker监控minio集群(grafana+prometheus)

CentOS-Docker监控minio集群(grafana+prometheus)

一、开启minio监控数据

传送门>>minio集群搭建

每台调整minio集群启动启动命令(增加标红内容)

export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=minio123
export MINIO_PROMETHEUS_AUTH_TYPE="public"

/minio/bin/minio server --address :9000 --config-dir /etc/minio \
http://192.168.1.101/minio/data1 http://192.168.1.102/minio/data2 \
http://192.168.1.103/minio/data3 http://192.168.1.104/minio/data4 > minio.log

启动后验证是否可以获取监控信息(浏览器不可见)

$ curl http://192.168.1.101:9000/minio/prometheus/metrics

$ curl http://192.168.1.102:9000/minio/prometheus/metrics

$ curl http://192.168.1.103:9000/minio/prometheus/metrics

$ curl http://192.168.1.104:9000/minio/prometheus/metrics

二、配置prometheus + grafana监控

传送门>> 监控环境搭建可参考

1.创建配置文件

$ vim /minio/prometheus.yml

global:
  scrape_interval:     15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
  - job_name: minio-job
    metrics_path: /minio/prometheus/metrics
    scheme: http
    static_configs:
      - targets: [''192.168.1.101:19000'']
        labels:
          group: minio
          instance: minio-101
      - targets: [''192.168.1.102:19000'']
        labels:
          group: minio
          instance: minio-102
      - targets: [''192.168.1.103:19000'']
        labels:
          group: minio
          instance: minio-103
      - targets: [''192.168.1.104:19000'']
        labels:
          group: minio
          instance: minio-104

2.数据源prometheus服务

$ docker run --restart=unless-stopped -d --name=prometheus-minio -p 9090:9090 -v /minio/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

 

3.可视化展示grafana服务( 默认用户名/密码:admin/admin

$ docker run --restart=unless-stopped -d --name=grafana -p 3000:3000 grafana/grafana

3.1.添加数据源

3.2.导入监控dashboard

目前:https://grafana.com/grafana/dashboards/13502

如果url更新请参考github获取最新地址>>仪表盘参考minio配置监控说明

三、查看监控

 

今天关于Docker 监控1:prometheus+cadviso+grafana 实现对 docker 容器和宿主机进行监控的介绍到此结束,谢谢您的阅读,有关CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统、cAdvisor+InfluxDB+Grafana 监控Docker、cAdvisor+Prometheus+Grafana监控docker、CentOS-Docker监控minio集群(grafana+prometheus)等更多相关知识的信息可以在本站进行查询。

本文标签: