ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Prometheus监控实践:node_exporter配置详解与主机指标采集指南

Prometheus监控实践:node_exporter配置详解与主机指标采集指南 凌晨三点被电话吵醒数据库服务器磁盘满了日志把分区撑爆业务直接停摆。这种经历干运维的多少都遇到过事后复盘往往发现不是没有监控工具而是监控平台本身没搭起来或者搭了但没把主机层面最基础的指标采全。Prometheus是开源监控系统里绕不开的存在而node_exporter就是它采集Linux服务器操作系统指标的标准组件——CPU、内存、磁盘、网络、文件系统、系统负载全都能通过这个单一的exporter暴露成Prometheus能够抓取的metrics数据。这篇文章就围绕“配置node_exporter”这件事从零讲透。不是简单说下载个二进制文件跑起来就完事而是把为什么需要它、指标从哪来、采集链路怎么串、抓取规则怎么写、告警怎么配、踩过的坑有哪些一整套完整的操作路径都过一遍。适合刚接触Prometheus的运维新手也适合已经在用Prometheus但对node_exporter只停留在“能跑就行”阶段的人参考。1. 监控方案选型与整体设计思路1.1 为什么是Prometheus和node_exporter组合先回答一个很多人会问的问题操作系统层面的监控指标为什么非要用node_exporter去采而不是直接用zabbix-agent、telegraf或者干脆自己写脚本收集因为Prometheus的拉取模型和node_exporter的单一职责设计天然适合这种场景。Prometheus采用主动拉取Pull的方式来获取监控数据由服务端定期访问每个节点暴露的HTTP接口来抓取指标。这种模型下被监控节点不需要把数据推送到中心端只需要在本机暴露一个标准的metrics接口Prometheus按配置好的时间间隔来取。好处很明显采集是否正常、接口是否挂了服务端一眼就能看出来某一个节点的故障也不会导致数据堆积在本地。node_exporter在整个链路里扮演的角色是“采集适配器”——它把操作系统里分散在/proc、/sys等虚拟文件系统中的内核统计信息翻译成Prometheus能理解的metrics格式。所以即使你对内核参数、procfs不熟只要部署了node_exporter它就已经帮你把几百个主机层面的指标按统一格式暴露出来了。这也是它绝大多数场景下都是Prometheus监控节点主机的首选组件的原因。1.2 整体架构与数据链路一套基于Prometheus的主机监控体系最简化的架构是这样每个目标主机上部署node_exporter监听9100端口持续暴露本机的metrics数据。Prometheus服务端通过配置的scrape_configs定期比如每15秒去拉取各台机器的指标存入自带的TSDB时序数据库。用户通过PromQL查询指标或者通过Grafana连接Prometheus数据源展示仪表盘。告警由Prometheus内置的告警规则负责判断触发后发给Alertmanager再路由到钉钉、邮件、企微等通知渠道。这套架构的好处是部署链路短、问题定位清晰每一层出问题都单独排查就行。node_exporter只是其中一环但它一旦没配置好或者指标缺失上面所有的展示和告警都会失真。所以把这一层配置扎实是搭好整个监控平台的地基。1.3 我为什么没有一上来用Grafana Agent那套采集方案现在监控生态里已经有很多all-in-one的采集器比如Grafana Agent、OpenTelemetry Collector也能采集主机指标。但node_exporter依然适合作为主机监控的标准方案原因有两点第一纯go二进制零依赖放上去就能跑。没有JVM、没有Python环境依赖、不需要装一堆共享库对于服务器环境非常友好。你拿一个静态编译的二进制传到服务器上配一个systemd服务就可以运行。第二生态兼容性最好。node_exporter暴露的指标命名和标签格式是标准化的Grafana上有大量现成的dashboard可以直接对接PromQL查询语句和告警规则都有成熟的参考模板。如果后续想把主机指标通过remote_write转发给其他时序存储也几乎没有额外的适配成本。所以除非你已经全面拥抱了OpenTelemetry生态并且各类采集器统一管理得足够成熟否则在主机监控这一层node_exporter依然是最稳妥的选择。2. node_exporter核心指标与工作原理2.1 它到底从哪儿收集数据表面上node_exporter是个HTTP服务暴露一堆metrics出来。但它的数据来源值得搞清楚因为这影响你后续排查指标异常时从哪下手。node_exporter的采集器collector默认会读取系统虚拟文件系统里的信息主要是/proc和/sys。这两者不是磁盘上的真实文件而是内核运行时暴露出来的接口相当于内核统计数据的一扇窗户。比如/proc/stat里记录着CPU使用率、中断、上下文切换的累计值。/proc/meminfo里记录着内存总容量、已用、空闲、缓存、Swap等明细。/proc/diskstats里记录着每个块设备的读写次数、字节数、I/O时间。/proc/net/dev里记录着每张网卡的收发字节数、包数、丢包、错误数。/sys/class/net、/sys/class/power_supply等提供网络和电源相关的设备信息。node_exporter做的事情简单来说就是定时去读这些文件把里面的数值解析出来然后按Prometheus的文本格式规范暴露成metrics。所以你在node_exporter的采集结果里会看到大量类似node_cpu_seconds_total、node_memory_MemTotal_bytes这样带很长名字的指标。2.2 常用的指标家族及对应场景node_exporter默认会开启很多采集器不过生产环境里我经常使用的主要是下面这几类CPU相关node_cpu_seconds_total是一个带mode标签的计数器mode有user、system、idle、iowait等取值。查询CPU使用率时本质上就是对这个计数器做rate计算再用1减掉idle占比。很多新手直接看node_cpu_seconds_total这个指标看半天不知道要算rate这是很典型的困惑点。内存相关node_memory_MemTotal_bytes和node_memory_MemAvailable_bytes是判断内存是否充足最重要的两个指标。有个容易忽略的点Linux的Free命令显示的available那一列才是真正可分配的内存而不是free那一列。因为页面缓存可以回收系统实际可用内存要比free多。PromQL里用MemAvailable_bytes减去当前使用不会因为缓存导致误报内存不足。磁盘相关node_filesystem_avail_bytes和node_filesystem_size_bytes按挂载点维度统计文件系统使用情况需要注意排除tmpfs、overlay这类虚拟文件系统否则很多临时挂载点都会带入告警。块设备层面的统计在node_disk_read_bytes_total和node_disk_writes_total里配合rate可以观察IO吞吐。网络相关node_network_receive_bytes_total是按网卡维度统计累计收发字节数的计数器eth0、ens33这样的网卡名会作为标签出现。做带宽监控时排除掉lo回环网卡是基本操作。系统级指标node_load1、node_load5、node_load15对应系统的1分钟、5分钟、15分钟平均负载。node_boot_time_seconds记录了系统启动时间戳结合time()函数可以算系统运行时长。2.3 计数器、仪表盘和直方图三类指标类型怎么理解Prometheus的指标类型对用好node_exporter非常关键。虽然node_exporter暴露的接口里你能看到很多值但这些值背后的语义不同直接决定了你用什么样的PromQL函数去处理它。计数器Counter是只增不减的累计值比如node_cpu_seconds_total、node_network_receive_bytes_total。这种指标本身没有太大意义必须通过rate()或increase()函数计算它在一段时间内的变化速率或者增量才能反映真实的CPU使用率或网络流量。你要是直接查一个Counter的裸值只能看到累计数字一直涨得不出有意义的结论。仪表盘Gauge是当前值可以升也可以降比如node_memory_MemAvailable_bytes、node_load1、node_filesystem_avail_bytes。这类指标直接查询或者做比较运算就行不需要rate处理。直方图Histogram在node_exporter里最典型的是node_scrape_collector_duration_seconds这类用于衡量采集器耗时的指标正常使用中不太需要过多关注。理解这三者的区别能避免很多对监控数值的错误解读。2.4 指标命名规则与单位换算node_exporter的指标命名遵循Prometheus规范基础单位会体现在指标名里比如_bytes代表字节_seconds代表秒_total代表累计计数。这个设计非常实用但也导致了一个常见困惑node_memory_MemTotal_bytes的值是以字节为单位在Grafana面板里如果不做单位换算显示出来的数字会是个巨大无比的天文数字根本没法看。正确处理方式是在Grafana面板里设置单位或者用除法换算成GB。比如查询内存总量时可以用node_memory_MemTotal_bytes / 1024 / 1024 / 1024得到以GB为单位的值。初期配置的时候多留意这一点能省掉不少排障时间。3. 实操配置node_exporter完整流程3.1 版本选择与二进制下载下载node_exporter可以从Prometheus官网的download页面获取也可以到GitHub的prometheus/node_exporter仓库的releases页面去拿。我个人的习惯是到GitHub releases页面下载具体版本因为可以选特定版本号保证跟我维护的批量环境版本一致。选择版本的时候注意一下平台架构x86_64的服务器选linux-amd64ARM架构的服务器选linux-arm64。下载后用tar命令解压里面就一个node_exporter二进制文件和一个LICENSE文件没有多余的东西。以当前常用版本为例实际版本号以你下载时的最新release为准wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz tar xvf node_exporter-1.8.2.linux-amd64.tar.gz sudo cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/ node_exporter --version3.2 创建专用用户与目录node_exporter虽然可以用root直接跑但出于安全考虑生产环境强烈建议创建一个专用的系统用户来运行它。原因是node_exporter只需要读取系统虚拟文件系统的权限完全不需要root权限。sudo useradd --no-create-home --shell /bin/false node_exporter这个命令创建了一个不能登录、没有home目录的普通用户。后续用systemd配置以这个用户身份启动node_exporter即使服务被入侵权限也被限制在一个很低的水平。3.3 编写systemd服务文件这是整个配置过程中最关键的一步。用systemd管理node_exporter等于让操作系统自己保证“服务挂了自动拉起开机自动启动”。配置如下sudo vi /etc/systemd/system/node_exporter.service内容为[Unit] DescriptionPrometheus Node Exporter Wantsnetwork-online.target Afternetwork-online.target [Service] Usernode_exporter Groupnode_exporter Typesimple Restartalways RestartSec5 ExecStart/usr/local/bin/node_exporter \ --web.listen-address:9100 \ --web.telemetry-path/metrics \ --collector.systemd \ --collector.filesystem.mount-points-exclude^/(dev|proc|sys|run|var/lib/docker/containers)/ \ --collector.filesystem.fs-types-exclude^(tmpfs|overlay|autofs|squashfs|iso9660|ramfs)$ [Install] WantedBymulti-user.target这里有几个参数值得展开说一下。--web.listen-address指定了node_exporter监听的地址和端口。默认是:9100也就是在所有网络接口上监听。如果只想让内网或特定网段访问可以改成类似192.168.1.10:9100的形式这样服务只监听指定IP的9100端口外部无法直接访问。--collector.systemd是额外开启systemd采集器。node_exporter默认并不采集systemd的服务状态和系统单元信息如果需要监控某台机器上哪些systemd服务还活着需要显式开启这个采集器。这个不是默认开启项需要注意。--collector.filesystem.mount-points-exclude和--collector.filesystem.fs-types-exclude这两个参数是很多人会踩坑的地方。如果没有排除项node_exporter会把docker容器的overlay文件系统、/dev下的设备挂载点、还有系统中的tmpfs都当成普通文件系统来汇报磁盘监控面板上一大堆虚拟文件系统告警也没法配。提前用正则把这些排除掉指标会干净很多。配置完让systemd重新加载并设置开机自启sudo systemctl daemon-reload sudo systemctl enable --now node_exporter sudo systemctl status node_exporter看到状态是active (running)就说明服务正常启动了。3.4 验证采集接口服务起来之后验证一下metrics接口是否正常工作。先在本机用curl拉一下curl http://127.0.0.1:9100/metrics | head -50正常情况会看到一大片以# HELP和# TYPE开头、后面跟着具体指标的文本。这就是Prometheus抓取的原始数据格式。再确认一下进程监听状态ss -lntp | grep 9100如果监听地址是:9100说明所有网卡接口都在监听可以继续往下走。如果修改了监听地址要注意Prometheus服务端配置的target地址必须能访问到这个地址。3.5 使用textfile collector收集自定义指标node_exporter内置了一个非常实用的辅助特性textfile收集器。原理是node_exporter会扫描指定目录下的.prom文件把这些文件里已有的指标一并暴露出去。如果你的cron脚本里需要写入一些Prometheus无法直接抓取的自定义指标比如某个业务进程的存活状态、定时任务执行结果可以把这些指标按Prometheus文本格式写入.prom文件由node_exporter统一暴露。配置方法是在ExecStart参数里加上textfile目录--collector.textfile.directory/var/lib/node_exporter/textfile创建目录并保证node_exporter用户有写权限sudo mkdir -p /var/lib/node_exporter/textfile sudo chown -R node_exporter:node_exporter /var/lib/node_exporter/textfile之后可以写一个简单的脚本生成自定义指标文件。比如#!/bin/bash echo my_custom_job_last_success 1699999999 /var/lib/node_exporter/textfile/custom.promPrometheus抓取这个节点时就能看到my_custom_job_last_success这个指标。这种做法定制性很强而且node_exporter本身不做数据存储只是暴露数据所以文件里永远只需要保存最新值完全不用担心持久化问题。3.6 Docker方式部署作为备选如果是容器化环境用Docker跑node_exporter也很常见。但有一个关键点容器里的node_exporter默认读到的是容器的/proc和/sys不是宿主机的这会导致采集到的主机指标完全错误。所以必须把宿主机的目录挂载到容器里并且通过--path.rootfs参数指定根目录。docker run -d \ --name node_exporter \ --restartalways \ --nethost \ --pidhost \ -v /:/host:ro,rslave \ quay.io/prometheus/node-exporter:latest \ --path.rootfs/host这段配置里-v /:/host:ro,rslave把宿主机整个根目录只读挂载进容器--path.rootfs/host告诉node_exporter去访问/host/proc、/host/sys这些路径。使用--nethost是为了让node_exporter直接使用宿主机的网络栈监听9100端口时和直接在宿主机上运行效果一样。没有这些参数容器化部署的node_exporter数据基本都是错的。4. 接入Prometheus服务端并验证采集链路4.1 Prometheus服务端scrape配置node_exporter部署完成后下一步是在Prometheus主配置文件prometheus.yml里加上抓取配置。这里是一个经典的主机监控抓取配置段scrape_configs: - job_name: linux-host scrape_interval: 15s static_configs: - targets: - 192.168.1.101:9100 - 192.168.1.102:9100 - 192.168.1.103:9100 labels: env: production role: web-serverjob_name可以理解为一组同类型监控对象的逻辑分组。这里把三台机器归到linux-host这个job下给它们打了env和role两个额外标签。标签的价值在于后续查询和告警时能按环境、角色过滤指标比如只想看生产环境web服务器的CPU直接在PromQL里加标签筛选就行。改完配置后对Prometheus做配置校验和热加载./promtool check config prometheus.yml curl -X POST http://127.0.0.1:9090/-/reloadPrometheus支持配置热加载不需要重启服务。4.2 确认Targets状态配置生效以后打开Prometheus的Web界面进入Status - Targets页面能看到刚才配置的job和targets列表。正常的标状态显示为UP绿色的如果显示DOWN说明Prometheus拉取不到node_exporter的接口需要排查网络、端口、防火墙这几个因素。也可以直接用命令行验证Prometheus内部对抓取是否成功curl http://127.0.0.1:9090/api/v1/targets | jq .查看每个target的health字段。4.3 用PromQL验证核心指标Targets显示UP只是第一步指标数据是否合理同样重要。可以到Prometheus的Graph页面执行几条验证查询查看CPU使用率100 - (avg by (instance) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100)查看内存可用量node_memory_MemAvailable_bytes / 1024 / 1024 / 1024查看磁盘根分区使用率(1 - node_filesystem_avail_bytes{mountpoint/} / node_filesystem_size_bytes{mountpoint/}) * 100如果查询结果有数据并且数值合理说明从node_exporter到Prometheus这条采集链路已经完全打通了。4.4 抓取时间间隔与客户端采集耗时的权衡scrape_interval的默认值通常是15秒。实际生产环境中如果机器数量不多、node_exporter的采集器没有额外开启太多15秒完全够用。如果你需要更高精度或者同时采集大量节点可以把抓取间隔调短到10秒甚至5秒但这会增加Prometheus的存储和计算压力。node_exporter还会暴露一个特别实用的指标node_scrape_collector_duration_seconds和node_scrape_collector_success。它们分别记录每个采集器的耗时与成功状态。如果某些采集器耗时异常或者成功状态为0排查问题的时候非常有帮助。比如开启filefd、systemd、conntrack这类额外采集器后如果系统文件描述符数量特别庞大采集耗时可能拉长到几百毫秒这种情况下超过Prometheus设置的单次抓取超时时间就会导致抓取失败。5. 进阶配置Grafana展示与告警规则5.1 Grafana接入Prometheus数据源Prometheus自带的图表功能主要用于临时查询不适合做美观的长期监控大屏。可视化这块交给Grafana是主流做法。在Grafana的Configuration - Data Sources里添加一个Prometheus类型的数据源URL填Prometheus服务端的访问地址比如http://192.168.1.10:9090点击Save Test确认连接成功即可。数据源接入后可以直接通过导入dashboard ID的方式获取现成的主机监控面板。node_exporter最经典的面板是ID 1860这个面板叫Node Exporter Full视图非常全面涵盖CPU、内存、磁盘IO、网络流量、系统负载、进程数等各类指标。导入后如果面板出现空白或者数据显示为NaN大概率是node_exporter的版本差异导致指标名不一致特别是老版本面板依赖的一些指标在新版里改了名。这种时候可以微调面板的查询语句把指标名改成新版规范的。5.2 告警规则配置思路Prometheus的告警不依赖商业方案配置方式非常直接。在prometheus.yml里通过rule_files引入告警规则文件rule_files: - /etc/prometheus/alerts/node_exporter_alerts.yml告警规则文件的内容大概是groups: - name: node_exporter_alerts rules: - alert: HostDown expr: up{joblinux-host} 0 for: 1m labels: severity: critical annotations: summary: 主机 {{ $labels.instance }} 已宕机 - alert: DiskRootUsageHigh expr: (1 - node_filesystem_avail_bytes{mountpoint/} / node_filesystem_size_bytes{mountpoint/}) * 100 85 for: 5m labels: severity: warning annotations: summary: 主机 {{ $labels.instance }} 根分区使用率超过85%编写告警规则的几个要点第一expr是触发条件的PromQL表达式它返回多组结果就代表多个告警实例。比如DiskRootUsageHigh表达式如果同时匹配多台机器的根分区Prometheus会为每一台机器都生成一条独立的告警。第二for字段表示这个条件需要持续满足多长时间才触发告警。这是防止抖动误报的核心机制。比如内存使用率瞬间冲到90%可能只是某个进程的临时占用持续5分钟都在90%以上才值得告警。我不建议把for设成0那样稍有波动就会轰炸。第三CPU使用率类告警表达式里务必带上instance标签的聚合维度。如果你不加by (instance)表达式汇总出来的结果是所有机器CPU使用率的平均值单台超标的机器会被稀释掉导致该告警的机器反而不告警。一个比较稳妥的CPU告警表达式模板100 - (avg by (instance) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100) 905.3 Alertmanager路由与通知告警规则触发后产生的是告警状态真正把消息发到钉钉或者企业微信群还需要Alertmanager这个组件配合。Alertmanager负责对告警做去重、分组、抑制和静默最后通过webhook推送给消息网关。如果你不想马上搭Alertmanager也可以先在不配置alertmanager的情况下直接在Prometheus的Alerts页面看到rule状态变化。但对生产环境来说告警不通知等于没告警所以Alertmanager这一步还是建议在基础监控搭好之后尽快补上。6. 常见问题与排查路径速查6.1 端口19000已占用、服务启动失败node_exporter默认监听9100端口。如果9100被其他进程占用服务就会启动失败。可以先确认占用情况ss -lntp | grep 9100 lsof -i :9100如果确实被占用要么换一个端口比如9101要么处理掉占用进程。注意如果修改了端口Prometheus抓取配置里的target端口也得同步修改。6.2 Targets显示DOWN、但端口明明是通的端口通但targets显示DOWN最常见的两个原因一是Prometheus所在服务器访问不到node_exporter的地址可能是网络策略或防火墙拦截二是抓取超时node_exporter因为某种原因采集耗时过长超过Prometheus默认的10秒超时限制导致抓取失败。排查思路按顺序走在Prometheus服务器上执行curl http://目标IP:9100/metrics看能不能返回数据。查看node_exporter的进程日志systemd方式可以用journalctl -u node_exporter -f查看。查看Prometheus日志确认是否报告context deadline exceeded或connection refused。检查是否在配置里写了http://前缀Prometheus的targets配置不需要写协议直接写IP:端口即可写了http://反而会导致解析失败。6.3 CPU使用率指标数值明显不对最常见的问题是直接把node_cpu_seconds_total的值当成CPU使用率看到数字好几百完全不是百分比。这个指标是Counter类型必须用rate函数做速率计算才能得到每秒增长的秒数即利用率比例。用下面的表达式得到的才是正确的百分比100 - (avg by (instance) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100)注意rate里的时间范围5m要和面板刷新频率匹配。如果面板刷新频率是每分钟刷新一次时间范围太小比如30秒算出来的速率波动会很剧烈不平稳。6.4 磁盘监控里出现大量tmpfs和overlay文件系统这是node_exporter默认开启所有文件系统采集器导致的。解决方式在前面配置里已经提到通过--collector.filesystem.fs-types-exclude排除tmpfs、overlay等类型。如果在线修改参数后忘记重新加载systemdsudo systemctl daemon-reload sudo systemctl restart node_exporter改完再curl验证一下确认根分区的挂载点还在、临时文件系统已经被排除掉。6.5 textfile collector的自定义指标不生效检查三个方面文件目录是否指定正确ExecStart参数和实际文件路径是否一致。.prom文件的权限是否允许node_exporter用户读取。文件格式是否符合Prometheus文本格式规范任何一行语法错误会导致整个文件解析失败node_exporter日志中会出现相关错误信息。6.6 时间不同步导致监控数据异常这是一个容易被忽略但影响很大的问题。如果被监控主机和Prometheus服务器的时间不一致抓取数据的采样时间戳会偏移Grafana图表上会出现曲线错位、数据点重叠或者时间轴混乱的情况。更严重的是告警规则的for持续时间判定也会受时间偏差影响可能出现该告警不告警、或者延迟很久才告警的问题。最基本的排查手段是在所有相关服务器上执行date命令确认时间在一个可接受的误差范围内。生产环境建议统一配置NTP时间同步这个步骤优先级非常高务必在监控平台上线前处理好。6.7 常见问题速查表问题现象可能原因排查方式服务启动失败9100端口被占用、配置文件语法错误ss检查端口systemctl status查看错误信息Targets显示DOWN网络不通、防火墙拦截、抓取超时Prometheus服务器上curl目标接口查看Prometheus日志指标数据为NaN率值时间范围设置过短、新版本指标名变更修改PromQL的rate函数窗口时间对比节点实际指标名磁盘面板一大堆虚拟文件系统未排除tmpfs、overlay等文件系统类型通过启动参数排除后重启服务告警一直不触发表达式标签维度不对、for时间设置过长在Prometheus Graph页面先执行表达式确认返回结果内存数值比free命令的小很多free看的是free列指标看的是available用MemAvailable_bytes作为可用内存依据7. 从单节点到批量部署的一些体会文章最后基于我自己实际操作下来的经验分享几个走完整个配置流程后非常受用的体会。第一node_exporter本身只是一个非常轻量、安装便捷的组件但“装好”和“配好”之间的差距很大。所谓配好不仅指进程能跑起来还包括采集器选项是否合理、文本文件采集器有没有利用、自定义标签有没有打上、抓取时间间隔是否匹配业务需求。多花十分钟把这些细节理清楚后续用起来会顺手很多。第二监控数据的消费端比采集端更重要。node_exporter暴露的几百个指标大部分时间你根本不会用到。真正有价值的是那十几个核心指标你自己定制的业务指标。与其追求指标数量上的大而全不如把核心指标的采集准确性、告警阈值合理性打磨好。第三快速验证采集链路是否通有一种很实用的思路先curl确认exporter输出再去Prometheus确认targets状态再到Graph页面验证一个核心指标最后到Grafana看面板数据。这一条链路走一遍90%的配置问题都能暴露出来。第四关于容器化环境无论是docker方式还是K8s方式node_exporter的容器部署一定要正确处理rootfs挂载。这个坑非常隐蔽Payload看起来没问题targets也是UP但数据全都不对。遇到容器化部署的数据异常优先怀疑根目录挂载和--path.rootfs是否配置正确。如果你正准备搭一套Prometheus主机监控体系从node_exporter入手是成本最低、见效最快的方式。把这套链路跑通了再慢慢扩展其他exporter——黑盒探活、数据库指标、中间件指标——后面都是一样的套路。等主机基础监控稳定了你自然会开始关心业务层指标的采集和告警设计那时候前面打的底子就是最好的脚手架。
返回列表