如何快速部署 Prometheus?- 每天5分钟玩转 Docker 容器技术(85)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

上一节介绍了 Prometheus 的核心,多维数据模型。本节演示如何快速搭建 Prometheus 监控系统。

环境说明

我们将通过 Prometheus 监控两台 Docker Host:192.168.56.102 和 192.168.56.103,监控 host 和容器两个层次的数据。

按照架构图,我们需要运行如下组件:

Prometheus Server

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

Exporter

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

我们将使用:

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

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

Grafana

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

运行 Node Exporter

在两个 host 上执行如下命令:

 

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://192.168.56.102:9100/metrics 测试一下。

运行 cAdvisor

在两个 host 上执行如下命令:

 

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://192.168.56.102:8080/metrics 测试一下。

运行 Prometheus Server

在 host 192.168.56.103 上执行如下命令:

 

docker run -d -p 9090:9090 \
-v /root/prometheus.yml:/etc/prometheus/prometheus.yml \
--name prometheus \
--net=host \
prom/prometheus

 

注意,这里我们使用了 --net=host,这样 Prometheus Server 可以直接与 Exporter 和 Grafana 通信。

prometheus.yml 是 Prometheus Server 的配置文件。

最重要的配置是:

 

static_configs:
- targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.56.102:8080','192.168.56.102:9100']

 

指定从哪些 exporter 抓取数据。这里指定了两台 host 上的 Node Exporter 和 cAdvisor。

另外 localhost:9090 就是 Prometheus Server 自己,可见 Prometheus 本身也会收集自己的监控数据。同样地,我们也可以通过 http://192.168.56.103:9090/metrics 测试一下。

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

如下图所示:

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

运行 Grafana

在 host 192.168.56.103 上执行如下命令:

 

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://192.168.56.103:3000/


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

Name 为 Data Source 命名,例如 prometheus

Type 选择 Prometheus

Url 输入 Prometheus Server 的地址 http://192.168.56.103:9090

其他保持默认值,点击 Add

如果一切顺利,Grafana 应该已经能够访问 Prometheus 中存放的监控数据了,那么如何展示呢?

Grafana 是通过 Dashboard 展示数据的,在 Dashboard 中需要定义:

  1. 展示 Prometheus 的哪些多维数据?需要给出具体的查询语言表达式。

  2. 用什么形式展示,比如二维线性图,仪表图,各种坐标的含义等。

可见,要做出一个 Dashboard 也不是件容易的事情。幸运的是,我们可以借助开源社区的力量,直接使用现成的 Dashboard。

访问 https://grafana.com/dashboards?dataSource=prometheus&search=docker,将会看到很多用于监控 Docker 的 Dashboard。

我们可以下载这些现成的 Dashboard,然后 import 到我们的 Grafana 中就可以直接使用了。

比如下载 Docker and system monitoring,得到一个 json 文件,然后点击 Grafana 左上角菜单 Dashboards -> Import

导入我们下载的 json 文件。

Dashboard 将立刻展示出漂亮的图表。


在这个 Dashboard 中,上部分是 host 的数据,我们可以通过 Node 切换不同的 host。


Dashboard 的下半部分展示的是所有的容器监控数据。Grafana 的 Dashboard 是可交互的,我们可以在图表上只显示指定的容器、选取指定的时间区间、重新组织和排列图表、调整刷新频率,功能非常强大。

好了,以上就完成了 Prometheus 监控系统的部署,更多功能大家可以自行探索。到这里我们已经学习了多种 Docker 监控方案,是时候对它们做个比较了,下一节见。

书籍:
1.《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html

2.《每天5分钟玩转OpenStack》
https://item.jd.com/12086376.html


本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/1975863


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
224 93
|
5天前
|
网络协议 API Docker
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
38 23
|
5天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
95 15
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
159 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
62 17
|
1月前
|
运维 Java 虚拟化
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
119 12
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
186 11
|
2月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
299 78
|
2月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
2月前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
194 35