Prometheus是一个开源的系统监控和报警工具,由SoundCloud开发并在2012年捐赠给了Cloud Native Computing Foundation (CNCF)。它被广泛用于监控容器化应用程序和分布式系统。Prometheus的设计目标是实时地收集、存储、查询和分析大规模系统的指标数据。
以下是对Prometheus的详细介绍:
数据模型:
Prometheus使用一种自定义的数据模型来存储时间序列数据。时间序列是一组由时间戳和对应值组成的数据点,表示某个指标随时间的变化。Prometheus的数据模型是基于标签(labels)的,允许用户对时间序列进行灵活的查询和聚合。标签可以用于标识时间序列,例如,可以为每个时间序列添加"job"标签表示所属的任务,或者添加"instance"标签表示监控的主机实例。
数据采集:
Prometheus通过HTTP协议定期从被监控的目标(如应用程序、主机或其他服务)中拉取指标数据。被监控的目标需要暴露一个指定格式的HTTP端点,以供Prometheus采集指标数据。Prometheus还提供了一些客户端库,用于帮助应用程序将自身的指标暴露给Prometheus。
存储:
Prometheus使用本地磁盘存储采集的时间序列数据。数据存储采用一种简单的、有损压缩的方式,以最大限度地减少存储空间的占用。用户可以配置数据保留策略,以控制数据的保留时间。
查询语言:
Prometheus提供了PromQL(Prometheus Query Language)用于查询和聚合时间序列数据。PromQL支持灵活的过滤、聚合和函数操作,使得用户可以根据需要获取有关系统状态和性能的信息。
监控和警报:
Prometheus允许用户定义警报规则,当满足特定条件时触发警报。警报可以通过电子邮件、Slack等方式进行通知。此外,Prometheus还提供了一个简单的警报管理界面,可以查看活动警报和警报历史。
服务发现:
Prometheus支持静态和动态的服务发现机制。静态服务发现需要手动配置监控目标列表,而动态服务发现允许Prometheus自动发现和监控新的目标,例如,Docker容器、Kubernetes服务等。
可视化:
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(Container Advisor)是谷歌开源的一个容器资源使用分析工具,它用于监控和收集关于运行在容器中的应用程序的性能数据。cAdvisor可以与Docker、Kubernetes和其他容器管理工具集成,并提供有关容器资源使用情况的详细信息,包括CPU、内存、磁盘和网络等方面的指标。
以下是cAdvisor的一些主要特点和功能:
容器监控:cAdvisor可以实时监控运行在容器内部的应用程序的资源使用情况,包括CPU利用率、内存使用量、磁盘I/O等。这些信息对于性能调优和容器资源规划非常有用。
系统宿主机监控:除了监控容器内部的指标,cAdvisor还能够收集关于宿主机系统的性能数据,如宿主机的CPU使用率、内存使用量和磁盘空间等。
支持多种容器运行时:cAdvisor可以与多种容器运行时,如Docker和containerd等进行集成,因此在不同的容器环境中都能够使用。
详细的性能图表:cAdvisor提供了用户友好的Web界面,通过该界面可以查看容器和宿主机的性能指标历史数据,并且以图表的形式展示,帮助用户更直观地了解容器的运行状况。
资源限制和配额:cAdvisor允许用户设置容器的资源限制和配额,这对于避免容器资源抢占和优化资源分配非常重要。
支持容器组:在Kubernetes等容器编排系统中,多个容器通常组合成为一个Pod。cAdvisor能够识别和监控这样的容器组,并提供有关它们整体性能的信息。
API支持:cAdvisor提供了RESTful API,允许用户以编程方式访问收集的容器性能数据,方便进行自动化操作和集成。
官网:https://prometheus.io/docs/guides/cadvisor/
cAdvisor(Container Advisor)和Prometheus是两个在容器监控领域中常常一起使用的工具,它们之间有着密切的关系。让我们更详细地了解它们之间的关系:
cAdvisor(Container Advisor):
cAdvisor是谷歌开源的容器资源使用分析工具,用于监控和收集关于运行在容器中的应用程序的性能数据。它是一个单独的容器,能够实时监控每个运行的容器的CPU、内存、磁盘和网络等方面的指标,同时也能监控宿主机的资源使用情况。cAdvisor可以与Docker、Kubernetes和其他容器管理工具集成,为用户提供容器和宿主机的性能数据,帮助用户进行性能调优、资源规划和故障排除。
Prometheus:
Prometheus是一种开源的系统监控和警报工具,专门用于收集、存储和查询时间序列数据。它最初由SoundCloud开发,并于2012年开源,成为了云原生生态系统中的重要组成部分。Prometheus的设计目标是为了高效地监控分布式系统,并提供强大的查询和警报功能。‘
cAdvisor和Prometheus通常一起使用来构建完整的容器监控解决方案。其关系可以总结如下:
数据收集:cAdvisor负责监控容器内部的性能指标和宿主机的资源使用情况,并将这些数据暴露为Prometheus可以理解的格式。
Prometheus适配器:Prometheus本身无法直接监控容器内部的指标,因此需要借助适配器来与cAdvisor进行集成。Prometheus适配器(Prometheus Adapter)是一个Kubernetes API Server的扩展,它允许Prometheus查询Kubernetes API,并将查询转换为cAdvisor可以理解的格式,从而获取容器的性能数据。
数据存储:Prometheus负责将从cAdvisor收集到的时间序列数据进行存储。Prometheus使用一种称为"TSDB"(Time Series Database)的数据库,这使得它能够高效地存储和查询时间序列数据。
数据查询和可视化: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
新建一个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)来确保它们在正确的顺序中启动。
- 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 容器准备就绪后再启动。
- 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 容器准备就绪后再启动。
- 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整体的资源消耗
进入被监控的机器查看详细信息