ARTICLE DETAIL

资讯详情

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

Pigsty node_monitor 角色实战指南:Node Exporter、Vector 与 Keepalived 指标的自动化采集与注册

Pigsty node_monitor 角色实战指南:Node Exporter、Vector 与 Keepalived 指标的自动化采集与注册 数据库运维云原生高可用监控【免费下载链接】pigstyEnterprise-Grade OSS PostgreSQL Distribution with HA, PITR, IaC, Monitor, 12 kernel forks and 575 PG extensions. Best-of-breed products integrated as a platform. Self-host Postgres like a Pro!项目地址https://gitcode.com/GitHub_Trending/pi/pigsty点击查看免费下载本文围绕 Pigsty 仓库中roles/node_monitor角色展开详解 Linux 节点监控组件node_exporter、keepalived_exporter、Vector的部署方式、参数配置、Victoria Metrics 目标注册机制与日志采集链路。读完本文你将掌握如何通过node.yml一键初始化节点监控、如何按 tag 精确控制执行范围、如何定制 exporter 采集选项与 Vector 日志转发目标并理解监控目标文件与日志字段的生成原理。角色定位与职责node_monitor是 Pigsty 节点初始化链路中的监控组件角色其核心使命是为每一台 Linux 节点搭建监控采集与日志转发能力并将其注册进基础设施监控体系。从 roles/node_monitor/meta/main.yml 的定义看它被描述为 setup exporters logging agent on nodes支持 EL、Ubuntu、Debian 全系平台。该角色具体完成三件事node_exporter采集系统级指标默认端口 9100包括 CPU、内存、磁盘、网络等keepalived_exporter当节点启用 VIP虚拟 IP时采集 Keepalived 状态指标默认端口 9650vector日志采集 Agent默认端口 9598从 journald 读取系统日志并转发。同时它负责两件注册动作Victoria Metrics将节点注册为抓取目标scrape targetHAProxy/Nginx将 HAProxy 反向代理入口注册到 Nginx。在角色依赖关系上node_monitor与node、node_id、node_remove、infra等角色协同工作node_id负责生成节点身份node负责基础环境准备infra提供 Victoria Metrics、Victoria Logs、Nginx 等基础设施而node_remove负责反向卸载。Playbook通过 node.yml 触发该角色没有独立 Playbook而是作为node.yml完整节点初始化链路中的一个环节被调用。在 node.yml 中可以看到完整的角色序列- name: NODE hosts: all become: true gather_facts: no roles: - { role: node_id , tags: id } # get node identity (always) - { role: node , tags: node } # prepare node for pigsty - { role: haproxy , tags: haproxy } # init haproxy optional - { role: node_monitor , tags: monitor } # init node monitor使用方式如下./node.yml -l cls # 初始化某个节点分组 ./node.yml -l ip # 初始化单个节点 ./node.yml -t monitor # 仅执行 node_monitor 相关任务Playbook 头部注释还提供了便捷脚本的用法node.ymlbin/node-add pg-meta # 初始化节点分组 pg-meta bin/node-add 10.10.10.10 # 按 IP 初始化节点 bin/node-add 10.10.10.1* # 按 IP 模式匹配初始化注意执行前需保证对目标节点具备免密 SSH 与 sudo 权限并在 inventory 中定义好节点。文件结构角色目录结构如下与 roles/node_monitor/README.md 描述一致roles/node_monitor/ ├── defaults/ │ └── main.yml # 默认变量 ├── files/ │ ├── node_exporter.svc # node_exporter systemd 服务单元 │ └── keepalived_exporter.svc # keepalived_exporter systemd 服务单元 ├── meta/ │ └── main.yml # 角色依赖与元数据 ├── tasks/ │ ├── main.yml # 入口 │ └── vector.yml # Vector 安装/清理/配置/启动 └── templates/ ├── vector.yaml # Vector 主配置Jinja2 模板 ├── vector.env # Vector 环境变量 ├── vector.svc # Vector systemd 服务单元 └── node.yaml # Vector 节点日志源配置Tag 体系精细化执行控制node_monitor内建了完整的 tag 层级便于用户只重跑某一段任务。入口 tasks/main.yml 中每个任务块都打上了对应 tag层级关系如下node_monitor (from node.yml) │ ├── haproxy_register # 将 HAProxy 注册到 Nginx │ ├── vip_dns # 注册 VIP DNS 名称 │ ├── node_exporter # node_exporter 安装配置 │ ├── node_exporter_config # 生成配置 │ └── node_exporter_launch # 启动服务 │ ├── vip_exporter # keepalived_exporter启用 VIP 时 │ ├── vip_exporter_config # 生成配置 │ └── vip_exporter_launch # 启动服务 │ ├── node_register # 注册到监控体系 │ ├── add_metrics # 注册到 Victoria Metrics │ └── add_logs # 注册 Vector 日志源 │ └── vector # Vector 日志 Agent ├── vector_install # 安装 Vector ├── vector_clean # 按需清理数据 ├── vector_config # 生成配置与日志源 │ └── vector_dir # 创建配置/数据目录 └── vector_launch # 启动服务例如只想重启 node_exporter 并重新注册目标可执行./node.yml -l ip -t node_exporter_launch,node_register从 tasks/main.yml 源码可以看到注册类任务还额外携带了register、add_proxy、add_dns、add_metrics、add_logs等语义化 tag便于跨角色统一筛选。核心变量详解node_exporter变量默认值说明node_exporter_enabledtrue是否启用 node_exporternode_exporter_port9100监听端口node_exporter_options见下额外 CLI 参数默认采集选项defaults/main.yml--no-collector.softnet --no-collector.nvme --collector.tcpstat --collector.processes这些默认值禁用容易产生噪音/问题的采集器softnet、nvme同时启用有实用价值的采集器tcpstat 提供 TCP 连接状态统计processes 提供进程级指标。这些选项最终被写入/etc/default/node_exportertasks/main.ymlNODE_EXPORTER_OPTS--web.listen-address:9100 --web.telemetry-path/metrics --no-collector.softnet --no-collector.nvme --collector.tcpstat --collector.processes其中监听端口、指标路径exporter_metrics_path默认/metrics均由变量渲染。服务单元文件 files/node_exporter.svc 使用EnvironmentFile-/etc/default/node_exporter读取上述选项并通过CPUQuota30%限制 exporter 的 CPU 占用上限30%避免采集对业务造成显著影响。启动任务会先restartsystemd 服务再用wait_for等待端口 9100 就绪tasks/main.yml。keepalived_exporter变量默认值说明vip_enabledfalse是否启用 VIP 及对应 exportervip_address无节点 VIP 地址IPv4启用 VIP 时必填vip_dns_suffixVIP DNS 名称后缀vip_exporter_port9650keepalived_exporter 监听端口当vip_enabled: true时角色会执行两个附加动作tasks/main.ymlvip_dns渲染 DNS 记录到临时文件后原子mv到/etc/dnsmasq.d/pigsty/{{ node_cluster }}.vip以避免 dnsmasq 的 inotify 竞态记录内容为{{ vip_address }} {{ node_cluster }}{{ vip_dns_suffix }}。vip_exporter部署 keepalived_exporter其选项写入/etc/default/keepalived_exportertasks/main.ymlKEEPALIVED_EXPORTER_OPTS--web.listen-address:9650 --web.telemetry-path/metrics服务单元 files/keepalived_exporter.svc 引用gen2brain/keepalived_exporter实现Restarton-failureRestartSec5保证异常退出自动拉起。Vector变量默认值说明vector_enabledtrue是否启用 vector 日志 Agentvector_port9598指标暴露端口vector_data/data/vector数据目录vector_cleanfalse初始化时是否清空数据目录vector_read_frombeginning从日志开头还是结尾读取vector_log_endpoint[ infra ]日志转发目标见下日志转发目标vector_log_endpoint的取值行为取值行为[ infra ]自动发现 infra 节点上的 Victoria Logs默认[ http://host:9428/... ]转发到显式指定的 Victoria Logs 端点[]空禁用日志转发仅采集指标注意Vector 使用current_boot_only: true即只采集本机自上次开机以来的日志重启时不重复回灌历史日志避免重复数据详见下文日志源配置。Vector 的配置模板 templates/vector.yaml 完整展示了端点的生成逻辑当vector_log_endpoint为[infra]时遍历groups[infra]中的所有主机检查hostvars[host][vlogs_enabled]默认 true并以vlogs_port默认 9428拼出端点http://host:port/insert/jsonline否则按列表中的每个显式端点原样转发并支持${admin_ip}占位符替换若最终log_receivers为空则不生成任何日志 sinkVector 仅作为指标采集器。每个日志 sink 使用http类型、json编码、newline_delimitedframing、gzip压缩并通过请求头向 Victoria Logs 声明流字段与语义request: headers: VL-Stream-Fields: job,ins,ip VL-Msg-Field: message VL-Time-Field: _time VL-Ignore-Fields: timestamp,fileVector 的安装、清理、配置、启动流程在 tasks/vector.yml 中分四步实现vector_install通过系统包管理器安装 vector 包vector_clean当vector_clean: true时先停止服务再删除{{ vector_data }}与/etc/vector目录实现从零开始的日志采集vector_config创建/etc/vector与{{ vector_data }}目录vector_dirtag渲染vector.svc、vector.env、vector.yaml三个文件并额外渲染日志源/etc/vector/node.yamlvector_launch重启 systemd 服务并等待端口 9598 就绪。相关模板细节vector.envVECTOR_OPTS--config-dir /etc/vector指向配置目录vector.svc以 root 运行LimitNOFILE655360提升文件描述符上限以支撑高吞吐日志Vector 内部指标由internal_metrics源以 15 秒间隔采集并通过prometheus_exportersink 暴露到0.0.0.0:{{ vector_port }}命名空间为vector。HAProxy变量默认值说明haproxy_enabledtrue是否启用 HAProxyhaproxy_exporter_port9101HAProxy 指标/管理端口Exporter 端口总览Exporter默认端口说明node_exporter9100系统指标haproxy_exporter9101HAProxy 指标vector9598Vector 自身指标keepalived_exporter9650VIP/Keepalived 指标注册目标Victoria Metrics 与 PingVictoria Metrics 抓取目标角色在每台 infra 节点上生成目标文件/infra/targets/node/ip.ymltasks/main.yml内容如下# 10.10.10.11 # node, haproxy, vector - labels: { ip: 10.10.10.11 , ins: pg-test-1 , cls: pg-test } targets: - 10.10.10.11:9100 # node_exporter - 10.10.10.11:9101 # haproxy_exporter - 10.10.10.11:9598 # vector文件权限为0640属主为victoria、属组为infra。标签中的ins取自nodenamecls取自node_cluster缺省回退为nodes。注意 targets 列表是按启用状态动态生成的若node_exporter_enabled、haproxy_enabled、vector_enabled均为 false则 targets 为空数组每个启用的组件对应一个端口条目。当节点启用 VIP 时还会额外生成一个 keepalived 目标tasks/main.yml# keepalived - labels: { ip: 10.10.10.11 , ins: pg-test-1 , cls: pg-test, vip: 10.10.10.99 } targets: [ 10.10.10.11:9650 ]这些目标文件会被 Victoria Metrics 的 file_sd 机制自动发现实现注册即采集。Ping 目标角色同样为节点生成 ICMP 探测目标/infra/targets/ping/ip.ymltasks/main.yml# 10.10.10.11 - labels: { ip: 10.10.10.11 , ins: pg-test-1 , cls: pg-test } targets: [ 10.10.10.11 ]启用 VIP 时还会为 VIP 地址生成独立的 ping 目标/infra/targets/ping/vip---ip.yml并打上job: node-vip标签用于监控 VIP 的漂移可达性tasks/main.yml。HAProxy 反向代理注册haproxy_register任务将本机 HAProxy 反向代理入口注册到所有 infra 节点的 Nginxtasks/main.yml在每台 infra 节点创建/etc/nginx/conf.d/haproxy/目录写入 upstream 配置upstream-{{ nodename }}.confupstream haproxy-{{ nodename }} { server {{ inventory_hostname }}:{{ haproxy_exporter_port }} max_fails0; }写入 location 配置location-{{ nodename }}.conflocation ^~/haproxy/{{ nodename }}/ { proxy_pass http://haproxy-{{ nodename }}; proxy_connect_timeout 1; }最后重载 Nginx 生效。Nginx 在多 meta 节点上天然幂等因此该任务对所有 infra 节点循环执行。日志采集架构与字段语义Vector 从 journald 采集日志并转发至 Victoria Logs整体链路如下┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ journald │ ──► │ Vector │ ──► │ Victoria Logs │ │ (syslog) │ │ (agent) │ │ (infra nodes) │ └─────────────┘ └─────────────┘ └─────────────────┘日志源与字段规整的核心实现在模板 templates/node.yaml 中sources: syslog_raw: type: journald current_boot_only: true since_now: false transforms: syslog_logs: type: remap inputs: [syslog_raw] source: | unit replace(to_string(._SYSTEMD_UNIT) ?? , .service, ) level to_syslog_level(to_int(.PRIORITY) ?? 6) ?? info . { _time: format_timestamp(.timestamp, %Y-%m-%dT%H:%M:%S%.fZ) ?? , message: .message, app: .SYSLOG_IDENTIFIER || ._COMM || unknown, unit: unit, pid: to_string(._PID) ?? , level: level, p: .PRIORITY, ip: {{ inventory_hostname }}, ins: {{ nodename }}, cls: {{ node_cluster }}, job: syslog }这个 remap 变换将 journald 原始字段统一规整为面向查询的日志字段其中unit去掉.service后缀、level由 PRIORITY 数值换算为 syslog 文本级别info/warn/err 等ip、ins、cls由 Ansible 在渲染时注入节点身份job固定为syslog。最终写入 Victoria Logs 的字段字段说明_timeRFC3339 格式时间戳message日志消息内容app应用标识SYSLOG_IDENTIFIERunitsystemd 单元名去掉 .service 后缀pid进程 IDlevelsyslog 级别info、warn、err 等ip节点 IP 地址ins节点实例名nodenamecls节点集群名node_clusterjob日志任务标识syslog这些字段与 Victoria Logs 的流语义VL-Stream-Fields: job,ins,ip配合天然形成按节点、实例、任务组织的日志流便于在 Grafana 的日志面板中按{jobsyslog, inspg-test-1}这类流式选择器检索。运维建议单独重跑某段任务利用 tag 粒度如./node.yml -l ip -t node_exporter_launch只重启采集器-t node_register只重新生成抓取目标清理日志重采设置vector_clean: true会停止 Vector、清空/data/vector与/etc/vector适合需要从零采集的场景仅采指标不转发日志将vector_log_endpoint: []置空即可Vector 仍会以 9598 端口暴露自身指标显式指定日志后端在vector_log_endpoint中直接写http://vlogs-host:9428/insert/jsonline可绕过 infra 自动发现适用于日志后端与监控节点分离的部署。延伸阅读node 角色节点基础环境初始化是 node_monitor 的前置依赖node_remove 角色节点监控组件的反向卸载infra 角色Victoria Metrics、Victoria Logs、Nginx 等基础设施栈的搭建其中vlogs_enabled、vlogs_port等变量直接决定 Vector 自动发现的日志后端node.yml完整节点初始化 Playbook。赞分享数据库运维云原生高可用监控【免费下载链接】pigstyEnterprise-Grade OSS PostgreSQL Distribution with HA, PITR, IaC, Monitor, 12 kernel forks and 575 PG extensions. Best-of-breed products integrated as a platform. Self-host Postgres like a Pro!项目地址https://gitcode.com/GitHub_Trending/pi/pigsty点击查看免费下载相关推荐Prometheus Node Exporter中NFSd指标解析错误问题分析Prometheus Node Exporter中NFSd指标解析错误问题分析 问题背景 在使用Prometheus Node Exporter监控系统时用户可观测性指标监控运维突破NVMe监控瓶颈Node Exporter固态盘性能指标采集实战指南突破NVMe监控瓶颈Node Exporter固态盘性能指标采集实战指南 你是否遇到过服务器存储性能突然下降却找不到根源还在依赖传统工具监控NVMe固态盘可观测性指标监控运维CANN/asc-devkit WaitGetTensorC接口WaitGetTensorCa nameZH CN_TOPIC_0000001918894089 /a 产品支持情况a namesection1人工智能深度学习算子库CANNAscend上一篇3大颠覆式技术重构视频捕获从原理到落地的全维度解析下一篇factory_bot 显式关联定义Explicit Definition指南association 方法用法、属性覆盖与源码原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表