Prometheus 多主机监控方案:架构设计与 Node Exporter 配置实践
在运维监控体系中Prometheus 因其强大的指标采集能力和灵活的查询语言已成为事实上的行业标准。但如何在一台 Prometheus 实例下监控多台 Linux 服务器是许多初学者面临的首要问题。从技术架构角度来看跨主机监控的核心组件包括*Node Exporter*: 负责采集主机系统指标并暴露为 HTTP 接口*Prometheus Server*: 负责拉取和存储指标数据*Grafana*: 负责数据可视化展示*架构优势分析*这种架构设计有几个显著特点*解耦设计*: 采集器与服务端分离便于独立扩展*主动抓取*: Prometheus 主动从目标拉取数据无需 Agent 主动推送*静态配置*: 初期使用静态目标列表后期可接入动态发现*指标标准化*: Node Exporter 提供了一套统一的指标命名规范*技术实现细节*Node Exporter 的工作原理是通过 HTTP 服务器暴露/metrics接口Prometheus 通过定期 scrape默认 15 秒获取数据。采集的指标涵盖*CPU*: 使用率、负载、中断等*Memory*: 使用量、缓存、交换分区*Disk*: 读写 IO、空间使用、inode*Network*: 流量、错误、丢包*System*: 进程数、用户数、运行时间*部署注意事项**端口规划*: 默认 9100多台机器避免冲突*防火墙配置*: 确保 Prometheus 服务器可访问 9100 端口*资源限制*: Node Exporter 资源占用极低一般 10-50MB 内存*版本兼容*: 建议 Prometheus 与 Node Exporter 版本保持较新*适用场景评估*该方案适用于以下场景中小规模服务器集群1-50 台混合云环境传统物理机部署容器化环境需配合其他 Exporter1.Centos7安装node_exporter实现监控部署安装前提两台虚拟机一台监控另一台数据监控主机ip192.168.42.140被监控主机ip192.168.42.145监控主机需要安装prometheusalertmanager被监控主机需要安装node_exporter安装prometheus和alertmanager可以去cpolar官网参考这个两篇教程《监控不再局域网Cpolar 让 Prometheus 走出内网限制》《告别宕机零基础搭建服务器监控告警系统小白也能学会》被监控主机使用命令安装node_exportercurl-LOhttps://github.com/prometheus/node_exporter/releases/download/v1.2.0/node_exporter-1.2.0.linux-amd64.tar.gz下载完后解压tarxvfz node_exporter-1.2.0.linux-amd64.tar.gz将名为 node_exporter-1.2.0.linux-amd64 的目录移动到 /opt 目录下并重命名为 node_exportermvnode_exporter-1.2.0.linux-amd64 /opt/node_exporter使用 vi 编辑器创建或修改一个 systemd 服务配置文件以便将 node_exporter 注册为一个系统服务实现开机自启、状态管理如 start/stop/status等功能sudovi/etc/systemd/system/node_exporter.service将 node_exporter 注册为一个 Linux 系统服务以专用用户身份运行确保在网络就绪后自动启动并支持通过 systemctl 命令进行管理:[Unit]DescriptionNode ExporterDocumentationhttps://github.com/prometheus/node_exporterAfternetwork.target[Service]Usernode_exporterGroupnode_exporterTypesimpleExecStart/opt/node_exporter/node_exporter[Install]WantedBydefault.target创建一个名为 node_exporter 的系统用户不创建家目录、不允许登录专用于运行 node_exporter 服务:useradd--no-create-home--shell/bin/false node_exporter通知 systemd 重新加载所有服务配置文件:systemctl daemon-reload systemctlenablenode_exporter启动后ip9100即可启动node_exporter:2.Prometheus配置node_exporter进入prometheus的安装目录编辑prometheus.ymlviprometheus.yml加入被监控主机ip端口如下注意格式不然无法启动成功- targets:[192.168.42.145:9100]labels: app:node_exporter重启Prometheussystemctl restart prometheusprometheus 成功抓取了node_exporter指标数据测试了一下若是未启动端口是无法成功抓取的接下来我们利用内网穿透工具cpolar将 node_exporter 的 9100 端口安全暴露至公网实现远程可视化监控。3.配置alertmanager监控主机的数据配置alertmanager告警进入prometheus的安装目录编辑prometheus.ymlviprometheus.yml如图填写编辑3.yml添加下面信息监控192.168.42.145的内存和CPU使用率超过10%就告警groups: - name: node-alerts rules:# CPU 使用率 10% 持续10s- alert: 高CPU使用率 expr:100-(avg by(instance, job)(rate(node_cpu_seconds_total{modeidle}[5m]))*100)10for: 10s labels: severity: warning annotations: summary:高CPU使用 {{$labels.instance }}description:CPU大于10% (current value: {{$value}}%) 超过10s# 内存使用率 10%- alert: 内存使用率 expr:(1-(node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))*10010for: 10s labels: severity: warning annotations: summary:内存使用率过高 {{$labels.instance }}description:内存使用率大于10% (current value: {{$value}}%) 超过10s重启Prometheussystemctl restart prometheus登到prometheus网页后可以看到我们的告警添加成功啦告警数据也成功显示啦这样我们成功利用node_exporter监控到了另一台主机的数据4.安装cpolar随时随地开发被监控主机安装cpolar 可以将你本地电脑中的服务如 SSH、Web、数据库映射到公网。即使你在家里或外出时也可以通过公网地址连接回本地运行的开发环境。❤️以下是安装cpolar步骤使用一键脚本安装命令sudocurlhttps://get.cpolar.sh|sh安装完成后执行下方命令查看cpolar服务状态如图所示即为正常启动sudosystemctl status cpolarCpolar安装和成功启动服务后在浏览器上输入虚拟机主机IP加9200端口即:【http://192.168.42.145:9200】访问Cpolar管理界面使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可打开浏览器访问本地9200端口使用cpolar账户密码登录即可,登录后即可对隧道进行管理。5.配置公网地址登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道隧道名称可自定义本例使用了:node_exporter注意不要与已有的隧道名称重复协议http本地地址9100域名类型随机域名地区选择China TOP创建成功后打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址接下来就可以在其他电脑或者移动端设备异地上使用地址访问。访问成功。6.将node_exporter暴露给Prometheus进行远程抓取返回到监控主机编辑prometheus配置文件viprometheus.ymlPrometheus可以通过1a0f75b.r2.cpolar.top这个公网地址访问到运行在192.168.42.1459100的node_exporter服务从而抓取系统指标。- targets:[1a0f75b.r2.cpolar.top]labels: app:node_exporter重启Prometheussystemctl restart prometheus登到prometheus网页后可以看到我们的抓取成功7.保留固定公网地址使用cpolar为其配置二级子域名该地址为固定地址不会随机变化。点击左侧的预留选择保留二级子域名地区选择china Vip然后设置一个二级子域名名称我这里演示使用的是nodee大家可以自定义。填写备注信息点击保留。登录cpolar web UI管理界面点击左侧仪表盘的隧道管理——隧道列表找到所要配置的隧道node_exporter点击右侧的编辑。修改隧道信息将保留成功的二级子域名配置到隧道中域名类型选择二级子域名Sub Domain填写保留成功的二级子域名地区: China TOP点击更新更新完成后打开在线隧道列表此时可以看到随机的公网地址已经发生变化地址名称也变成了保留和固定的二级子域名名称。最后我们使用固定的公网地址在任意设备的浏览器中访问可以看到成功访问本地部署的node_exporter页面这样一个永久不会变化的二级子域名公网网址即设置好了。至此我们完成了远程服务器监控搭建。结尾基于 Node Exporter 的 Prometheus 跨主机监控方案是业界成熟且广泛采用的实践。其优势在于架构简单、维护成本低、社区支持完善。*优化建议**监控指标筛选*: 根据业务需求配置抓取指标减少存储压力*告警规则优化*: 避免告警风暴设置合理的阈值和冷却时间*数据保留策略*: 根据需求配置长期/短期数据保留期限*高可用部署*: 生产环境建议部署高可用 Prometheus 集群*扩展方向*如需监控更细粒度指标可考虑MySQL Exporter: 数据库监控Redis Exporter: 缓存监控Blackbox Exporter: 网络可用性监控*适用人群*本方案特别适合初级运维工程师学习监控体系中小型企业自建监控平台个人开发者搭建实验环境如果你正在搭建 Prometheus 监控体系Node Exporter 是不可或缺的基础组件。