almalinux下部署promethues+grafana服务-容器化

almalinux下部署promethues+grafana服务-容器化

一、简介:

在工作中经常使用prometheus和grafana组件进行监控数据收集和展示,或者是将grafana页面再二次开发展现在对应的监控页面中。知其然这么久了,在本地虚机部署下知其所以然一下。

prometheus+grafana+linux_exporter是prometheus生态中最经典的linux主机监控方案,实用性和灵活性都很强。

  • linux_exporter负责监控数据收集,运行在linux主机上的轻量组件,通过读取系统内核文件(/proc和/sys等),实时采集CPU、内存、硬盘、网络等系统级指标,在通过9100端口的metrics接口以prometheus规范暴露数据。
  • prometheus是监控核心引擎,负责从linux_exporter定期"抓取"指标数据,存储到内置的TSDB(时序数据库)中,同时支持多维度数据查询(PromQL语法),告警规则配置和告警触发。
  • grafana是可视化展示端,作为专业的监控仪表盘工具,通过对接prometheus数据源,将原始指标数据转化为直观的图表(折线图、柱状图、仪表盘等),支持自定义仪表盘、多数据源整合和告警可视化。

prometheus+grafana+linux_exporter监控方案特点:

  • 轻量高效,部署成本低:linux_exporter资源占用小(内存通常小于50MB),prometheus和grafana支持容器化部署,单节点即可满足中小规模监控需求,集群模式可横向扩展。
  • 数据实时性强,查询灵活:prometheus默认15秒抓取一次数据,支持自定义抓取间隔;PromQL语法可实现多维度筛选(如按照主机、指标类型过滤)、聚合计算(如平均值、最大值),快速定位问题。
  • 可视化能力强大:grafana提供丰富的预制仪表盘模版(可直接导入linux监控模版),也支持拖拽式自定义仪表盘,支持多指标组合展示、时间范围缩放,直观呈现系统资源变化趋势。
  • 告警体系完善:prometheus可配置自定义告警规则(如CPU使用率大于百分之八十持续五分钟触发告警),支持对接邮件、钉钉、slack等告警渠道,grafana也可基于图表配置告警,实现"可视化+告警"联动。
  • 开源免费,生态成熟:三者均为开源项目,无商业授权成本,社区活跃,文档丰富,支持与k8s、云平台等其他组件无缝集成。

prometheus+grafana+linux_exporter监控方案适用场景:

  • 中小规模linux主机集群监控:适用于企业内部物理机、虚拟机集群(10-100主机),需统一监控资源使用状态。
  • 容器化环境linux节点监控:在docker或者k8s集群中,通过容器化部署linux_exporter,监控每个节点的底层资源使用情况,补充k8s监控的不足。
  • 开发或测试环境监控需求:无需复杂配置,快速搭建监控体系,满足开发、测试阶段对主机资源的实时观察和问题排查需求。
  • 需要自定义监控需求场景:支持通过PromQL自定义指标计算,grafana自定义仪表盘,适配不同业务的监控侧重点(如重点监控磁盘IO、网络带宽等)。
  • 轻量级告警需求:适用于需要基础告警能力(如资源使用率超标告警),无需复杂运维平台的场景,告警规则配置简单易懂。

官网地址放在这里,兄弟们有需求自取。

promethues官网:promethues官网地址

grafana官网:grafana官网地址

接着查看下各组件官网文档确定下当前版本有哪些,要部署就整个最新还能看看有啥新功能。

promethues官方文档:查看promethues官方文档中版本

grafana官方文档:查看grafana官方文档中版本

github查看下node_exporter的版本node_exporter版本

二、环境准备:

这里准备两台虚机,一台机器-server将prometheus+grafana服务部署上,另外一台虚机-node安装个node_exporter将监控数据上报过去;然后在本地的笔记本上安装一个window的exporter监控下win的监控数据。

如果你没有docker安装源或者是连机器都没有可以参考这篇文章:almalinux系统-基础环境准备

机器信息:

操作系统 IP地址
almalinux 192.168.100.30【prometheus+grafana+node_exporter】
almalinux 192.168.100.31 【node_exporter】
window10 192.168.100.1 【Windows_exporter】

版本记录如下:

软件名 版本
docker-ce 29.1.4
docker compose v5.0.1
prometheu v3.7.0
grafana 12.3.0
node_exporter 1.10.1
windows_exporter 0.31.3

下面实验使用到的容器镜像和windows_exporter的软件的百度云链接:proetheus+grafana+exporter软件百度云下载地址

这里给第一台虚机添加一个磁盘作为数据存储;

三、安装步骤:

0、格式化数据盘并挂载

第一台机器-进入虚机先将数据盘格式化设置个开机自动挂载;

bash 复制代码
#查看磁盘系统是正常识别的
lsblk /dev/sdb
#将这块数据盘分一个区给全部容量
parted --script /dev/sdb mklabel gpt mkpart primary ext4 0% 100%
#将磁盘格式化成xfs格式
mkfs.xfs /dev/sdb1 
#查看下格式化磁盘的UUID写入fstab确保开机自启
blkid /dev/sdb1
echo 'UUID="25b1d60b-3a95-4b41-923e-6d9d185d0840" /data xfs defaults 0 0' >> /etc/fstab
#创建下挂载目录
mkdir /data
#(非必须)这个是我操作时候mount -a时候提示我执行
systemctl daemon-reload
#通过fstab文件进行磁盘挂载并且查看挂载目录是正常的
mount -a
df -h /data/

1、docker-ce安装

安装docker-ce等软件并设置开机自启;

PS:这里就在第一台机器上执行就好,第二台机器执行步骤在下面。

复制代码
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
docker --version		------》Docker version 29.1.4, build 0e6fee6
docker compose version	------》Docker Compose version v5.0.1

2、时间同步和部署文件

安装下时间同步软件chronyd,在almalinux的软件包源中没有ntp服务。

PS:这里就在第一台机器上执行就好,第二台机器执行步骤在下面。

bash 复制代码
# 安装软件并设置为开机自启
dnf install -y chrony.x86_64
systemctl enable --now chronyd
# 备份下chronyd配置文件然后写入新的重启下服务
cp /etc/chrony.conf /etc/chrony.conf.bak
cat > /etc/chrony.conf << EOF
# 国内时间服务器列表
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst

# 同步硬件时间
rtcsync

# 当系统时间与硬件时间差异较大时,允许调整硬件时间
makestep 1.0 3

# 日志文件路径
logdir /var/log/chrony
EOF
systemctl restart chronyd

创建数据目录和部署目录;

bash 复制代码
# 数据目录
mkdir -p /data/prometheus-grafana/{prometheus,grafana}
# Grafana 容器默认使用 UID=472 的 grafana 用户运行,直接给宿主机目录授权这个 UID 即可(无需开放 777 宽权限):
chown -R 472:472 /data/prometheus-grafana/grafana
# Prometheus 容器默认以 nobody 用户(UID=65534)运行,授权命令:
chown -R 65534:65534 /data/prometheus-grafana/prometheus

# 部署目录
mkdir -p /opt/prometheus-grafana/{prometheus,grafana}
cd /opt/prometheus-grafana

准备prometheus和docker compose的配置文件;

bash 复制代码
pwd------》/opt/prometheus-grafana
[root@server prometheus-grafana]# vim prometheus/prometheus.yml 
global:
  scrape_interval: 15s  # 全局采集周期:每 15 秒拉取一次指标(可根据需求调整)
  evaluation_interval: 15s  # 规则评估周期:每 15 秒评估一次告警规则

scrape_configs:
  # 采集 Prometheus 自身指标
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  # 采集 Node-Exporter 指标(关键配置)
  - job_name: 'node-exporter-local'  # 任务名,可自定义(Grafana 模板会用到)
    static_configs:
      # 目标地址:容器间通信用服务名(node-exporter)+ 端口(9100)
      # 若 Node-Exporter 部署在其他 Linux 主机,此处改为 <目标主机IP>:9100(需放行 9100 端口)
      - targets: ['node-exporter:9100']
        labels:
          hostname: 'almalinux-server-192e168e100e30'  # 自定义主机名标签
          env: 'production'  # 自定义环境标签
  # 采集目标Linux虚机指标(关键配置)
  - job_name: 'node-exporter-remote'  # 任务名,自定义(如虚机 hostname)
    static_configs:
      # 目标地址:目标虚机IP + 9100端口(多个虚机用逗号分隔)
      - targets: ['192.168.100.31:9100']  # 替换为你的目标虚机实际IP
        labels:
          hostname: 'almalinux-server-192e168e100e31'  # 自定义主机名标签
          env: 'production'  # 自定义环境标签
          # 如果有多台机器的话可以这么写        
          #      - targets: [
          #          '192.168.1.200:9100',  # 虚机1
          #          '192.168.1.201:9100',  # 虚机2
          #          '192.168.1.202:9100'   # 虚机3
          #        ]
          #        labels:
          #          env: 'production'  # 统一标签,方便筛选
  # 采集 Windows 机器的 Windows Exporter 指标
  - job_name: 'windows-exporter'  # 任务名,自定义
    static_configs:
      # 目标地址:Windows 机器 IP + 9182 端口(多个 Windows 机器用逗号分隔)
      - targets: ['192.168.100.1:9182']
        labels:
          hostname: 'windows10-192e168e100e1'  # 自定义主机名标签
          env: 'production'  # 自定义环境标签
[root@server prometheus-grafana]# 

[root@server prometheus-grafana]# vim docker-compose.yml 
services:
  # Node-Exporter 服务(采集 Linux 主机指标)
  node-exporter:
    #    image: prom/node-exporter:v1.10.1  # 官方镜像,稳定可靠
    image: prom/node-exporter:v1.6.1  # 官方镜像,稳定可靠
    container_name: node-exporter
    restart: always  # 异常自动重启
    ports:
      - "9100:9100"  # Node-Exporter 默认端口,宿主机端口可自定义(如 9101:9100)
    volumes:
      # 挂载宿主机核心目录,用于采集系统指标(必须挂载,否则无数据)
      - /proc:/host/proc:ro  # 只读权限,避免容器修改宿主机文件
      - /sys:/host/sys:ro
      - /:/rootfs:ro
      - /run/systemd:/run/systemd:ro    # 挂载systemd文件
      - /var/run/dbus:/var/run/dbus:ro  # 提供 dbus socket 文件
      - /etc/localtime:/etc/localtime:ro  # 挂载宿主机时区,保持时间同步
      - /etc/timezone:/etc/timezone:ro    # 同步时区配置
    command:
      # 告知 Node-Exporter 挂载目录的实际路径(关键参数,否则指标采集异常)
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'  # 忽略无关挂载点,减少无用指标
      - '--collector.pressure'   # 支持 Pressure 面板(node_pressure_* 指标)
      - '--collector.processes'  # 支持进程/线程/PID面板(node_processes_* 指标)
      - '--collector.systemd'    # 支持 Systemd 面板(node_systemd_* 指标)
      - '--collector.hwmon'      # 支持硬件温度/风扇面板(node_hwmon_* 指标)
      - '--collector.interrupts' # 支持 IRQ 中断面板(node_interrupts_* 指标)
      - '--collector.cpu'        # 确保 CPU 相关指标正常(默认已开,显式声明更稳妥)
      - '--collector.meminfo'    # 确保内存指标正常
      - '--collector.diskstats'  # 确保磁盘指标正常
      - '--collector.netdev'     # 确保网络指标正常
      - '--collector.cpufreq'    # 启用CPU频率缩放收集器
    networks:
      - prom-net  # 加入与 prometheus、grafana 同一网络,确保容器间通信
    cap_add:
      - SYS_PTRACE  # 进程采集必需权限
      - SYS_ADMIN   # 增强系统访问权限(辅助 systemd 采集)
    privileged: false  # 先不开启特权,修复后测试

  # Prometheus 服务
  prometheus:
    image: prom/prometheus:v3.7.0  # 稳定版本(可替换为最新版)
    container_name: prometheus
    restart: always  # 开机自启
    ports:
      - "9090:9090"  # 宿主机端口:容器端口
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  # 挂载配置文件
      - /data/prometheus-grafana/prometheus:/prometheus  # 自定义宿主机目录-绑定挂载
        #- prometheus-data:/prometheus  # 默认用法-命名数据卷(仅指定数据卷名称,docker会自动在宿主机/var/lib/docker/volumes/下创建存储目录)
      - /etc/localtime:/etc/localtime:ro  # 挂载宿主机时区,保持时间同步
      - /etc/timezone:/etc/timezone:ro    # 同步时区配置
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'
    networks:
      - prom-net  # 加入与 prometheus、grafana 同一网络,确保容器间通信

  # Grafana 服务
  grafana:
    image: grafana/grafana:12.3.0  # 稳定版本(可替换为最新版)
    container_name: grafana
    restart: always
    ports:
      - "3000:3000"  # 宿主机端口:容器端口
    volumes:
      - /data/prometheus-grafana/grafana:/var/lib/grafana  # 自定义宿主机目录-绑定挂载
        #- grafana-data:/var/lib/grafana  # 默认用法-命名数据卷(仅指定数据卷名称,docker会自动在宿主机/var/lib/docker/volumes/下创建存储目录)
      - /etc/localtime:/etc/localtime:ro  # 挂载宿主机时区,保持时间同步
      - /etc/timezone:/etc/timezone:ro    # 同步时区配置
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=Admin@123  # 自定义 Grafana 管理员密码(建议修改)
    depends_on:
      - prometheus  # 依赖 Prometheus 服务,启动顺序保证
    networks:
      - prom-net  # 加入与 prometheus、grafana 同一网络,确保容器间通信

# 统一网络:确保 3 个服务在同一网络,容器间可通过服务名(如 node-exporter)通信
networks:
  prom-net:
    driver: bridge

        ## 默认用法-命名数据卷(仅指定数据卷名称,docker会自动在宿主机/var/lib/docker/volumes/下创建存储目录)
        #volumes:
        #  prometheus-data:
        #  grafana-data:
[root@server prometheus-grafana]# 

3、容器镜像导入

这是镜像导出之前查看的镜像信息,在导入之后对比下确定容器镜像是正常导入;

bash 复制代码
[root@localhost ~]# docker images --digests 
REPOSITORY           TAG       DIGEST                                                                    IMAGE ID       CREATED       SIZE
grafana/grafana      12.3.0    sha256:70d9599b186ce287be0d2c5ba9a78acb2e86c1a68c9c41449454d0fc3eeb84e8   70d9599b186c   8 days ago    989MB
prom/node-exporter   v1.10.1   sha256:b01f6d5e6945d5001894165cce46a80fd8d0cfee68c35c8b251c50d8d446ba75   b01f6d5e6945   4 weeks ago   41.4MB
prom/node-exporter   v1.6.1    sha256:81f94e50ea37a88dfee849d0f4acad25b96b397061f59e5095905f6bc5829637   81f94e50ea37   2 years ago   37.2MB
prom/prometheus      v3.7.0    sha256:29c1e0b48ad816750245dea3d65ac3ce57dda30547e67b1e9a5176e2953cc4dc   29c1e0b48ad8   6 weeks ago   507MB
[root@localhost ~]# 

这里将云盘的镜像压缩包放到机器上导入之后查看下镜像信息;

PS:注意目录我这里习惯性将东西放到secure用户家目录下面,你自己在哪就在那执行哈!

bash 复制代码
cd /home/secure/images-prometheus+grafana-20251127/
docker load -i prom_prometheus_v3.7.0.tar
docker load -i grafana_grafana_12.3.0.tar
docker load -i prom_node-exporter_v1.10.1.tar
docker load -i prom_node-exporter_v1.6.1.tar
docker images --digests

4、启动容器

启动之前可以进入docker-compose文件中将那个linux_exporter的镜像版本改成1.10.1,最新的。

PS:之前实验的时候第一次使用最新版本linux_exporterv1.10.1容器镜像在grafana加载的linux的模版之后监控图表有十三个没有监控数据,豆包了下说是镜像版本太高导致监控项名称改变和我导入的grafana的1860模版不匹配,所以换了个v1.6.1的镜像,结果更换了还是有13个监控图表没有监控数据,换不换效果一样。

PPS:linux_exporter的1.6.1和1.10.1两个版本镜像都是导入的,用那个都行。

通过docker compose来进行容器拉起;

复制代码
 pwd------》/opt/prometheus-grafana
 docker compose up -d
 docker ps -a

5、浏览器访问

登录promethues页面------》http://192.168.100.30:9090

PS:这里地址是我自己虚机的地址,你虚机地址配置什么这里修改成对应地址。

PPS:如果你使用的是谷歌浏览器,你就使用无痕模式访问,不然有几率会被安全检查机制拦截,无痕模式就没有这种情况。

这里可以查看下监控机状态:

status------》target health下面能看到四个记录,现在能看到两个绿色的是up,另外两个是红色的up,这一个是node机器的exporter没有安装导致的,一个是win机器的exporter没安装,是红色就对了。

登录grafana页面------》http://192.168.100.30:3000【账号/密码:admin/Admin@123】

输入账号密码能看到这个页面说明我们grafana的容器是正常启动的,想看监控数据加载模版步骤在下面。

6、linux-node_exporter安装

node节点安装个时间同步,再安装个docker-ce了,然后将容器镜像下载,将node_exporter容器镜像导入就可以了。

bash 复制代码
# 时间同步 
dnf install -y chrony.x86_64
systemctl enable --now chronyd
cp /etc/chrony.conf /etc/chrony.conf.bak
cat > /etc/chrony.conf << EOF
# 国内时间服务器列表
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst

# 同步硬件时间
rtcsync

# 当系统时间与硬件时间差异较大时,允许调整硬件时间
makestep 1.0 3

# 日志文件路径
logdir /var/log/chrony
EOF
systemctl restart chronyd

# 容器安装
yum install docker-ce -y
systemctl enable --now docker

# 容器镜像导入
pwd------》/home/secure/images-prometheus+grafana-20251127/
docker load -i prom_node-exporter_v1.6.1.tar
docker load -i prom_node-exporter_v1.10.1.tar
docker images --digests

创建node_exporter容器将监控数据上报到prometheus中,

bash 复制代码
docker run -d \
  --name node-exporter \
  --restart always \
  -p 9100:9100 \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  -v /:/rootfs:ro \
  -v /run/systemd:/run/systemd:ro \
  -v /var/run/dbus:/var/run/dbus:ro \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/timezone:/etc/timezone:ro \
  --cap-add=SYS_PTRACE \
  --cap-add=SYS_ADMIN \
  --privileged=false \
  prom/node-exporter:v1.10.1 \
  --path.procfs=/host/proc \
  --path.sysfs=/host/sys \
  --collector.pressure \
  --collector.processes \
  --collector.systemd \
  --collector.hwmon \
  --collector.interrupts \
  --collector.cpu \
  --collector.meminfo \
  --collector.diskstats \
  --collector.netdev \
  --collector.cpufreq 
docker ps -a

接着等待个三五秒刷新下prometheus页面就能看到这台linux机器有监控数据了,妥了;

7、windows_exporter安装

windows的exporter需要上github下载安装下:window-exporter的github下载地址

接着往下扒拉找到这个amd64位的服务就好了;

我百度云盘中有下载好的,直接使用也是可以的:

一个是exe结尾的双击之后会打开一个终端,这是临时的,关闭终端windows_exporter也就关闭了;

一个是msi结尾的这个是一个常驻在后端的exporter,使用那个都可以。

我这是使用exe,安装过程中跳出来的防火墙都允许,最后就是这个终端状态了;

接着等待三五秒然后刷线下prometheus的页面就可以看到机器状态up了,这就妥了;

8、加载grafana模版

经过上面的步骤我们在两台linux虚机和本地win电脑上都将agent启动了,现在监控数据源都有了,让我们上grafana上添加模版看下监控数据吧。

首先,将promethues的数据源添加进来grafana页面 ------》Connections------》Data sources ------》add data source-选择promethues在settings页面的connection写入上面promethues地址【http://192.168.100.30:9090】------》往下巴拉到最底下点击【save & test】

再点击data source就能看到我们添加的promethues数据源了

创建一个dashboard进行监控数据展示------》点击dashboards------》左上角找到NEW点击下选择import------》输入ID【1860】grafana官方的linux监控面板-点击load------》点击import导入就好。

再创建一个window的dashboard:左边点击dashboard------》NEW------》import------》输入【21697】grafana的window模版------》load------》选择下数据源prometheus,就可以看到window机器的监控了。

到这里我们导入linux和window的监控模版可以看到监控数据那就是完成了,在almalinux系统下简单部署一个prometheus+grafana的容器化的监控环境就完成了。

四、报错记录:

报错1:拉取promethues和grafana容器镜像失败

我这里使用的是docker-ce默认的仓库镜像源是没法直接拉取镜像的,还是导入容器镜像。

解决步骤:

看【三-3、容器镜像导入】就可以了。

报错2:grafana添加promethues数据源导入1860监控模版等待五分钟之后看不到监控数据

解决方案:

明确下监控数据走向:确认prometheus采集监控数据------》排查grafana数据源配置正常------》定位模版与数据匹配问题

排查发现是没有部署node_exporter导致监控数据没有正常收集,按照上面步骤安【三、6、linux-mnode_exporter安装】就可以了。

报错3:grafana加载了linux的1860模版后部分监控图表没有正常显示

PS:下面是在grafana导入监控模版之后查看有部分监控项没有监控数据,我也是信了豆包的邪,检查监控项更换exporter的镜像版本最后还是没有监控数据,但是这个排查过程我想记录下所以有了这个报错。

首先查看监控图表确定这个告警视图是没得监控数据的,

点击监控图表右上角三个点然后选择【Edit】

这时候我们就可以看到对应的监控项获取命令了,通过查看这个监控项获取命令再进一步排查为什么没有监控数据。

确定监控项之后可以到被监控机器的监控项中搜索或者是prometheus中搜索都可以。

被监控机查看监控项------》http://192.168.100.30:9100/metrics

记录下没有监控数据的监控图表名称和对应的监控项获取命令:

1、Quick CPU / Mem / Disk------》Pressure------》irate(node_pressure_cpu_waiting_seconds_total{instance=" n o d e " , j o b = " node",job=" node",job="job"}[KaTeX parse error: Expected group after '_' at position 1: _̲_rate_interval]...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲[__rate_interval])

3+4+5、System Timesync

------》Processes Detailed States------》node_processes_state{instance=" n o d e " , j o b = " node",job=" node",job="job"}

------》PIDs Number and Limit------》node_processes_pids{instance=" n o d e " , j o b = " node",job=" node",job="job"}

------》Threads Number and Limit------》node_processes_threads{instance=" n o d e " , j o b = " node",job=" node",job="job"}

6+7、System Misc

------》CPU Frequency Scaling------》node_cpu_scaling_frequency_hertz{instance=" n o d e " , j o b = " node",job=" node",job="job"}

------》IRQ Detail------》irate(node_interrupts_total{instance=" n o d e " , j o b = " node",job=" node",job="job"}[KaTeX parse error: Expected group after '_' at position 1: _̲_rate_interval]...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲ * on(chip) gro...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲ ------》Hardware Fa...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲ * on(chip) gro...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲ 10+11+12+13、Sy...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 24: ...te="activating"}̲ ------》Systemd Soc...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲ ------》Systemd Soc...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲[__rate_interval])

------》Systemd Sockets Refused------》irate(node_systemd_socket_refused_connections_total{instance=" n o d e " , j o b = " node",job=" node",job="job"}[$__rate_interval])

直接使用监控项进入节点页面进行检索的的确是没有的;



豆包了下,可能是linux_exporter的版本高【最新版本v1.10.1】监控项名称有变化,使用新的监控项搜索也是没有,诡异了!

bash 复制代码
失效监控项 → 最新监控项映射表(含修改后查询)
原失效监控项(v0.x)						最新监控项(v1.10.1)					说明
node_pressure_cpu_waiting_seconds_total	------》node_cpu_pressure_waiting_seconds_total	指标前缀新增cpu,明确指向 CPU 压力
node_processes_state					------》node_processes_states					指标名末尾加s(复数形式),标签state保留
node_processes_pids 					------》node_processes_max_processes			原指标拆分,此指标表示最大进程数(兼容原监控意图)
node_processes_threads					------》node_processes_max_threads				原指标拆分,此指标表示最大线程数
node_cpu_scaling_frequency_hertz		------》node_cpu_scaling_frequency_hertz		指标名未变!需检查是否启用cpu收集器(默认启用)
node_interrupts_total					------》node_interrupts_total					指标名未变!需检查是否启用interrupts收集器(默认启用)
node_hwmon_temp_celsius(关联 chip_name)------》node_hwmon_temp_celsius(标签变更)	标签chip_name → 改为name,关联指标node_hwmon_chip_names → node_hwmon_chip_info
node_hwmon_fan_rpm(关联 chip_name)		------》node_hwmon_fan_rpm(标签变更)			同上(风扇转速指标,标签关联逻辑一致)
node_systemd_units{state="activating"}	------》node_systemd_unit_state					指标名改为node_systemd_unit_state,标签state保留
node_systemd_socket_current_connections	------》node_systemd_socket_connections_current	指标名调整(current_connections → connections_current)
node_systemd_socket_accepted_connections_total	------》node_systemd_socket_connections_accepted_total	指标名调整(accepted_connections → connections_accepted)
node_systemd_socket_refused_connections_total	------》node_systemd_socket_connections_refused_total	指标名调整(refused_connections → connections_refused)




接着豆包了下,grafana的1860模版和linux_exporter的v1.6.1模版完全适配,将linux_exporter版本降低了看下监控项是否全部具备。

将linux_exporter版本降低为v1.6.1之后查看缺少的监控页面还是和v1.10.1版本一样,这应该就和版本没啥关系了。

Quick CPU / Mem / Disk------》Pressure------》irate(node_pressure_cpu_waiting_seconds_total{instance=" n o d e " , j o b = " node",job=" node",job="job"}[KaTeX parse error: Expected group after '_' at position 1: _̲_rate_interval]...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲[__rate_interval])

System Timesync

------》Processes Detailed States------》node_processes_state{instance=" n o d e " , j o b = " node",job=" node",job="job"}

------》PIDs Number and Limit------》node_processes_pids{instance=" n o d e " , j o b = " node",job=" node",job="job"}

------》Threads Number and Limit------》node_processes_threads{instance=" n o d e " , j o b = " node",job=" node",job="job"}

System Misc

------》CPU Frequency Scaling------》node_cpu_scaling_frequency_hertz{instance=" n o d e " , j o b = " node",job=" node",job="job"}

------》IRQ Detail------》irate(node_interrupts_total{instance=" n o d e " , j o b = " node",job=" node",job="job"}[KaTeX parse error: Expected group after '_' at position 1: _̲_rate_interval]...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲ * on(chip) gro...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲ ------》Hardware Fa...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲ * on(chip) gro...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲ Systemd ------》Sys...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 24: ...te="activating"}̲ ------》Systemd Soc...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲ ------》Systemd Soc...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲[__rate_interval])

------》Systemd Sockets Refused------》irate(node_systemd_socket_refused_connections_total{instance=" n o d e " , j o b = " node",job=" node",job="job"}[$__rate_interval])

直接在监控页面搜索也是没有对应监控项的;



查看node-exporter的日志提示找不到systemd的文件------》这里应该还是启动参数有问题;

这里豆包下报错然后重新启动之后systemd相关的监控项有了,监控数据也有了。

Systemd

------》Systemd Units State------》node_systemd_units{instance=" n o d e " , j o b = " node",job=" node",job="job",state="activating"}

------》Systemd Sockets Current------》node_systemd_socket_current_connections{instance=" n o d e " , j o b = " node",job=" node",job="job"}

------》Systemd Sockets Accepted------》irate(node_systemd_socket_accepted_connections_total{instance=" n o d e " , j o b = " node",job=" node",job="job"}[KaTeX parse error: Expected group after '_' at position 1: _̲_rate_interval]...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲[__rate_interval])

接着排查下发现system timesync的三个没有监控数据的监控项,去了system processes

System Timesync

------》Processes Detailed States------》node_processes_state{instance=" n o d e " , j o b = " node",job=" node",job="job"}

------》PIDs Number and Limit------》node_processes_pids{instance=" n o d e " , j o b = " node",job=" node",job="job"}

------》Threads Number and Limit------》node_processes_threads{instance=" n o d e " , j o b = " node",job=" node",job="job"}

检查IRQ的监控数据也是有了;

System Misc

------》IRQ Detail------》irate(node_interrupts_total{instance=" n o d e " , j o b = " node",job=" node",job="job"}[$__rate_interval])

这两个监控项依赖系统内核版本,检查虚机本地都没有【/proc/pressure】目录,这是内核不支持没有监控项是正常的。

Quick CPU / Mem / Disk------》Pressure------》irate(node_pressure_cpu_waiting_seconds_total{instance=" n o d e " , j o b = " node",job=" node",job="job"}[KaTeX parse error: Expected group after '_' at position 1: _̲_rate_interval]...node",job="KaTeX parse error: Expected 'EOF', got '}' at position 5: job"}̲[__rate_interval])

这两个监控项是针对硬件温度和风扇,但是我们是虚拟机环境没有服务器硬件传感器,没有这个监控项也是正常的;

Hardware Misc

------》Hardware Temperature Monitor------》node_hwmon_temp_celsius{instance=" n o d e " , j o b = " node",job=" node",job="job"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=" n o d e " , j o b = " node",job=" node",job="job"}

------》Hardware Fan Speed------》node_hwmon_fan_rpm{instance=" n o d e " , j o b = " node",job=" node",job="job"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=" n o d e " , j o b = " node",job=" node",job="job"}

这个监控项在手动启动cpufreq收集器之后还是没有监控数据,那就是硬件不支持我使用的是vmware虚机不支持cpu频率缩放。

System Misc

------》CPU Frequency Scaling------》node_cpu_scaling_frequency_hertz{instance=" n o d e " , j o b = " node",job=" node",job="job"}

现在13个没有监控数据的表,有7个排查之后有监控数据,剩下6个没有监控数据或者是硬件或系统不达标没有监控数据也是正常的,为了grafana监控页面好看将没有监控数据的删除了。

进入导入的模版然后点击edit编辑,

找到没有监控数据的监控图表,点击右上角的三个点,选择最下面的remove就删除了。

删除完成之后点击页面右上角的save dashboard保存就好了。

报错4:grafana加载了window的21697模版部分监控图表没有正常显示

PS:grafana导入的win监控模版有问题,他预制的监控项我本地没有所以没有监控数据,在豆包之后换了各种win监控模版导入之后还是没有,不挣扎了,就看已有的了。

检查没有监控数据的表和对应的监控项获取命令:

Memory Usage------》sum by (pod) (kube_pod_container_info{} * on(container_id) group_left avg by (container_id) (windows_container_memory_usage_private_working_set_bytes{instance="KaTeX parse error: Expected 'EOF', got '}' at position 8: server"}̲)) CPU Usage------》...server"}[2m])) * 10)

system_threads------》windows_process_thread_count{instance=~"$server"}

检查window机器的监控项是都没有采集的------》http://192.168.100.1:9182/metrics

------》windows_container_memory_usage_private_working_set_bytes

------》windows_container_cpu_usage_seconds_total

------》windows_process_thread_count


豆包了下windows_exporter的0.30.0版本之后对于监控项有比较重大的更新,我这笔记本是win10操作系统,比较老,换个0.29.0的windows_exporter看下部分监控数据上来了,比0.30.3好点。

五、命令总结

1、docker compose

bash 复制代码
docker compose up -d		#启动容器------》-d后台启动
docker compose down			#停止并删除容器(数据卷保留,数据不丢失)

docker compose ls
docker compose stop			#停止服务(不删除数据)
docker compose start		#启动服务
docker compose restart		#重启服务

docker volume ls			#查看数据卷(确认数据持久化目录)

docker compose logs -f		#查看日志------》-f实时查看
docker compose logs -f prometheus	#查看promethues日志
docker compose logs -f grafana		#查看grafana日志

2、grafana监控项查看

linux_exporter------》http://192.168.100.30:9100/metrics【collector-查看已启动的监控项】

windows_exporter------》http://192.168.100.1:9182/metrics【collector-查看已启动的监控项】

3、prometheus的核心架构和工作流程

prometheus的核心组件:

prometheus server,核心组件,负责数据采集、存储、查询和告警规则评估。

exporter,数据采集代理,将非prometheus格式数据转换为标准指标并暴露。

alertmanager,处理告警,支持分组、路由、静默和通知。

pushgateway,接收短期任务的推送数据,再由server拉取(解决短期任务无法被pull的问题)。

prometheus获取监控数据的方式:

pull(默认),server主动向目标实例的metrics端点发起http请求,拉取指标数据。

push,短期任务或者是无固定IP实例,通过pushgateway将数据推送到网关,server再从网关拉去。

prometheus监控数据传输流程:

数据采集传输,exporter通过http协议暴露metrics端点,server以http GET请求拉取监控数据(默认15秒一次)。

数据存储,拉取的数据以时序数据库(TSDB)格式存储在本地磁盘,按时间分片管理。

数据查询传输,用户通过PromQL查询时,grafana或者prometheus web UI向server发起http请求,server从TSDB中读取数据返回。

告警传输,server 触发告警规则后,通过http POST将告警信息发送给Alertmanager,altermanager处理后推送通知。

相关推荐
Drqf2 小时前
NextCloud极致性能优化
docker·性能优化·nas·nextcloud
oMcLin2 小时前
如何在CentOS 7.9上配置并调优Docker Compose与Traefik,实现电商平台的自动化路由与高可用负载均衡?
docker·centos·自动化
A-刘晨阳2 小时前
【云原生】Prometheus之PromQL用法详解
运维·云原生·grafana·prometheus·监控·promql
黎陌MLing12 小时前
docker安装管理TDengine
docker·容器·tdengine
❀͜͡傀儡师13 小时前
docker部署Arcane容器可视化管理平台
运维·docker·容器
老姚---老姚13 小时前
docker常用命令
运维·docker·容器
❀͜͡傀儡师18 小时前
docker一键部署HFish蜜罐
运维·docker·容器
DO_Community18 小时前
DigitalOcean容器注册表推出多注册表支持功能
服务器·数据库·docker·kubernetes
dnpao19 小时前
linux onlyoffice服务向docker容器中添加中文字体
linux·运维·docker