Node-exporter、Prometheus、Grafana和加密技术结合的全套服务器运维监控平台解决方案

Zou, Ning 发布于 16 小时前 技术实践 1637 字 19 次阅读


情是这样的,服务器自带的宝塔面板可以在一定程度上对服务器的各项指标进行监控,但是只能监控一些基础指标,还不支持指标数据的持久化监测。如果想要获得以上这些功能,就需要付费,而且价格并不便宜。交一次的费用都够服务器一两年的开销了。秉承着互联网开源免费的精神,我相信还是有免费的解决方案的。所以我的方案是:通过加密技术实现 node-exporter+Prometheus+Grafana 的全套监控。这套平台不仅可以监控基础指标,还可以对系统内核、数据库、内存信息、硬件进行全方位监控,并将数据永久存储在 Prometheus 当中。node-exporter 对系统性能的开销非常小,同时 Prometheus 支持丰富的 exporter,而 Grafana 拥有丰富的社区和面板资源。同时,考虑到系统环境、网络安全等问题,使用 Docker 搭配多种加密技术,打造集成兼容性与安全性的完善方案。

适配系统:OpenCloudOS / Rocky Linux / CentOS
核心效果:HTTPS 加密传输 + Basic Auth 认证 + 自定义端口 59100 防扫描,本地 Prometheus 安全采集服务器数据。
使用场景:服务器、数据库运维监控。

查看系统版本

uname -a
Uname a

第一部分:远程服务器操作(全程 root 执行)

1. 创建配置目录

#删除之前创建的目录
rm -rf /opt/node-exporter
#创建SSL证书目录
mkdir -p /opt/node-exporter/ssl
cd /opt/node-exporter

2. 生成 TLS 加密证书(一路回车)

SSL是互联网通用的安全加密协议,生成TLS加密证书可以在本地Prometheus(客户端)和远程服务器node-exporter(服务器)之间构建一条加密的安全通道。在加密传输时,所有的监控数据都会变成密文,有效防止数据被抓包破解。简单来说,现在几乎所有的网站都会使用HTTPS协议,HTTPS协议的核心原理就是HTTP+TLS(SSL)技术。

  • node-exporter.key为私钥,服务器独有,绝对保密。
  • node-exporter.crt为公钥,公开的身份凭证。
TLS流程示意图
openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout ssl/node-exporter.key \
  -out ssl/node-exporter.crt \
  -days 3650 \
  -subj "/C=CN/ST=Local/L=Local/O=Local/CN=localhost"

3. 生成 Basic Auth 加密密码

加密密码是通过 bcrypt 强哈希算法加密后的字符串。相比于直接使用明文密码,该加密算法具有不可逆的特性,即使获取了加密后的密码,也绝无可能逆向还原出原始密码,安全性极高。同时,bcrypt 算法还会进行 “加盐” 操作,即便密码相同(如 123456),最终计算出的结果也完全不同,能有效防止撞库。对比如下:

维度明文密码Basic Auth 加密密码
样子123456$2y$10$xxxxxxxxx
存储位置直接写在配置文件里写在 config.yml 中(服务器专用)
能否被破解泄露 = 直接被盗用不可逆加密,泄露也无法还原原始密码
传输方式网络裸奔,抓包直接看到配合 TLS/HTTPS 加密传输,抓包全是密文
安全性极低(禁止生产使用)极高(标准安全方案)
加密算法MD5/SHA1bcrypt(加盐)
# 安装工具
yum install -y httpd-tools
# 生成账号密码(固定:账号prometheus 密码123456)
htpasswd -nbBC 10 prometheus 123456

✅ 复制输出冒号后的一长串加密密码(示例:$2y$10$xxx...

复制加密密码

4. 创建安全配置文件

cat > /opt/node-exporter/config.yml << EOF
tls_server_config:
  cert_file: /config/ssl/node-exporter.crt
  key_file: /config/ssl/node-exporter.key
basic_auth_users:
  prometheus: 粘贴你复制的加密密码
EOF

5. 修复文件权限(解决权限报错)

如果遇到node-exporter容器报错或无法连接,请检查容器日志,大多数情况下是容器的读取权限问题。

chmod 644 /opt/node-exporter/ssl/node-exporter.key
chmod 644 /opt/node-exporter/ssl/node-exporter.crt
chmod 755 /opt/node-exporter/ssl

6. 启动 Docker 容器(最终版)

#删除旧容器
docker rm -f node-exporter
#创建新的容器
docker run -d \
  --name=node-exporter \
  --net=host \
  --restart=unless-stopped \
  --pid="host" \
  -v "/opt/node-exporter:/config:ro" \
  -v "/:/host:ro,rslave" \
  quay.io/prometheus/node-exporter:latest \
  --path.rootfs=/host \
  --web.listen-address=:59100 \
  --web.config.file=/config/config.yml

关键参数解释:

1、-v "/opt/node-exporter:/config:ro"

  • 宿主机路径:/opt/node-exporter(你存放证书、配置文件的目录)
  • 容器内路径:/config
  • 权限:ro = 只读挂载,容器只能读取配置,不能修改 / 删除,更安全
  • 作用:把你的 TLS 证书、加密配置文件挂载进容器,让 node-exporter 加载加密配置

2、-v "/:/host:ro,rslave"

  • 挂载宿主机根目录 / 到容器内 /host
  • ro:只读,防止容器修改主机文件
  • rslave:挂载传播属性,保证容器能同步读取主机的文件系统变化
  • 作用:node-exporter 必须读取主机根文件系统,才能采集磁盘、系统等监控指标

3、 --path.rootfs=/host

  • 告诉 node-exporter:宿主机的根目录在容器内的 /host 路径
  • 配合上面的挂载,才能正确采集主机硬件 / 系统指标

4、--web.listen-address=:59100

  • 自定义监听端口:59100
  • 替换默认的 9100,防止被端口扫描,更安全

5、--web.config.file=/config/config.yml

  • 指定 node-exporter 加载加密配置文件
  • 路径是容器内的 /config/config.yml(对应宿主机 /opt/node-exporter/config.yml
  • 作用:启用 TLS HTTPS 加密 + Basic Auth 账号密码认证

7. 验证服务是否正常

# 带账号密码测试(出现指标=成功)
curl -k -u prometheus:[your password你的密码] https://127.0.0.1:59100/metrics
测试服务是否正常

第二部分:本地 Prometheus 配置

1. 修改 prometheus.yml 配置

scrape_configs:
  - job_name: "secure_remote_node"
    scheme: https
    tls_config:
      insecure_skip_verify: true  # 自签名证书专用
    basic_auth:
      username: prometheus
      password: "admin123456"     # 明文密码
    static_configs:
      - targets: ["你的服务器公网IP:59100"]

2. 重启 Prometheus

systemctl restart prometheus

3. 验证采集

打开 Prometheus UI:http://本地IP:9090/targets
State = UP → 加密采集成功!


总结成果

  1. 端口 59100:自定义端口,避免默认 9100 被扫描,防止爆破。
  2. HTTPS 加密:传输数据全程加密,防窃听。
  3. Basic Auth 认证:双重安全防护,防止撞库爆破。
  4. Docker 容器化部署:解决不通系统之间的内核、环境兼容性问题。

效果展示:

Grafana效果展示
欢迎来到XiaoZou123,这里是一个电脑极客、数码爱好者网站。我平时喜欢关注数码新闻,研究计算机技术。如果你看我头像觉得我是二次元,那我其实还算不上!
最后更新于 2026-03-24