metrics:114.55.148.180:9100/metrics grafana:http://114.55.148.180:3001/ prometheus:http://114.55.148.180:9090/
目录
Toggledocker部署promrtheus与grafana
第一部分:彻底清除当前 Docker 环境
停止所有容器:
docker stop $(docker ps -aq)删除所有容器:
docker rm $(docker ps -aq)删除所有镜像:
docker rmi $(docker images -q)停止 Docker 服务:
systemctl stop docker卸载 Docker 软件包:
dnf remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin删除所有 Docker 文件和目录(这一步会彻底清除所有镜像、容器、卷和网络配置):
rm -rf /var/lib/docker
rm -rf /var/lib/containerd(可选)删除 Docker 的镜像仓库配置:
rm -rf /etc/docker
现在您的系统已经是一个干净的、没有 Docker 的环境了。
第二部分:在 CentOS 9 上重新安装 Docker
我们将使用官方推荐的方式安装最新版本的 Docker。
安装必要的依赖包:
dnf install -y yum-utils device-mapper-persistent-data lvm2添加 Docker 的官方 YUM 仓库:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#使用这个会出现如下报错
#root@yxy0238:~# yum-config-manager --add-repo #https://download.docker.com/linux/centos/docker-ce.repo
#Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
#Curl error (35): SSL connect error for #https://download.docker.com/linux/centos/docker-ce.repo [OpenSSL SSL_connect: #Connection reset by peer in connection to download.docker.com:443 ]
#Error: Configuration of repo failedroot@yxy0238:~# cat /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://download.docker.com/linux/centos/$releasever/source/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://download.docker.com/linux/centos/$releasever/source/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://download.docker.com/linux/centos/$releasever/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg安装 Docker Engine:
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin启动 Docker 服务并设置开机自启:
systemctl start docker
systemctl enable docker验证安装是否成功:
docker --version
docker run hello-world
第三部分:使用 Docker 部署 Prometheus 监控栈
我们将创建目录结构、配置文件,并分别启动三个容器:Node-Exporter(收集主机指标)、Prometheus(存储和查询指标)、Grafana(可视化指标)。
步骤 1:创建目录和配置文件
创建项目目录:
mkdir -p /server/tools/docker-monitor/{prometheus,grafana}
cd /opt/docker-monitor创建 Prometheus 配置文件
prometheus.yml:vim /server/tools/docker-monitor/prometheus/prometheus.yml将以下内容粘贴到文件中并保存(
:wq)。注意缩进,YAML 对格式敏感。global:
scrape_interval: 15s # 每15秒抓取一次数据
evaluation_interval: 15s # 每15秒评估一次规则
scrape_configs:
# 作业名称:监控本机
- job_name: 'node'
static_configs:
- targets: ['host.docker.internal:9100'] # 将 192.168.10.238 替换为 Docker 主机名host.docker.internal,或者保留localhost:9100,在运行时加上--network="host"参数
# 作业名称:监控 Prometheus 自己
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
创建自定义网络
docker network create monitor-net
步骤 2:部署 Node-Exporter
Node-Exporter 用于收集服务器硬件和操作系统指标。
docker run -d \
--name=node-exporter \
--network=monitor-net \
-p 9100:9100 \
--restart=always \
-v "/:/host:ro,rslave" \
quay.io/prometheus/node-exporter:latest \
--path.rootfs=/host--net="host"和--pid="host":让容器使用主机网络和PID命名空间,以便可以访问所有系统信息。-v "/:/host:ro,rslave":将主机根目录只读挂载到容器内,以便读取系统信息。
步骤 3:部署 Prometheus
docker run -d \
--name=prometheus \
--network=monitor-net \
--user="root:root" \
-p 9090:9090 \
-v /server/tools/docker-monitor/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /server/tools/docker-monitor/prometheus/data:/prometheus \
--restart=always \
prom/prometheus:latest-v .../prometheus.yml:/etc/...:将我们刚才创建的配置文件挂载到容器内。-v .../data:/prometheus:将数据目录挂载到主机,防止容器删除后数据丢失。数据目录的所有者ID(通常是
root)。所以加上--user="root:root"修改配置文件后重启服务就需要执行以下命令
docker restart prometheus
如果需要修改容器的启动参数(如添加
--user、--network等):必须先停止并删除旧容器:
docker stop prometheus && docker rm prometheus
然后使用新的参数重新执行
docker run ...命令来创建并启动一个新容器。因为容器的配置(如网络模式、用户等)是在创建时决定的,无法通过
restart来更改。
步骤 4:部署 Grafana
修改 Grafana 数据目录的所有权(Grafana 在容器内以用户ID 472运行):
chown -R 472:472 /server/tools/docker-monitor/grafana/dataGrafana 容器默认以用户ID 472运行,现在挂载的目录也有了这个用户的写权限。
docker run -d \
--name=grafana \
--network=monitor-net \
-p 3000:3000 \
-v /server/tools/docker-monitor/grafana/data:/var/lib/grafana \
--restart=always \
grafana/grafana:latest-v .../data:/var/lib/grafana:持久化存储 Grafana 的配置、仪表板和数据源信息。
第四部分:访问和验证服务
查看容器状态:
docker ps
应该能看到
node-exporter,prometheus,grafana三个容器都在运行(STATUS 为 Up)。访问服务:
Prometheus: 打开浏览器,访问
http://<您的服务器IP>:9090。进入 “Status” -> “Targets”,应该能看到node和prometheus两个 job 的状态都是 UP。这表示配置正确,Prometheus 正在成功抓取数据。Grafana: 打开浏览器,访问
http://<您的服务器IP>:3000。首次登录用户名和密码都是
admin。登录后会要求修改密码,可以稍后修改。
配置 Grafana 数据源:
在 Grafana 首页,点击 “Add your first data source”。
选择 “Prometheus”。
在 URL 处填写
http://<您的服务器IP>:9090(注意:如果Grafana和Prometheus在同一台机器,这里可以填http://host.docker.internal:9090或直接填服务器IP)。点击 “Save & Test”,应该显示 “Data source is working”。
导入仪表板:
在 Grafana 中,点击左侧 “+” 号 -> “Import”。
在 “Import via grafana.com” 框中输入
1860(这是一个非常流行的 Node-Exporter 仪表板ID)。点击 “Load”,然后选择 Prometheus 数据源,点击 “Import”。
您现在就能看到漂亮的服务器监控仪表板了!
至此,您已经在 CentOS 9 上完成了一个干净、完整的 Prometheus 监控栈的部署。所有数据都已持久化,容器配置为自动重启,非常稳定。
Prom QL语句
1 prometheus metrics type
prometheus监控中采集过来的数据统一称为Metrics数据,其并不是代表具体的数据格式,而是一种统计度量计算单位。
当我们需要为某个系统或者某个服务做监控时,就需要使用到metrics。
prometheus支持的metrics包括但不限于以下几种数据类型:
guage: 所见即所得
最简单的度量指标,只是一个简单的返回值,或者叫瞬时状态。
比如说统计硬盘,内存等使用情况。
couter:
就是一个计数器,从数据量0开始累积计算,在理想情况下,只能是永远的增长,不会降低(有特殊情况,比如粉丝量)。
比如统计1小时,1天,1周,1一个月的用户访问量,这就是一个累加的操作。
histograms:
是统计数据的分布情况,比如最小值,最大值,中间值,中位数等,代表的是一种近似百分比估算数值。
通过histograms可以分别统计处在一个时间段(1s,2s,5s,10s)内nginx访问用户的响应时间。
summary:
summary是histograms的扩展类型,主要弥补histograms不足。
本。
2 PromQL初体验
2.1 查看某个特定的key
node_cpu_seconds_total
2.2 查看某个节点的指标
node_cpu_seconds_total{instance="10.0.0.41:9100"}
2.3 查看某个节点的某刻CPU的某种状态
node_cpu_seconds_total{instance="10.0.0.41:9100",cpu="0",mode="idle"}
2.4 查询最近10s内某个节点CPU的某种状态时间
node_cpu_seconds_total{instance="10.0.0.41:9100",cpu="0",mode="idle"}[10s]
2.5 统计1分钟内,使用标签过滤器查看”10.0.0.42:9100″节点的第0颗CPU,非空闲状态使用的总时间
node_cpu_seconds_total{mode!="idle",cpu="0", instance="10.0.0.42:9100"}[1m]
2.6 统计1分钟内,使用标签过滤器查看”10.0.0.42:9100″节点的第0颗CPU,mode名称以字母”i”开头的所有CPU核心。
node_cpu_seconds_total{mode=~"i.*",cpu="0", instance="10.0.0.42:9100"}[1m]
2.7 统计1分钟内,使用标签过滤器查看”10.0.0.42:9100″节点的第0颗CPU,mode名称不是以字母”i”开头的所有CPU核心。
node_cpu_seconds_total{mode!~"i.*",cpu="0", instance="10.0.0.42:9100"}[1m]
统计cpu繁忙程度:
先进行cpu压力测试(stress 命令)10分钟,内存只占256M
stress –cpu 8 –io 4 –vm 2 –vm-bytes 128M –timeout 10m
验证繁忙程度:
prometheus查询cpu:node_cpu_seconds_total为key,{}里面叫做标签选择器–用于过滤指标,cpu选择1,[10m]10分钟内
查询114.55.148.180这台机器第1颗cpu十分钟内CPU使用的总时间:node_cpu_seconds_total{instance=”114.55.148.180:9100″,cpu=”1″}[10m]


查看数据中代表的时间 date -s "@1749997721" -RSun, 15 Jun 2025 22:28:41 +0800
当前时间 dateSun Jun 15 10:28:44 PM CST 2025
3 Prometheus常用的函数
3.1 increase
increase函数:
用来针对counter数据类型,截取其中一段时间总的增量。
举个例子:
increase(node_cpu_seconds_total{mode=”idle”,cpu=”0″, instance=”10.0.0.42:9100″}[1m])
统计1分钟内,使用标签过滤器查看”10.0.0.42:9100″节点的第0颗CPU,空闲状态使用的总时间增量。

3.2 sum
sum函数: 加和的作用。
举个例子:
sum(increase(node_cpu_seconds_total{mode=”idle”,cpu=”0″}[1m]))
统计1分钟内,使用标签过滤器查看所有节点的第0颗CPU,空闲状态使用的总时间增量,并将返回结果累加。
3.3 by by函数:按照括号内的值进行分组
将数据进行分组,类似于MySQL的”GROUP BY”。
举个例子:
sum(increase(node_cpu_seconds_total{mode=”idle”}[1m])) by (instance)
统计1分钟内,使用标签过滤器查看CPU空闲状态,并将结果进行累加,基于instance进行分组。
3.4 rate
rate函数:
它的功能是按照设置的时间段,取counter在这个时间段中平均每秒的增量。
举个例子:
rate(node_cpu_seconds_total{mode=”idle”,cpu=”0″, instance=”10.0.0.42:9100″}[1m])
统计1分钟内,使用标签过滤器查看”10.0.0.42:9100″节点的第0颗CPU,空闲状态使用的每秒的增量。
increase和rate如何选择:
(1)对于采集数据频率较低的场景建议使用increase函数,
因为使用rate函数可能会出现断点,比如针对硬盘容量监控。
(2)对于采集数据频率较高的场景建议使用rate函数,
比如针对CPU,内存,网络流量等都是可以基于rate函数来采集等。
3.5 topk
topk函数:
取前几位的最高值,实际使用的时候一般会用该函数进行瞬时报警,而不是为了观察曲线图。
举个例子:
topk(3, rate(node_cpu_seconds_total{mode=”idle”}[1m]))
统计1分钟内,使用标签过滤器查看CPU,所有状态使用的每秒的增量,只查看前3个节点。按照空闲时间排序,越闲的cpu数值越高
3.6 count
count函数:
把数值符合条件的,输出数目进行累加加和。
比如说企业中有100台服务器,如果只有10台服务器CPU使用率高于80%时候是不需要报警的,但是数量操作70台时就需要报警了。
举个例子:
count(oldboyedu_tcp_wait_conn > 500):
假设oldboyedu_tcp_wait_conn是咱们自定义的KEY。
若TCP等待数量大于500的机器数量就判断条件为真。
count(rate(node_cpu_seconds_total{cpu=”0″,mode=”idle”}[1m]))
对统计的结果进行计数。
count(rate(node_cpu_seconds_total{cpu=”0″,mode=”idle”}[1m]) > 0.5)
统计1分钟内编号为0空闲cpu每秒空闲大于0.5的节点有几个。
3.7 其他函数
推荐阅读:
https://prometheus.io/docs/prometheus/latest/querying/functions/