Linux Prometheus 部署与指标采集

7次阅读

prometheus target 显示 down 的最常见原因是 scrape_config 中 target 端口错误,如将 node_exporter 的 :9100 误写为 :9090;需核对 static_configs 下 targets 端口与实际服务监听端口(node_exporter 默认 0.0.0.0:9100)是否一致。

Linux Prometheus 部署与指标采集

prometheus.yml 配置文件写错端口导致 target 一直显示 down

Prometheus 启动后 target 状态始终是 DOWN,最常见原因是 scrape_config 里写的 target 地址端口不对,比如把 node_exporter 默认的 :9100 写成 :9090(那是 Prometheus 自己的 Web 端口)。curl http://localhost:9100/metrics 能通,但 Prometheus 抓不到,基本就是配置里地址或端口拼错了。

  • 检查 prometheus.ymlstatic_configs 下的 targets,确认端口和实际服务监听端口一致
  • node_exporter 默认监听 0.0.0.0:9100cadvisor:8080blackbox_exporter:9115——别凭印象写
  • 如果 target 是域名或内网 DNS 名,确保 Prometheus 容器或进程能正常解析并访问该地址(宿主机网络、docker 网络模式、k8s Service DNS 都可能影响)

systemd 启动 Prometheus 报 failed to load configuration

用 systemd 管理 Prometheus 时,启动失败日志里出现 failed to load configuration,大概率是 prometheus.yml 有 YAML 语法错误,比如缩进不一致、用了 tab 而不是空格、漏了冒号或引号。

  • 先手动运行 prometheus --config.file=/etc/prometheus/prometheus.yml --dry-run,它会校验配置并报具体哪一行出错
  • YAML 对缩进极其敏感:所有 scrape_configs 下的字段必须比上一级多两个空格,static_configsmetrics_path 必须对齐,不能一个缩进 2 个、一个缩进 4 个
  • 路径中如果有变量(如 ${HOSTNAME}),Prometheus 不支持 shell 展开,得用 relabel_configs 或外部模板工具预处理

node_exporter 没有磁盘 IO 或进程数指标

部署完 node_exporter,发现 grafana 里看不到 node_disk_io_time_seconds_totalnode_processes_threads 这类指标,不是采集问题,而是默认启动没开对应收集器。

  • node_exporter 默认只启用基础收集器(cpu、mem、load),IO、进程、硬件传感器等需显式开启,例如:node_exporter --collectors.enabled="cpu,mem,load,diskstats,processes"
  • 注意 diskstats 收集的是块设备 IO,不是文件系统使用率;后者靠 Filesystem 收集器(对应 node_filesystem_avail_bytes
  • 某些收集器需要额外权限:比如 systemd 收集器要读 /run/systemd/system,在容器里得挂载 /run 目录;textfile 收集器依赖 --collector.textfile.Directory 参数指定路径

Prometheus 内存暴涨、查询变慢甚至 OOM

跑几天后 Prometheus 进程 RSS 内存持续上涨,Web 页面响应卡顿,/api/v1/query 超时,通常不是 bug,而是时间序列数量失控或保留策略没设好。

  • 检查 tsdb 数据量:du -sh /var/lib/prometheus/data/,如果单日增长超 1GB,大概率有高基数标签(比如带用户 ID、请求 URL 全路径的 metric)
  • 限制采集频率:高频抓取(scrape_interval: 5s)+ 大量 targets 容易撑爆内存,生产环境建议 15s–60snode_exporter 通常 30s 就够
  • 务必配 storage.tsdb.retention.time(如 15d),否则数据无限积;同时确认磁盘有足够空间,TSDB 压缩失败也会导致内存缓存积压

指标基数、label 组合爆炸、retention 和 scrape_interval 的搭配,这几个地方一松动,Prometheus 就容易从监控工具变成被监控对象

text=ZqhQzanResources