Docker方式安装Prometheus+Grafana+Node Exporter

服务器信息

bash 复制代码
[root@test ~]# uname -a
Linux 160-10 5.10.0-216.0.0.115.oe2203sp4.aarch64 #1 SMP Thu Jun 27 15:22:10 CST 2024 aarch64 aarch64 aarch64 GNU/Linux
[root@test ~]# cat /etc/openEuler-release
openEuler release 22.03 (LTS-SP4)
[root@test ~]# lscpu
Architecture:           aarch64
  CPU op-mode(s):       64-bit
  Byte Order:           Little Endian
CPU(s):                 8
  On-line CPU(s) list:  0-7
Vendor ID:              HiSilicon
  BIOS Vendor ID:       HiSilicon
  Model name:           Kunpeng-920
    BIOS Model name:    HUAWEI Kunpeng 920 5220
    Model:              0
    Thread(s) per core: 1
    Core(s) per socket: 1
    Socket(s):          8
    Stepping:           0x1
    Frequency boost:    disabled
    CPU max MHz:        2600.0000
    CPU min MHz:        2600.0000
    BogoMIPS:           200.00
    Flags:              fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm ssbs
Caches (sum of all):
  L1d:                  512 KiB (8 instances)
  L1i:                  512 KiB (8 instances)
  L2:                   4 MiB (8 instances)
  L3:                   256 MiB (8 instances)
NUMA:
  NUMA node(s):         1
  NUMA node0 CPU(s):    0-7
Vulnerabilities:
  Gather data sampling: Not affected
  Itlb multihit:        Not affected
  L1tf:                 Not affected
  Mds:                  Not affected
  Meltdown:             Not affected
  Mmio stale data:      Not affected
  Retbleed:             Not affected
  Spec rstack overflow: Not affected
  Spec store bypass:    Mitigation; Speculative Store Bypass disabled via prctl
  Spectre v1:           Mitigation; __user pointer sanitization
  Spectre v2:           Not affected
  Srbds:                Not affected
  Tsx async abort:      Not affected

版本选择

这里选择​​Prometheus 2.45.x + Grafana 10.2.x + Node Exporter 1.6.x + Alertmanager 0.26.x​​
架构兼容性是首要条件 ​​:您必须选择基于 ​​ARM64​​(也称为 ​​AARCH64​​)架构的安装包。直接从GitHub官方仓库的Release页面下载时,请认准 linux-arm64标识的压缩包

。错误的架构选择会导致程序无法运行。
​​操作系统的适应性 ​​:推荐的版本组合在诸如CentOS、openEuler等基于鲲鹏平台的操作系统上经过测试

。只要您的服务器操作系统是主流的Linux发行版,通常不会有兼容性问题。
​​版本的稳定性与功能性 ​​:在满足兼容性的前提下,建议选择列表中较新的版本(如Prometheus 2.45.x、Node Exporter 1.6.x),因为它们通常包含更多的功能改进和安全补丁

拉取镜像

bash 复制代码
docker pull prom/node-exporter:v1.6.1
docker pull prom/prometheus:v2.45.6
docker pull prom/alertmanager:v0.26.0
docker pull grafana/grafana:10.2.9

安装Prometheus

bash 复制代码
# 创建本地配置文件目录
mkdir -p /data/docker/prometheus/
# 使用本地网络可,否则需要解决镜像中访问宿主机所在网络的
docker run --name prometheus -d --network=host --restart=always -v /data/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:v2.45.6

prometheus.yml配置文件内容如下

bash 复制代码
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "node_exporter"
    static_configs:
      - targets: ["192.168.31.1:9100"]
      - targets: ["192.168.31.2:9100"]
      - targets: ["192.168.31.3:9100"]
      - targets: ["192.168.31.4:9100"]

定向开放访问端口

bash 复制代码
firewall-cmd --permanent --add-rich-rule "rule family="ipv4" source address="192.168.31.135" port port="9090" protocol="tcp" accept" && firewall-cmd --reload

安装node-exporter

在192.168.31.1-192.168.31.4安装node-exporter

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" \
  prom/node-exporter:v1.6.1 --path.procfs=/host/proc --path.sysfs=/host/sys --path.rootfs=/rootfs

命令解释

bash 复制代码
docker run -d \               # 以后台(detached)模式运行容器
  --name node-exporter \      # 将容器命名为 "node-exporter"(便于管理)
  --restart=always \          # 设置容器总是自动重启(即使手动停止或系统重启)
  -p 9100:9100 \              # 将容器的 9100 端口映射到宿主机的 9100 端口
  -v "/proc:/host/proc:ro" \  # 将宿主机的 /proc 目录挂载到容器内的 /host/proc(只读)
  -v "/sys:/host/sys:ro" \    # 将宿主机的 /sys 目录挂载到容器内的 /host/sys(只读)
  -v "/:/rootfs:ro" \         # 将宿主机的根目录 / 挂载到容器内的 /rootfs(只读)
  prom/node-exporter:v1.6.1 \ # 使用的镜像名称和版本
  --path.procfs=/host/proc \  # 告诉 Node Exporter 使用容器内的 /host/proc 作为 procfs 路径
  --path.sysfs=/host/sys \    # 告诉 Node Exporter 使用容器内的 /host/sys 作为 sysfs 路径
  --path.rootfs=/rootfs       # 告诉 Node Exporter 使用容器内的 /rootfs 作为根文件系统路径

关键参数说明

bash 复制代码
-v "/proc:/host/proc:ro"​​
​​作用​​:将宿主机的 /proc(虚拟文件系统,包含进程和内核信息)挂载到容器内的 /host/proc。
​​:ro​​:挂载为只读(Read-Only),防止容器意外修改主机关键数据。
​​必要性​​:Node Exporter 需要读取 /proc中的文件(如 /proc/meminfo, /proc/stat)来获取 CPU、内存、进程等指标。
​​-v "/sys:/host/sys:ro"​​
​​作用​​:将宿主机的 /sys(虚拟文件系统,包含硬件和设备信息)挂载到容器内的 /host/sys。
​​必要性​​:Node Exporter 需要读取 /sys中的文件(如磁盘 I/O、网络统计)来收集硬件相关指标。
​​-v "/:/rootfs:ro"​​
​​作用​​:将宿主机的根目录 /挂载到容器内的 /rootfs。
​​必要性​​:用于收集文件系统使用率(如 df命令的数据)。Node Exporter 需要访问 /etc/mtab或 /proc/mounts来识别挂载点。
​​--path.procfs=/host/proc​​
​​作用​​:指示 Node Exporter 使用容器内的 /host/proc(即宿主机的 /proc)作为 procfs路径。
​​--path.sysfs=/host/sys​​
​​作用​​:指示 Node Exporter 使用容器内的 /host/sys(即宿主机的 /sys)作为 sysfs路径。
​​--path.rootfs=/rootfs​​
​​作用​​:指示 Node Exporter 将容器内的 /rootfs(即宿主机的 /)视为根文件系统,确保文件系统指标正确关联到宿主机。

定向放开端口,192.168.31.1安装Prometheus

bash 复制代码
firewall-cmd --permanent --add-rich-rule "rule family="ipv4" source address="192.168.31.1" port port="9100" protocol="tcp" accept" && firewall-cmd --reload

安装grafana

bash 复制代码
docker run -d --name=grafana --network=host grafana/grafana:10.2.9

放开访问权限

bash 复制代码
firewall-cmd --permanent --add-rich-rule "rule family="ipv4" source address="192.168.31.135" port port="3000" protocol="tcp" accept" && firewall-cmd --reload

Prometheus配置非根目录访问

配置非根目录/prom访问

bash 复制代码
docker run --name prometheus -d --network=host --restart=always \
-v /data/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:v2.45.6 \
  --web.external-url=/prom --web.listen-address=:9099 --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle

Grafana配置非根目录访问

配置非根目录/grafana访问,需要结合Nginx一起使用

bash 复制代码
# nginx中的配置
location /grafana/ {
    proxy_pass http://grafana:3000/;  # 注意结尾斜杠
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  
    # 重写路径关键配置
    rewrite ^/grafana/(.*)$ /$1 break;
}

docker run -d --name=grafana --network=host -e GF_SERVER_ROOT_URL=/grafana/ grafana/grafana:10.2.9
相关推荐
码界奇点9 小时前
通往Docker之路从单机到容器编排的架构演进全景
docker·容器·架构
阿Y加油吧9 小时前
Docker从入门到实战——含容器部署、docker基础、项目部署
运维·docker·容器
victory043110 小时前
progen2 docker镜像打包命令文档
运维·docker·容器
tornadoami11 小时前
51CTO_开源的密码自助平台Self Service Password
docker·开源·ad·安全可控·ssp·ldap·ltb
算是难了12 小时前
Docker基础总结
运维·docker·容器
ityangs12 小时前
GitLab 私服(基于 Docker)搭建方案
git·docker·容器·gitlab
段孝先13 小时前
如何使用github上的etcd构建docker镜像
docker
三无少女指南14 小时前
在 Ubuntu 上使用 Docker 部署思源笔记:一份详尽的实践教程以及常见错误汇总
笔记·ubuntu·docker
带刺的坐椅14 小时前
Solon (可替换 SpringBoot)集成 Docker 实战:30分钟搞定轻量级应用容器化部署
java·docker·jar·springboot·solon