服务器信息
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