十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Telegraf Bond 输入插件详解:采集 Linux 网卡绑定接口与从属接口指标

Telegraf Bond 输入插件详解:采集 Linux 网卡绑定接口与从属接口指标 Telegraf Bond 输入插件详解采集 Linux 网卡绑定接口与从属接口指标【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegrafLinux 网卡绑定Bonding / Link Aggregation是生产环境保障网络高可用的常用手段而 Telegraf 的bond输入插件自 v1.5.0 起提供类别 system支持全平台专门用于采集绑定接口及其从属接口slave的状态、故障计数与 LACP 链路聚合细节。本文以 plugins/inputs/bond/README.md 为骨架结合 bond.go 与 bond_test.go 的源码实现完整讲解该插件的配置项、三类指标bond、bond_slave、bond_sys的字段语义、源码解析逻辑与实战验证方法帮助你快速监控绑定链路的健康状态。插件概览数据从哪来bond输入插件不依赖额外的外部命令或守护进程直接读取内核通过 procfs/sysfs 暴露的绑定接口状态文件主数据来源/proc/net/bonding/*内核会为每个绑定接口如bond0在该目录下生成一个同名文件内容包含绑定模式Bonding Mode、当前活跃从属接口Currently Active Slave、MII 状态MII Status、每个从属接口的链路故障计数Link Failure Count以及 LACP802.3ad模式下的 churn 计数等附加数据来源/sys/class/net/{bond}/bonding/当开启collect_sys_details时插件会进一步读取mode、slaves与ad_num_ports文件获取端口级聚合细节主要服务于 LACPmode 4绑定。从源码结构看bond.go插件配置结构体Bond仅包含四个可配置字段host_proc、host_sys、collect_sys_details与bond_interfaces并通过 init 函数 注册到 Telegraf 的输入插件注册表中对应导入入口见 plugins/inputs/all/bond.go。工作原理源码级解析流程插件的主流程由Gather方法驱动bond.go可以概括为四步路径装载调用loadPaths()bond.go补齐host_proc与host_sys。优先级为配置文件显式指定的值 环境变量HOST_PROC/HOST_SYS 默认值/proc与/sys具体实现在 internal/env.go。容器化部署场景下通过环境变量或配置项指向宿主机挂载的 procfs/sysfs 路径即可采集宿主机指标。接口枚举调用listInterfaces()bond.go。若配置了bond_interfaces直接使用指定列表否则通过filepath.Glob(hostProc /net/bonding/*)通配出所有绑定接口名。读取 proc 文件逐个读取{host_proc}/net/bonding/{bondName}将内容交给gatherBondInterface解析。可选读取 sys 详情当SysDetails为 true 时调用readSysFiles与gatherSysDetails读取并解析/sys/class/net/{bond}/bonding/下的文件。/proc/net/bonding/文件是键: 值格式但结构复杂、难以用正则统一处理因此gatherBondInterfacebond.go采用逐行扫描 关键行标记块边界的策略以首个Slave Interface:行作为分界点将文件切成绑定主段落bondPart与从属段落slavePartgatherBondPartbond.go解析绑定级别信息遇到Currently Active Slave记录active_slave字段遇到MII Status将up映射为status1、其余映射为status0后即完成绑定指标并返回gatherSlavePartbond.go逐块解析每个从属接口用Slave Interface行记录接口名并累计数量MII Status决定statusLink Failure Count记录failuresLACP 模式下还会读取Actor Churned Count与Partner Churned Count并求和得到total_churned。配置项详解插件完整的推荐配置如下与 sample.conf 一致# Collect bond interface status, slaves statuses and failures count [[inputs.bond]] ## Sets proc directory path ## If not specified, then default is /proc # host_proc /proc ## Sets sys directory path ## If not specified, then default is /sys # host_sys /sys ## By default, telegraf gather stats for all bond interfaces ## Setting interfaces will restrict the stats to the specified ## bond interfaces. # bond_interfaces [bond0] ## Tries to collect additional bond details from /sys/class/net/{bond} ## currently only useful for LACP (mode 4) bonds # collect_sys_details false各配置项说明如下配置项类型默认值作用host_procstring/procproc 文件系统根目录。留空时回退到环境变量HOST_PROC再回退到默认值容器/主机混合场景需按需指定host_sysstring/syssys 文件系统根目录。留空时回退到环境变量HOST_SYS再回退到默认值bond_interfaces[]string空采集全部限制采集的绑定接口列表例如[bond0, bond1]不设置则自动枚举/proc/net/bonding/*下全部接口collect_sys_detailsboolfalse是否从/sys/class/net/{bond}采集附加的绑定细节bond_sys指标目前主要对 LACPmode 4绑定有价值其中host_proc、host_sys与bond_interfaces三个配置项均已在 sample.conf 中给出注释与示例值可直接复制使用。此外插件与其他 Telegraf 插件一样支持全局配置选项如名称覆盖、标签/字段过滤、别名等详见 CONFIGURATION.md。指标详解三个 measurement 的字段语义bond绑定接口整体状态tagsbond绑定接口名fieldsactive_slave当前活跃的从属接口名仅在 active-backup主备模式下有值status接口状态0表示 down1表示 upbond_slave从属接口状态tagsbond绑定接口名、interface网络接口名fieldsfailures该从属接口的链路故障计数status接口状态0表示 down1表示 upcount该绑定下从属接口的数量每个绑定输出一条仅带bondtag 的计数记录actor_churnedLACP 绑定下本端local end链路翻转flap次数partner_churnedLACP 绑定下对端remote end即交换机侧链路翻转次数total_churned所有 churn 事件总数等于actor_churned与partner_churned之和从 gatherSlavePart 的实现可以看到一个值得注意的细节对于 LACPIEEE 802.3ad Dynamic link aggregation模式插件会延迟到读完Partner Churned Count行后才一次性输出该从属接口的完整字段集含 churn 三个字段而普通模式如 active-backup则在读到Link Failure Count行后立即输出failures与status。两种模式下最后都会额外输出一条count记录标记该绑定下的从属接口总数。bond_syssysfs 中的绑定附加细节tagsbond绑定接口名、mode绑定模式取自/sys/class/net/{bond}/bonding/mode的第一个单词如802.3adfieldsslave_count从属接口数量ad_port_count聚合端口数量。从 gatherSysDetails 的实现看当模式为802.3ad时该值取自/sys/class/net/{bond}/bonding/ad_num_ports文件读取失败按 0 处理其他模式下则直接等于从属接口数量。需要强调的是bond_sys指标只有在collect_sys_details true时才会产生且 readSysFiles 中ad_num_ports文件也仅在绑定模式为 802.3ad 时才会被读取这与 README 中目前仅对 LACPmode 4绑定有用的说明一致。实战验证一分钟跑通采集先准备一份最小配置来自 README 的 Example Output 章节[[inputs.bond]] ## Sets proc directory path ## If not specified, then default is /proc host_proc /proc ## By default, telegraf gather stats for all bond interfaces ## Setting interfaces will restrict the stats to the specified ## bond interfaces. bond_interfaces [bond0, bond1]然后使用 Telegraf 的测试模式运行只启用bond插件并输出到标准输出telegraf --config telegraf.conf --input-filter bond --test该命令会在采集一次后立即打印结果并退出非常适合验证配置与字段是否符合预期。一个典型的输出如下时间戳为采集时刻的纳秒级 Unix 时间戳bond,bondbond1,hostlocal active_slaveeth0,status1i 1509704525000000000 bond_slave,bondbond1,interfaceeth0,hostlocal status1i,failures0i 1509704525000000000 bond_slave,hostlocal,bondbond1,interfaceeth1 status1i,failures0i 1509704525000000000 bond_slave,hostlocal,bondbond1 count2i 1509704525000000000 bond,bondbond0,hostisvetlov-mac.local status1i 1509704525000000000 bond_slave,bondbond0,interfaceeth1,hostlocal status1i,failures0i 1509704525000000000 bond_slave,bondbond0,interfaceeth2,hostlocal status1i,failures0i 1509704525000000000 bond_slave,bondbond0,hostlocal count2i 1509704525000000000从输出可以观察到每个绑定接口输出一条bond记录active-backup 模式下带有active_slave字段每个从属接口输出一条bond_slave记录含status与failures每个绑定再输出一条不带interfacetag 的count记录。字段类型方面status、failures、count均为整数active_slave为字符串。源码佐证测试用例如何验证解析逻辑bond_test.go 内置了三段典型的/proc/net/bonding/样例数据分别模拟 active-backup 模式sampleTestAB、双从属均 up 的 LACP 模式sampleTestLACP以及第一从属 up、第二从属 down 的 LACP 模式sampleTestLACPFirstUpSecondDown并针对每种模式断言了bond、bond_slave、bond_sys三类指标的具体字段值例如active-backup 模式bond指标含active_slaveeth2与status1down 的eth3输出failures2, status0LACP 模式eth0输出failures2, status1, actor_churned2, partner_churned0, total_churned2bond_sys在模式802.3ad、slaves 为eth0 eth1、ad_num_ports为2时输出slave_count2, ad_port_count2。这些用例直接印证了上文描述的字段映射关系也是排查字段为何缺失/数值异常时的最佳参考例如 LACP 绑定若看不到 churn 相关字段应检查/proc/net/bonding/*中是否存在Actor Churned Count行若没有bond_sys指标则应确认collect_sys_details已开启且/sys/class/net/{bond}/bonding/下文件可读。使用注意事项LACP 与 churn 字段actor_churned、partner_churned、total_churned仅在 802.3admode 4绑定且内核提供了对应统计时才出现监控面板中应对该字段做可能缺失的处理。bond_sys依赖 sysfs若运行环境没有挂载/sys或路径被隔离需通过host_sys/HOST_SYS指到正确位置否则相关文件读取会报错并被acc.AddError记录不会中断其他接口的采集。容器场景在容器内采集宿主机绑定状态时通常需要将宿主机的/proc与/sys挂载进来并通过host_proc、host_sys或对应环境变量指定挂载路径。单接口读取失败不中断整体从 Gather 的实现可见某个接口文件读取或解析失败时仅通过acc.AddError上报错误并continue处理下一个接口不会导致整个采集周期失败。综上bond输入插件以极低的依赖成本将 Linux 内核暴露的绑定接口状态转化为结构化指标配合status、failures、count以及 LACP 场景下的 churn 计数足以支撑绑定链路的存活告警、故障链路定位与聚合带宽的容量观察。更多插件通用配置与全局选项可参考 CONFIGURATION.md。【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表