Docker学习(12):Docker监控方案之Prometheus

Docker常用的监控方案

Prometheus

Prometheus架构

Prometheus是一种很不错的监控方案,它提供了监控数据搜集、存储、处理、可视化和警告一套完整的解决方案,下面是Prometheus的架构

Prometheus Server

Prometheus Server负责从Exporter拉取和存储监控数据,并提供一套灵活的查询语言(PromQL)供用户使用

Exporter

Exporter负责收集目标对象(host,container...)的性能数据,并通过HTTP接口提供Prometheus Server获取

Alertmanager

用户可以定义基于监控数据的告警规则,规则会触发告警。一旦Alertmanager收到告警,会通过预定义的方式发出告警通知。支持的方式包括Email、PagerDuty、Webhook等

Prometheus的优势

(1)通过维度对数据进行说明,附加更多的业务信息,进而满足不同业务的需求。同时维度是可以动态添加的,比如再给数据加上一个user维度,就可以按用户来统计容器内存使用量了

(2)Prometheus丰富的查询语言能够灵活、充分地挖掘数据的价值

部署Prometheus

环境说明

我们将通过Prometheus监控两台Docker Host:10.211.55.17和10.211.55.21,监控host和容器两个层次的数据,按照构架图,我们需要运行如下组件

Prometheus Server

Prometheus Server本身也将以容器的方式运行在host 10.211.55.21上

Exporter

Prometheus有很多现成的Exporter,完整列表可参照https://prometheus.io/docs/instrumenting/exporters/

这里将使用

(1)Node Exporter,负责收集host硬件和操作系统数据。它将以容器方式运行在所有host上

(2)cAdvisor,负责收集容器数据。它将以容器的方式运行在所有host上

Grafana

显示多维数据,Grafana本身也将以容器方式运行在host 10.211.55.21上

运行Node Exporter

在两台主机上执行如下命令

sudo docker run -d -p 9100:9100 -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "/(sys|proc|dev|host|etc)($|/)"

这里使用了--net=host,这样Prometheus Server可以直接与Node Exporter通信。Node Exporter启动后,将通过9100提供host的监控数据,在浏览器中通过http://10.211.55.17:9100/metrics测试一下

运行cAdvisor

在两个主机上执行一下命令

sudo docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker:/var/lib/docker:ro --publish=8080:8080 --detach=true --name=cadvisor --net=host google/cadvisor:latest

这里使用了--net=host,这样Prometheus Server可以直接与cAdvisor通信。cAdvisor启动后,将通过8080提供host的监控数据,在浏览器中通过http://10.211.55.17:8080/metrics测试一下

运行Prometheus Server

先在主机10.211.55.21上编写prometheus.yml文件,其具体内容如下

sudo vim 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‘,‘localhost:8080‘,‘localhost:9100‘,‘10.211.55.17:9100‘,‘10.211.55.17:8080‘] 

编写好配置文件后执行一下命令,以容器的方式来运行prometheus

sudo docker run -d -p 9090:9090 -v /home/chenjin/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus --net=host prom/prometheus 

这里使用了--net=host,这样Prometheus Server可以直接与Exporter和Grafana通信。上面的配置文件中最重要的是-targets里面的内容,指定从哪些exporter抓取数据。这里指定了两台主机上的Node Exporter个cAdvisor,另外localhost:9090就是Prometheus Server自己,可见Prometheus本身也会收集自己的监控数据。可以通过http://10.211.55.21:9090/metrics测试一下

在浏览器中打开http://10.211.55.21:9090,点击菜单Status -> Targets

如下图所示

所有Target的State都是都是UP状态,说明Prometheus Server能够正常获取监控数据

运行Grafana

在主机10.211.55.21上执行如下命令

sudo docker run -d -i -p 3000:3000 -e "GF_SERVER_ROOT_URL=http://grafana.server.name" -e "GF_SECURITY_ADMIN_PASSWORD=secret" --net=host grafana/grafana

这里使用了--net=host,这样Grafana可以直接与Prometheus Server通信。-e "GF_SECURITY_ADMIN_PASSWORD=secret"指定了Grafana admin用户和密码secret

Grafana启动后,在浏览器中打开http://10.211.55.21:3000

登录后,Grafana将引导我们配置Data Source

Name为Date Source命令,例如prometheus

Type选择Prometheus

Url输入Prometheus Server的地址

其他保持默认,点击下面的Save & Test

配置完成后,Grafana就能够访问Prometheus中存放的监控数据了

原文地址:https://www.cnblogs.com/chenjin2018/p/9949693.html

时间: 2024-07-31 16:36:17

Docker学习(12):Docker监控方案之Prometheus的相关文章

Docker学习之Docker容器基本使用

Docker学习之Docker容器基本使用 新建容器并启动 命令格式:docker run --options repository:tag 后台运行 命令格式:-d 已存在的容器相关操作 启动:docker container start containerid 停止:docker container stop containerid 重启:docker container restart containerid 查看后台运行的容器的日志 命令格式:docker container logs

Kubernetes 监控方案之 Prometheus Operator(十七)

目录 一.Prometheus 介绍 1.1.Prometheus 架构 1.2.Prometheus Operator 架构 二.安装部署 2.1.安装 一.Prometheus 介绍 Prometheus Operator 是 CoreOS 开发的基于 Prometheus 的 Kubernetes 监控方案,也可能是目前功能最全面的开源方案. Prometheus Operator 通过 Grafana 展示监控数据,预定义了一系列的 Dashboard 1.1.Prometheus 架构

docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)

=============================================== 2018/7/8_第1次修改                       ccb_warlock =============================================== 最近正式业务终于开始上容器,虽然前期通过swarm解决了服务部署和扩展等问题,但是针对容器监控方面缺乏经验甚至是无从入手,因为没有监控数据我根本不知道目前给的资源限制是否合理,业务量激增的时候资源是否可以支撑负

14、Docker监控方案(Prometheus+cAdvisor+Grafana)

上一篇文章我们已经学习了比较流行的cAdvisor+InfluxDB+Grafana组合进行Docker监控.这节课来学习Prometheus+cAdvisor+Grafana组合. cAdvisor是专门用来采集数据的工具,也是google公司的一款开源产品,Grafana则是前端展示,支持多种数据源,定制非常灵活.而prometheus则作为数据源. 整体架构图如下: 一.prometheus 1.Prometheus介绍 Prometheus(普罗米修斯)是一个最初在SoundCloud上

DOCKER学习_002:Docker的镜像容器管理

一 Docker的基本信息 前面已经安装了Docker,现在看一下已安装Docker的安装环境以及其他信息 1.1 系统环境 [[email protected] ~]# uname -r 3.10.0-957.27.2.el7.x86_64 [[email protected]-server3 ~]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) 1.2 Docker版本 [[email protected] ~]#

DOCKER学习_007:Docker的套接字介绍

根据https://www.cnblogs.com/zyxnhr/p/11825331.html这个文章,已经可以正常安装一个docker服务 查看Docker状态 [[email protected] ~]# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled;

Docker学习笔记 — Docker仓库

基本概念 仓库是集中存放镜像的地方. Docker Hub Docker Hub是Docker官方维护的一个公共仓库. 执行docker login命令登录,本地用户目录下的.dockercfg文件中保存了用户的认证信息. 使用docker search命令查找官方仓库中的镜像,使用docker pull命令下载镜像到本地. 私有仓库的搭建 — 使用Docer-registry 通常从官方维护的中央仓库下载镜像会比较慢,或者公司内部想搭建一个私有的仓库以供内部人员使用,此时我们可以使用官方提供的

3.docker学习之docker与虚拟化

虚拟化技术是一个总称,是一系列实现虚拟技术的统称.从广义上来说,虚拟化技术包括了虚拟机技术和容器技术, 所谓虚拟化技术最大的特点就是将一个真实的机器进行虚拟地分割,然后分割出来的部分可以独立使用 有人说:"Docker是虚拟化技术." 有人却说:"虚拟化与Docker容器之争." 那么,到底Docker是不是虚拟化技术,如果是,为啥又说"之争?" 其实,准确来说,Docker是一种容器级虚拟化技术. 关于虚拟机,官方的说法是:虚拟机(Virtua

&lt;Docker学习&gt;3. docker镜像命令使用

镜像提供容器运行时所需要的程序,资源.配置文件等,是一个特殊的文件系统.是容器运行的基础.镜像是多层文件系统组成的,是一个分层存储的架构,在镜像的构建中,会一层层的构建,每一层构建完成就不会发生改变,后一层的改变只会在自己这一层发生改变.删除前一层的文件操作,实际上不会删除前一层的文件,而是仅仅在该层将文件标记为删除,实际上还存储在前一层.因此在镜像的构建过程中,只尽量的添加该层需要的文件,任何和该层无关的文件要清理. 镜像使用命令: (1)镜像拉取 docker pull [选项] [Dock