在这里插入图片描述

docker内部署Promethues

Prometheus

Prometheus是一个开源的系统监控和报警工具,由SoundCloud开发并在2012年捐赠给了Cloud Native Computing Foundation (CNCF)。它被广泛用于监控容器化应用程序和分布式系统。Prometheus的设计目标是实时地收集、存储、查询和分析大规模系统的指标数据。

以下是对Prometheus的详细介绍:

  1. 数据模型:
    Prometheus使用一种自定义的数据模型来存储时间序列数据。时间序列是一组由时间戳和对应值组成的数据点,表示某个指标随时间的变化。Prometheus的数据模型是基于标签(labels)的,允许用户对时间序列进行灵活的查询和聚合。标签可以用于标识时间序列,例如,可以为每个时间序列添加"job"标签表示所属的任务,或者添加"instance"标签表示监控的主机实例。

  2. 数据采集:
    Prometheus通过HTTP协议定期从被监控的目标(如应用程序、主机或其他服务)中拉取指标数据。被监控的目标需要暴露一个指定格式的HTTP端点,以供Prometheus采集指标数据。Prometheus还提供了一些客户端库,用于帮助应用程序将自身的指标暴露给Prometheus。

  3. 存储:
    Prometheus使用本地磁盘存储采集的时间序列数据。数据存储采用一种简单的、有损压缩的方式,以最大限度地减少存储空间的占用。用户可以配置数据保留策略,以控制数据的保留时间。

  4. 查询语言:
    Prometheus提供了PromQL(Prometheus Query Language)用于查询和聚合时间序列数据。PromQL支持灵活的过滤、聚合和函数操作,使得用户可以根据需要获取有关系统状态和性能的信息。

  5. 监控和警报:
    Prometheus允许用户定义警报规则,当满足特定条件时触发警报。警报可以通过电子邮件、Slack等方式进行通知。此外,Prometheus还提供了一个简单的警报管理界面,可以查看活动警报和警报历史。

  6. 服务发现:
    Prometheus支持静态和动态的服务发现机制。静态服务发现需要手动配置监控目标列表,而动态服务发现允许Prometheus自动发现和监控新的目标,例如,Docker容器、Kubernetes服务等。

  7. 可视化:
    Prometheus本身不提供可视化界面,但可以与Grafana等可视化工具集成,以创建漂亮的监控仪表盘。

总体而言,Prometheus是一个功能强大且易于使用的监控和警报工具,适用于大规模系统和容器化应用程序。它在容器化生态系统中得到广泛应用,成为云原生应用开发的关键组件之一。

拉取镜像

docker pull prom/prometheus

启动

[root@localhost harbor]# docker run -p 9090:9090 -d --name yprom prom/prometheus

登录Prometheus的web界面

用宿主机的ip+对应端口登录

从容器中拉取yml文件到宿主机中

[root@localhost prom]# docker cp yprom:/etc/prometheus/prometheus.yml .
Successfully copied 2.56kB to /dockf/prom/.
[root@localhost prom]# ls
prometheus.yml

cAdvisor

cAdvisor(Container Advisor)是谷歌开源的一个容器资源使用分析工具,它用于监控和收集关于运行在容器中的应用程序的性能数据。cAdvisor可以与Docker、Kubernetes和其他容器管理工具集成,并提供有关容器资源使用情况的详细信息,包括CPU、内存、磁盘和网络等方面的指标。

以下是cAdvisor的一些主要特点和功能:

  1. 容器监控:cAdvisor可以实时监控运行在容器内部的应用程序的资源使用情况,包括CPU利用率、内存使用量、磁盘I/O等。这些信息对于性能调优和容器资源规划非常有用。

  2. 系统宿主机监控:除了监控容器内部的指标,cAdvisor还能够收集关于宿主机系统的性能数据,如宿主机的CPU使用率、内存使用量和磁盘空间等。

  3. 支持多种容器运行时:cAdvisor可以与多种容器运行时,如Docker和containerd等进行集成,因此在不同的容器环境中都能够使用。

  4. 详细的性能图表:cAdvisor提供了用户友好的Web界面,通过该界面可以查看容器和宿主机的性能指标历史数据,并且以图表的形式展示,帮助用户更直观地了解容器的运行状况。

  5. 资源限制和配额:cAdvisor允许用户设置容器的资源限制和配额,这对于避免容器资源抢占和优化资源分配非常重要。

  6. 支持容器组:在Kubernetes等容器编排系统中,多个容器通常组合成为一个Pod。cAdvisor能够识别和监控这样的容器组,并提供有关它们整体性能的信息。

  7. API支持:cAdvisor提供了RESTful API,允许用户以编程方式访问收集的容器性能数据,方便进行自动化操作和集成。

官网:https://prometheus.io/docs/guides/cadvisor/

Prometheus和cAdvisor关系

cAdvisor(Container Advisor)和Prometheus是两个在容器监控领域中常常一起使用的工具,它们之间有着密切的关系。让我们更详细地了解它们之间的关系:

  1. cAdvisor(Container Advisor):
    cAdvisor是谷歌开源的容器资源使用分析工具,用于监控和收集关于运行在容器中的应用程序的性能数据。它是一个单独的容器,能够实时监控每个运行的容器的CPU、内存、磁盘和网络等方面的指标,同时也能监控宿主机的资源使用情况。cAdvisor可以与Docker、Kubernetes和其他容器管理工具集成,为用户提供容器和宿主机的性能数据,帮助用户进行性能调优、资源规划和故障排除。

  2. Prometheus:
    Prometheus是一种开源的系统监控和警报工具,专门用于收集、存储和查询时间序列数据。它最初由SoundCloud开发,并于2012年开源,成为了云原生生态系统中的重要组成部分。Prometheus的设计目标是为了高效地监控分布式系统,并提供强大的查询和警报功能。‘
    cAdvisor和Prometheus通常一起使用来构建完整的容器监控解决方案。其关系可以总结如下:

  3. 数据收集:cAdvisor负责监控容器内部的性能指标和宿主机的资源使用情况,并将这些数据暴露为Prometheus可以理解的格式。

  4. Prometheus适配器:Prometheus本身无法直接监控容器内部的指标,因此需要借助适配器来与cAdvisor进行集成。Prometheus适配器(Prometheus Adapter)是一个Kubernetes API Server的扩展,它允许Prometheus查询Kubernetes API,并将查询转换为cAdvisor可以理解的格式,从而获取容器的性能数据。

  5. 数据存储:Prometheus负责将从cAdvisor收集到的时间序列数据进行存储。Prometheus使用一种称为"TSDB"(Time Series Database)的数据库,这使得它能够高效地存储和查询时间序列数据。

  6. 数据查询和可视化:Prometheus提供了强大的查询语言和灵活的数据可视化工具,让用户能够从存储的性能数据中提取有用信息,并创建仪表盘或图表,帮助用户更好地理解和分析容器和宿主机的运行情况。

总结:cAdvisor和Prometheus的结合为容器环境提供了全面的监控和性能分析能力。cAdvisor负责收集容器的性能数据,而Prometheus则负责存储、查询和展示这些数据,帮助用户监控和管理容器化应用。这种集成使得在Kubernetes集群中实现全面的容器监控变得更加容易和高效。

配置

查看本机的8080端口是否使用

[root@localhost prom]# netstat -anpult|grep 8080

编辑Prometheus.yml主配置文件,添加监控的容器cAdvisor为目标容器

[root@localhost prom]# cat prometheus.yml |egrep -v "#|^$"
global:
alerting:
  alertmanagers:
    - static_configs:
        - targets:
rule_files:
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
    scrape_configs:
      - job_name: cadvisor
        scrape_interval: 5s
        static_configs:
        - targets:
           - cadvisor:8080

  • 使用docker compose 启动 Promethues、cadvisor、redis容器

需要机器安装docker-compose

新建一个docker-compose.yml文件

version: '3.2'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
    - 9090:9090
    command:
    - --config.file=/etc/prometheus/prometheus.yml
    volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    depends_on:
    - cadvisor
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
    - 8080:8080
    volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
    depends_on:
    - redis
  redis:
    image: redis:latest
    container_name: redis
    ports:
    - 6379:6379

cadvisor:
image: gcr.io/cadvisor/cadvisor:latest

这里是从谷歌拉取的镜像可能拉取不到

上述是一个Docker Compose文件的示例,用于定义三个服务:prometheus、cadvisor和redis。这些服务将在Docker容器中运行,并通过依赖关系(depends_on)来确保它们在正确的顺序中启动。

  1. Prometheus Service:
  • 使用 prom/prometheus:latest 镜像创建一个名为 “prometheus” 的容器。
  • 该容器将监听宿主机的9090端口,并将其映射到容器内部的9090端口,因此可以通过宿主机的9090端口访问Prometheus的Web界面。
  • 使用 --config.file=/etc/prometheus/prometheus.yml 命令参数,指定Prometheus的配置文件路径。
  • 将宿主机当前目录下的 prometheus.yml 文件挂载为容器内部的 /etc/prometheus/prometheus.yml 文件,并且设置为只读模式(ro)。这样,Prometheus将使用该配置文件进行监控设置。
  • 依赖于 cadvisor 服务,在启动时会等待 cadvisor 容器准备就绪后再启动。
  1. cAdvisor Service:
  • 使用 gcr.io/cadvisor/cadvisor:latest 镜像创建一个名为 “cadvisor” 的容器。
  • 该容器将监听宿主机的8080端口,并将其映射到容器内部的8080端口,因此可以通过宿主机的8080端口访问 cAdvisor 的Web界面。
  • 使用多个 - /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:ro 挂载宿主机的文件系统和资源目录,以便 cAdvisor 可以监控宿主机和容器的性能数据。
  • 依赖于 redis 服务,在启动时会等待 redis 容器准备就绪后再启动。
  1. Redis Service:
  • 使用 redis:latest 镜像创建一个名为 “redis” 的容器。
  • 该容器将监听宿主机的6379端口,并将其映射到容器内部的6379端口,因此可以通过宿主机的6379端口访问 Redis 服务。

注意:在实际使用中,如果你将上述内容保存为 docker-compose.yml 文件,并在相同目录下运行 docker-compose up 命令,Docker Compose将会根据文件中的定义启动这三个服务,并根据依赖关系确保它们的启动顺序正确。这样,你将在宿主机的9090端口访问到 Prometheus,8080端口访问到 cAdvisor,以及6379端口访问到 Redis。

为什么cAdvios可以获取其他容器的信息?

cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
    - 8080:8080
    volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro

数据卷:/var/lib/docker/:/var/lib/docker:ro这就是为什么可以查看信息

启动

[root@localhost prom]# docker compose up -d
[+] Running 3/3
 ✔ Container redis       Started                                           
 ✔ Container cadvisor    Started                                           
 ✔ Container prometheus  Started      

查看信息

docker compose ps

登录宿主机ip+8080端口 》http://192.168.2.99:8080/containers/

在这里插入图片描述

这是docker整体的资源消耗

在这里插入图片描述

进入被监控的机器查看详细信息

在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐