免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Node Exporter 完整指南:安装部署、Collector 架构与高级配置实战

Node Exporter 完整指南:安装部署、Collector 架构与高级配置实战 Node Exporter 完整指南安装部署、Collector 架构与高级配置实战【免费下载链接】node_exporterExporter for machine metrics项目地址: https://gitcode.com/GitHub_Trending/no/node_exporterPrometheus Node Exporter 是一个用 Go 编写、支持可插拔度量收集器pluggable metric collectors的硬件与操作系统指标导出器专门面向 *NIX 内核以 HTTP 端口 9100 对外暴露指标是 Prometheus 生态中监控 Linux/Unix 主机最核心的组件。本文以当前仓库 README 为主体结合 入口程序 与 collector 包 的源码实现系统讲解从安装部署、Docker 容器化运行、Collector 启用/禁用与过滤到 sysctl、textfile、perf 等高级收集器的配置实战帮助读者掌握 Node Exporter 的完整使用与排障能力。一、项目定位与适用边界Node Exporter 暴露的是硬件与操作系统层面的指标内存、CPU、磁盘、网络、文件系统等不负责业务或服务级指标。仓库 README 同时给出两条边界建议Windows 用户推荐使用 prometheus-community 的windows_exporterNVIDIA GPU 指标可通过prometheus-dcgmdcgm-exporter暴露。也就是说Node Exporter 聚焦“机器本身”GPU、Windows 场景请使用对应专用 exporter。如果你是 Prometheus 与 Node Exporter 的新手官方还提供了 step-by-step 入门指南见 README 顶部指引。二、安装与运行1. 从源码构建构建前置条件Go 编译器RHEL/CentOS 系统需要glibc-static包。git clone https://github.com/prometheus/node_exporter.git cd node_exporter make build ./node_exporter flags查看全部可用配置标志./node_exporter -h运行测试make test说明make系列目标来自 Makefile 及其引入的Makefile.common。make test会先解包 collector/fixtures/sys.ttar 与 collector/fixtures/udev.ttar 测试夹具再以-short模式执行单元测试此外还提供test-e2e端到端测试、checkmetrics用 promtool 校验指标、test-docker等目标。仓库的 node_exporter_test.go 与 collector 下各*_test.go文件如 textfile_test.go、sysctl_linux.go 对应的测试覆盖了核心行为。2. 默认监听端口node_exporter默认监听 HTTP 端口9100。该默认值定义在 node_exporter.go 的toolkitFlags kingpinflag.AddFlags(kingpin.CommandLine, :9100)并通过 exporter-toolkit 的web.ListenAndServe启动 HTTP 服务node_exporter.go。3. Linux 发行版软件包与自动化部署Enterprise LinuxRHEL、CentOS Stream、Rocky Linux、AlmaLinux与 Fedoranode_exporter以golang-github-prometheus-node-exporter包名打包在 EPEL 中支持 EPEL 7/8/9Ansible 自动化安装可使用 Prometheus Community 的 ansible 角色prometheus-community/ansible。三、Docker 容器化部署监控宿主机Node Exporter 的设计目标是监控宿主机而非容器自身因此在容器中部署需要额外标志让 exporter 能访问宿主的命名空间namespaces。同时任何希望被监控的非根挂载点都需要以 bind-mount 方式挂载进容器。关键参数是path.rootfs启动容器监控宿主机时该参数必须与宿主机根目录的 bind-mount 路径一致Node Exporter 会把它作为访问宿主文件系统的前缀对应 paths.go 中--path.rootfs标志默认/。docker run 方式docker run -d \ --nethost \ --pidhost \ -v /:/host:ro,rslave \ quay.io/prometheus/node-exporter:latest \ --path.rootfs/host要点--nethost复用宿主网络命名空间避免监控容器自身的虚拟网卡--pidhost复用宿主 PID 命名空间确保进程相关指标反映宿主机-v /:/host:ro,rslave将宿主根目录只读、rslave 方式挂载到/host--path.rootfs/host告诉 exporter 以/host为前缀读取宿主文件系统。从 paths.go 的实现看当rootfsPath ! /时所有读取路径都会先经过rootfsStripPrefix剥离前缀保证导出的指标路径信息如挂载点仍是宿主的真实路径。docker compose 方式--- version: 3.8 services: node_exporter: image: quay.io/prometheus/node-exporter:latest container_name: node_exporter command: - --path.rootfs/host network_mode: host pid: host restart: unless-stopped volumes: - /:/host:ro,rslave特殊场景timex 收集器在某些系统上timex收集器需要额外 Docker 标志--cap-addSYS_TIME才能访问所需系统调用adjtimex 相关。timex指标的含义见下文“时间同步监控”一节。四、Collector 体系启用、禁用与默认状态每个收集器在不同操作系统上的支持程度不同README 以表格形式列出了全部收集器及其支持的系统。Collector 的启用规则非常统一启用--collector.name禁用默认启用的收集器--no-collector.name仅启用指定收集器--collector.disable-defaults --collector.name ...。从源码看这套机制的实现位于 collector/collector.go每个收集器通过registerCollector(collector, isDefaultEnabled, factory)注册自动生成形如collector.name的 kingpin 布尔标志其默认值即该收集器的默认启用状态并存入collectorState映射。--collector.disable-defaults触发 DisableDefaultCollectors将所有未在命令行显式指定的收集器置为禁用因此它能与显式--collector.name组合实现“白名单”模式通过forcedCollectors记录显式指定项collectorFlagAction。每个收集器实现统一的Collector接口collector/collector.gotype Collector interface { Update(ch chan- prometheus.Metric) error }NodeCollector.Collect 会为每个启用的收集器启动一个 goroutine 并发执行Update并在 execute 中为每个收集器输出两个内置指标node_scrape_collector_duration_seconds{collector...}单次抓取耗时node_scrape_collector_success{collector...}收集是否成功0/1。收集器若返回ErrNoData如目标文件不存在会被当作“无数据”而非错误处理collector/collector.go。所有指标统一使用node命名空间前缀collector/collector.go。1. 默认启用的收集器名称描述OSarp暴露/proc/net/arp的 ARP 统计Linuxbcache暴露/sys/fs/bcache/的 bcache 统计Linuxbonding暴露 Linux bonding 接口已配置与活跃 slave 数量Linuxbtrfs暴露 btrfs 统计Linuxboottime由kern.boottimesysctl 导出的系统启动时间Darwin, Dragonfly, FreeBSD, NetBSD, OpenBSD, Solarisconntrack显示 conntrack 统计无/proc/sys/net/netfilter/时不做任何事Linuxcpu暴露 CPU 统计Darwin, Dragonfly, FreeBSD, Linux, Solaris, OpenBSDcpufreq暴露 CPU 频率统计Linux, Solarisdiskstats暴露磁盘 I/O 统计Darwin, Linux, OpenBSDdmi暴露/sys/class/dmi/id/的桌面管理接口DMI信息Linuxdmmultipath暴露/sys/block/dm-*的 DM-multipath 设备与路径指标Linuxedac暴露错误检测与纠正EDAC统计Linuxentropy暴露可用熵Linuxexec暴露执行统计Dragonfly, FreeBSDfibrechannel暴露/sys/class/fc_host/的光纤通道信息与统计Linuxfilefd暴露/proc/sys/fs/file-nr的文件描述符统计Linuxfilesystem暴露文件系统统计如已用磁盘空间Darwin, Dragonfly, FreeBSD, Linux, OpenBSDhwmon暴露/sys/class/hwmon/的硬件监控与传感器数据Linuxinfiniband暴露 InfiniBand 与 Intel OmniPath 配置相关网络统计Linuxipvs暴露/proc/net/ip_vs状态与/proc/net/ip_vs_stats统计Linuxkernel_hung暴露/proc/sys/kernel/hung_task_detect_count检测到的挂起任务数Linuxloadavg暴露负载平均值Darwin, Dragonfly, FreeBSD, Linux, NetBSD, OpenBSD, Solarismdadm暴露/proc/mdstat设备统计无/proc/mdstat时不做事Linuxmeminfo暴露内存统计Darwin, Dragonfly, FreeBSD, Linux, OpenBSDnetclass暴露/sys/class/net/网络接口信息Linuxnetdev暴露网络接口统计如传输字节数Darwin, Dragonfly, FreeBSD, Linux, OpenBSDnetisr暴露 netisr 统计FreeBSDnetstat暴露/proc/net/netstat网络统计等价于netstat -sLinuxnfs暴露/proc/net/rpc/nfsNFS 客户端统计等价于nfsstat -cLinuxnfsd暴露/proc/net/rpc/nfsdNFS 内核服务器统计等价于nfsstat -sLinuxnvme暴露/sys/class/nvme/NVMe 信息Linuxos暴露/etc/os-release或/usr/lib/os-release的 OS 发布信息任意powersupplyclass暴露/sys/class/power_supply电源统计Linuxpressure暴露/proc/pressure/压力停滞PSI统计Linux内核 4.20 和/或 CONFIG_PSIrapl暴露/sys/class/powercap的 RAPL 统计Linuxschedstat暴露/proc/schedstat任务调度器统计Linuxselinux暴露 SELinux 统计Linuxsockstat暴露/proc/net/sockstat的套接字统计Linuxsoftnet暴露/proc/net/softnet_stat统计Linuxstat暴露/proc/stat统计含启动时间、fork、中断Linuxtapestats暴露/sys/class/scsi_tape统计Linuxtextfile暴露从本地磁盘读取的统计必须设置--collector.textfile.directory任意thermal暴露热统计类似pmset -g thermDarwinthermal_zone暴露/sys/class/thermal热区与冷却设备统计Linuxtime暴露当前系统时间任意timex暴露选定的 adjtimex(2) 系统调用统计Linuxudp_queues暴露/proc/net/udp与/proc/net/udp6的 UDP rx_queue/tx_queue 总长度Linuxuname暴露 uname 系统调用提供的系统信息Darwin, FreeBSD, Linux, OpenBSDvmstat暴露/proc/vmstat统计Linuxwatchdog暴露/sys/class/watchdog统计Linuxxfs暴露 XFS 运行时统计Linux内核 4.4zfs暴露 ZFS 性能统计FreeBSD, Linux, Solaris2. 默认禁用的收集器以下收集器默认关闭原因各异主要包括高基数High cardinality运行时间超过 Prometheus 的scrape_interval或scrape_timeout对宿主机产生显著资源消耗。因此官方强烈建议如需启用务必一次只启用一个先在非生产系统测试再在单个生产节点手工验证。启用后应密切观察两个指标来评估影响scrape_duration_seconds确保采集能完成、不会超时scrape_samples_post_metric_relabeling观察基数cardinality变化。名称描述OSbuddyinfo暴露/proc/buddyinfo报告的内存碎片统计Linuxcgroups活动与启用的 cgroups 数量汇总Linuxcpu_vulnerabilities暴露 sysfs 的 CPU 漏洞信息Linuxdevstat暴露设备统计Dragonfly, FreeBSDdrm通过 sysfs/DRM 暴露 GPU 指标amdgpu是唯一通过 DRM 暴露该信息的驱动Linuxdrbd暴露 DRBD分布式复制块设备统计至 8.4 版Linuxethtool暴露网络接口信息与驱动统计等价于ethtool、ethtool -S、ethtool -iLinuxinterrupts暴露详细中断统计Linux, OpenBSDksmd暴露/sys/kernel/mm/ksm的内核与系统统计Linuxlnstat暴露/proc/net/stat/统计Linuxlogind暴露 logind 会话计数Linuxmeminfo_numa暴露/sys/devices/system/node/node[0-9]*/meminfo、node[0-9]*/numastat的内存统计Linuxmountstats暴露/proc/self/mountstats文件系统统计含详细 NFS 客户端统计Linuxnetwork_route以指标形式暴露路由表Linuxnvmesubsystem暴露/sys/class/nvme-subsystem/的 NVMe over Fabrics 子系统路径健康指标Linuxpcidevice暴露 PCI 设备信息含链路状态与父设备Linuxperf暴露基于 perf 的指标注意指标取决于内核配置与设置Linuxprocesses暴露/proc的聚合进程统计Linuxqdisc暴露排队规则queuing discipline统计Linuxslabinfo暴露/proc/slabinfo的 slab 统计注意/proc/slabinfo权限通常为 0400需适当设置Linuxsoftirqs暴露/proc/softirqs的详细 softirq 统计Linuxsysctl暴露/proc/sys的 sysctl 值使用--collector.sysctl.include(-info)配置Linuxswap暴露/proc/swaps的 swap 信息Linuxsystemd暴露 systemd 服务与系统状态Linuxtcpstat暴露/proc/net/tcp与/proc/net/tcp6的 TCP 连接状态信息注意当前版本在高负载场景存在潜在性能问题Linuxwifi暴露 WiFi 设备与站点统计Linuxxfrm暴露/proc/net/xfrm_stat统计Linuxzoneinfo暴露 NUMA 内存区指标Linux3. 已弃用收集器以下收集器已弃用将在下一个主版本中移除名称描述OSntp暴露本地 NTP 守护进程健康状态用于校验时间详见 docs/TIME.md任意runit暴露 runit 服务状态任意supervisord暴露 supervisord 服务状态任意五、Include / Exclude 过滤标志部分收集器支持通过专用标志对目标做“包含/排除”过滤exclude 表示“除这些以外全部”include 表示“只取这些”在同一收集器上两者互斥不可同时使用。示例排除默认的伪文件系统挂载点--collector.filesystem.mount-points-exclude^/(dev|proc|sys|var/lib/docker/.|var/lib/kubelet/.)($|/)完整清单CollectorScopeInclude FlagExclude Flagarpdevice--collector.arp.device-include--collector.arp.device-excludecpubugs--collector.cpu.info.bugs-includeN/Acpuflags--collector.cpu.info.flags-includeN/Adiskstatsdevice--collector.diskstats.device-include--collector.diskstats.device-excludeethtooldevice--collector.ethtool.device-include--collector.ethtool.device-excludeethtoolmetrics--collector.ethtool.metrics-includeN/Afilesystemfs-types--collector.filesystem.fs-types-include--collector.filesystem.fs-types-excludefilesystemmount-points--collector.filesystem.mount-points-include--collector.filesystem.mount-points-excludehwmonchip--collector.hwmon.chip-include--collector.hwmon.chip-excludehwmonsensor--collector.hwmon.sensor-include--collector.hwmon.sensor-excludeinfinibanddevice--collector.infiniband.device-include--collector.infiniband.device-excludeinterruptsname--collector.interrupts.name-include--collector.interrupts.name-excludenetdevdevice--collector.netdev.device-include--collector.netdev.device-excludeqdiscdevice--collector.qdisc.device-include--collector.qdisc.device-excludeslabinfoslab-names--collector.slabinfo.slabs-include--collector.slabinfo.slabs-excludesysctlall--collector.sysctl.includeN/Asystemdunit--collector.systemd.unit-include--collector.systemd.unit-exclude这类标志在每个收集器的源码中定义例如 filesystem 的挂载点/文件系统类型过滤在 filesystem_linux.godevice 类过滤可参考 device_filter.go提供 include/exclude 正则匹配的公共工具及其测试 device_filter_test.go。六、按请求过滤收集器collect[] / exclude[]默认情况下 Node Exporter 会暴露所有已启用收集器的全部指标这也是官方推荐做法——避免在比较不同指标族时出错。但对于高级场景可通过 HTTP 查询参数collect[]与exclude[]按单次抓取请求过滤指标。两个参数均可重复使用但不能同时出现。在 Prometheus 的scrape_config中可以直接使用该语法。只收集cpu与meminfo收集器的指标params: collect[]: - cpu - meminfo收集所有已启用收集器的指标但排除netdevparams: exclude[]: - netdev典型用途让不同的 Prometheus 服务器从同一节点抓取各自关心的指标子集。源码验证node_exporter.go 的handler.ServeHTTP解析collect[]与exclude[]两个查询参数当两者同时存在时返回 400Combined collect and exclude queries are not allowed.exclude模式下先由“已启用收集器列表”减去排除项得到过滤集合node_exporter.go随后按需通过innerHandler(*filters...)动态创建一个过滤后的 handlernode_exporter.go无过滤时则复用启动时预构建的unfilteredHandler以节省开销。七、Sysctl Collector把内核参数导出为指标sysctl收集器默认禁用使用--collector.sysctl启用。它支持把数值型 sysctl 导出为普通指标--collector.sysctl.include把字符串值导出为 info 指标--collector.sysctl.include-info。两个标志均可重复指定。对于包含多个数值的 sysctl可附加映射把每个字段导出为独立指标否则使用index标签区分各字段。数值型示例单值使用--collector.sysctl.includevm.user_reserve_kbytesvm.user_reserve_kbytes 131072 → node_sysctl_vm_user_reserve_kbytes 131072多值默认带 index 标签例如net.ipv4.tcp_rmem 4096 131072 6291456使用--collector.sysctl.includenet.ipv4.tcp_rmem收集器输出node_sysctl_net_ipv4_tcp_rmem{index0} 4096 node_sysctl_net_ipv4_tcp_rmem{index1} 131072 node_sysctl_net_ipv4_tcp_rmem{index2} 6291456多值字段映射若索引有明确含义此处 tcp_rmem 依次为 min/default/max可在 include 标志后追加映射--collector.sysctl.includenet.ipv4.tcp_rmem:min,default,max输出node_sysctl_net_ipv4_tcp_rmem_min 4096 node_sysctl_net_ipv4_tcp_rmem_default 131072 node_sysctl_net_ipv4_tcp_rmem_max 6291456字符串型示例字符串值必须以 info 指标暴露通过--collector.sysctl.include-info选择。单值kernel.core_pattern core → node_sysctl_info{keykernel.core_pattern_info, valuecore} 1多值给定kernel.seccomp.actions_avail kill_process kill_thread trap errno trace log allow设置--collector.sysctl.include-infokernel.seccomp.actions_avail得到node_sysctl_info{keykernel.seccomp.actions_avail, index0, valuekill_process} 1 node_sysctl_info{keykernel.seccomp.actions_avail, index1, valuekill_thread} 1 ...实现原理collector/sysctl_linux.go--collector.sysctl.include与--collector.sysctl.include-info均为可重复的字符串列表标志。newSysctl用:切分“名称”与“字段映射”collector/sysctl_linux.go映射以,分隔newMetrics依据值数量与是否提供映射分别走单值、index标签多值、字段映射三条输出路径collector/sysctl_linux.go多值但映射长度不匹配时会直接报错。info 指标统一使用 sysctlInfoDescnode_sysctl_info暴露。八、Textfile Collector导出机器级自定义指标textfile收集器与 Pushgateway 类似允许批量任务导出统计指标也可用于导出静态指标如机器角色。两者的分工是Pushgateway 面向服务级指标textfile 面向绑定在机器上的指标。使用方式在命令行设置--collector.textfile.directory收集器会解析该目录下所有匹配 glob*.prom的文件使用 Prometheus 文本格式 解析。注意不支持时间戳Timestamps are not supported。为 cron 任务原子地推送完成时间先写临时文件再mv避免读到半写文件echo my_batch_job_completion_time $(date %s) /path/to/directory/my_batch_job.prom.$$ mv /path/to/directory/my_batch_job.prom.$$ /path/to/directory/my_batch_job.prom用标签静态标记机器角色echo role{roleapplication_server} 1 /path/to/directory/role.prom.$$ mv /path/to/directory/role.prom.$$ /path/to/directory/role.prom实现细节collector/textfile.go标志--collector.textfile.directory可重复指定且支持 glob 匹配collector/textfile.goUpdate中先用filepath.Glob展开每个目录参数collector/textfile.go只处理以.prom结尾的文件collector/textfile.go若文件含自定义客户端时间戳整个文件会被跳过并报错collector/textfile.go 与 hasTimestamps同名字指标的 HELP 文本不一致会被记录为错误collector/textfile.go未提供 HELP 的指标自动生成Metric read from 文件帮助文本额外输出两个内置指标node_textfile_mtime_seconds{file...}成功读取文件的 mtime与node_textfile_scrape_error1 表示打开/读取文件出错0 表示正常collector/textfile.go支持 Counter、Gauge、Untyped、Summary、Histogram 等全部指标类型convertMetricFamily仓库 collector/fixtures/textfile 下提供了 histogram、summary、多文件合并、HELP 冲突等各场景的测试样本。九、Perf Collector内核性能计数与 Tracepointperf收集器默认禁用且在某些 Linux 系统上可能因内核配置与安全设置而无法开箱即用。如需放行请设置如下 sysctlsysctl -w kernel.perf_event_paranoidX各取值含义2仅允许用户空间测量Linux 4.6 起默认1允许内核与用户测量Linux 4.6 之前默认0允许访问 CPU 特定数据但不允许原始 tracepoint 采样-1无限制。不同取值可用的指标不同大多数场景下0能提供最完整的指标集合。更多信息参见man 2 perf_event_open。限定 CPU 集合默认情况下perf收集器只采集Node Exporter 自身运行所在 CPU即runtime.NumCPU判定见 collector/perf_linux.go的指标。若这不满足需求例如为 Node Exporter 设置了 CPU 亲和性可用--collector.perf.cpus指定候选 CPU 列表。例如采集 CPU 2-6--collector.perf --collector.perf.cpus2-6CPU 编号从 0 开始且支持**步长stride**语法例如--collector.perf --collector.perf.cpus1-10:5表示采集 CPU 1、5、10。采集 Tracepoint 计数使用--collector.perf.tracepoint标志可采集 tracepoint 计数。Tracepoint 可通过perf list或 debugfs 查找格式为子系统:事件。例如--collector.perf.tracepointsched:sched_process_exec实现细节collector/perf_linux.go该收集器还提供--collector.perf.disable-hardware-profilers、--collector.perf.hardware-profilers、--collector.perf.disable-software-profilers、--collector.perf.software-profilers、--collector.perf.disable-cache-profilers、--collector.perf.cache-profilers等细粒度开关可分别控制硬件CpuCycles、CacheMisses、BranchMisses 等、软件PageFault、ContextSwitch、CpuMigration 等与缓存L1DataReadHit/Miss、LLReadHit/Miss、DataTLB 系列等三类 profiler见 collector/perf_linux.go 中的 profiler 映射表tracepoint 标志按:拆分为子系统与事件collector/perf_linux.gocpus 标志支持a-b、a-b:s的区间与步长解析。仓库还提供 collector/perf_linux_test.go 验证 CPU 列表与 tracepoint 的解析逻辑。十、TLS 端点实验性Exporter 支持通过新的 web 配置文件启用 TLS./node_exporter --web.config.fileweb-config.ymlEXPERIMENTAL该功能处于实验阶段。详细配置格式见 exporter-toolkit 的 web-configuration 文档。本仓库 tls_config_noAuth.bad.yml 提供了一个用于测试的 TLS 配置样例。十一、时间同步监控timex 与 ntp时间同步是主机监控的重要环节仓库 docs/TIME.md 专门讲述了用 Node Exporter 监控时间同步的方案README 在“Deprecated”表格中亦引用了该文档。timex 收集器Linuxtimex导出内核时间同步标志STA_UNSYNC的状态该标志应由时间守护进程time-keeping daemon持续维护若守护进程未定期更新Linux 内核最终会将其置起。但需要注意部分守护进程不妥善处理该标志例如 Debian/jessie 的 chrony-1.30 在初始化时会清除STA_UNSYNC不通过该标志表达时钟同步状态现代 chrony 版本表现更佳且所有 chrony 版本都需要rtcsync选项来维护该标志OpenNTPD 直到 5.9p1 之前完全不触碰该标志相反sync_status与offset的组合是监控 systemd-timesyncd 是否正常工作的可靠途径。ntp 收集器已弃用NOTE该收集器已弃用将在下一个主版本移除。ntp收集器用于本地 NTP 守护进程ntp.org、chrony、OpenNTPD。使用注意部分 chrony 包配置了local stratum 10使 chrony 在未同步时也表现为合法服务器这会让派生node_ntp_sanity的启发式规则之一不可靠OpenNTPD 默认不监听 SNTP 查询使用时需在配置中添加listen on 127.0.0.1。该收集器输出的核心指标与含义node_ntp_stratum本地 NTP 守护进程的 stratum。Stratum 16 表示时钟未同步注意上述 chrony 默认 local stratum 的坑node_ntp_leap原始闰秒标志。0 – 正常1 – UTC 午夜增加闰秒2 – UTC 午夜删除闰秒3 – 未同步。OpenNTPD 忽略闰秒从不把 leap 置为 1 或 2node_ntp_rtt从 Node Exporter 到本地 NTPD 的往返时延用于健全性检查中的“因果违反causality violation”估算node_ntp_offset本地时间与 NTPD 时间的时钟偏移。ntp.org 的 NTPD 总是把 NTPD 时间设为本地时钟而非中继远端 NTP 时间因此对该 NTPD 该偏移无意义同样参与健全性检查node_ntp_reference_timestamp_seconds参考时间表示最后一次调整的时间但实现细节从“本地墙上时钟”到“入站 SNTP 包中的 Reference Time 字段”各不相同。time() - node_ntp_reference_timestamp_seconds与node_time_seconds - node_ntp_reference_timestamp_seconds可作为“同步新鲜度”的估计node_ntp_root_delay与node_ntp_root_dispersion用于计算同步距离该距离受collector.ntp.max-distance限制。ntp.org 会把已知本地偏移加进宣布的 root dispersion并在 NTP 连通性出问题时线性增大 dispersionOpenNTPD 完全不计算 dispersion始终报告 0node_ntp_sanityNTPD 健康的聚合指标包含 stratum、leap 标志、合理的同步新鲜度、root 距离小于collector.ntp.max-distance、以及因果违反小于collector.ntp.local-offset-tolerance。因果违反是使用 SNTP 对时钟误差的下界估计计算为abs(node_ntp_offset) - node_ntp_rtt / 2的正值部分。十二、常用运行时与路径标志从 node_exporter.go 可看到几个影响全局行为的标志标志默认值说明--web.telemetry-path/metrics暴露指标的 HTTP 路径--web.disable-exporter-metricsfalse排除关于 exporter 自身的指标promhttp_*、process_*、go_*--web.max-requests40最大并行抓取请求数0 表示不限制--collector.disable-defaultsfalse将所有收集器默认置为禁用--runtime.gomaxprocs1可用环境变量GOMAXPROCS覆盖Go 运行时使用的 CPU 目标数GOMAXPROCS路径类标志定义在 collector/paths.go标志默认值说明--path.procfsprocfs 默认挂载点通常/procproc 文件系统挂载点--path.sysfs/syssysfs 挂载点--path.rootfs/rootfs 挂载点容器部署时指向 bind-mount 的宿主根目录--path.udev.data/run/udev/dataudev 数据路径十三、systemd 部署示例仓库 examples/systemd 提供了生产可用的 systemd 配置node_exporter.service定义服务单元以node_exporter用户运行通过EnvironmentFile-/etc/sysconfig/node_exporter读取可选环境文件-前缀表示文件不存在时静默跳过ExecStart/usr/sbin/node_exporter --web.systemd-socket $OPTIONS表明通过 systemd socket 激活方式监听端口附加参数由$OPTIONS注入node_exporter.socketsocket 单元ListenStream9100监听 9100 端口由sockets.target拉起实现按需启动socket activationsysconfig.node_exporter环境文件模板用于填写OPTIONS如--collector.textfile.directory、--no-collector.xxx等。结语Node Exporter 的核心理念是“一个收集器对应一类系统数据”通过--collector.name的开关体系、Include/Exclude 正则过滤、按请求的collect[]/exclude[]过滤以及 sysctl/textfile/perf 等可扩展收集器几乎可以覆盖 Linux/Unix 主机监控的全部场景。理解其收集器注册机制collector/collector.go、抓取执行模型与内置的node_scrape_collector_*指标能帮助你安全地启用更多收集器、排查抓取超时与基数膨胀问题构建出稳定可靠的主机可观测性底座。【免费下载链接】node_exporterExporter for machine metrics项目地址: https://gitcode.com/GitHub_Trending/no/node_exporter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表