所有节点统一说同一种监控语言:EIP-2159的指标命名表 图 1
所有节点统一说同一种监控语言:EIP-2159的指标命名表 · 图 1

运行过以太坊节点的人都有这种体验:节点健康不健康,取决于你盯的指标叫什么名字。同是链高度,这个客户端叫chain_height,那个客户端前缀都不同;搭一个覆盖多客户端的监控面板,查询语句要为每家写一遍。EIP-2159在2019年7月提出给这些指标定一份普通话词表,提案状态是Final,作者Adrian Sutton。它不改共识、不改接口行为,只规定:如果你家节点暴露监控数据,这几个名字请这么叫。

词表只有四个指标,且各有对位

按规范,统一命名的指标以ethereum_为前缀:ethereum_blockchain_height是当前规范链高度,对应JSON-RPC的eth_blockNumber;ethereum_best_known_block_number是节点已知的最高块,对应eth_syncing里的highestBlock字段、未同步时取当前高度;ethereum_peer_count是已连接的对等节点数,对应net_peerCount;ethereum_peer_limit是允许接入的上限,RPC没有对应字段。指标类型统一按Gauge处理——都是瞬时值。规范同时划了红线:客户端可以加自己的私有指标,但不得占用ethereum_前缀,防止未来标准命名被方言抢注。

为什么前缀如此重要

Prometheus世界的惯例是指标名即语义合同:抓取方写查询,写的是名字不是含义。当四个主流客户端各有方言时,一个告警规则要写成四套,跨网络比较节点健康要做命名映射;而一旦某个名字被某家客户端以别的含义用过,改名的兼容代价比统一更难。2159选择的最小可行方案恰好对症:只统一最核心、语义最无歧义的四个量,把扩展空间留给后续规范(信标链客户端的指标规范即属另一套更细的体系)。提案自己也承认兼容风险——已有客户端用别的名字发布过这些指标,改名会打断现成的面板和告警,所以允许过渡期双发新旧两套名字。

监控指标为什么值得写进EIP

这个选题常被新手疑惑:名字而已,需要走提案流程吗?答案藏在故障史里。节点运维的很多真实事故——同步卡死数日无人知、对等连接数长期贴零、高度落后于全网却告警沉默——根因常常不是节点坏了,而是监控本身坏了:抓错了字段、映射错了名字、告警绑在一个已被改名的指标上永远沉默。给指标定名等于给监控合同上公证。这也是EIP分类学的一个注脚:并非只有改状态才能提案,接口标准、命名规范、运维合同都在这条Tracks里,Final之后各客户端在后续版本里陆续切换,一次安静的标准化。

一条告警规则方言与普通话对照

设想你运维一个混合了四种客户端的验证者节点池,要搭一条高度落后告警。方言世界里,这条规则要写四遍:每个客户端的链高度指标名不同、抓取端口不同、有的连标签结构都不同,仪表盘作者被迫维护一张客户端到指标名的映射表,这张表随着版本发布不断腐烂——改名、加前缀、拆分指标都是兼容性事件。普通话世界里,一条ethereum_blockchain_height查询覆盖全部客户端,落后的判定只需拿它与全网参考高度比较。规范允许的双发过渡期正是为了让映射表有一代版本的生命周期而不是永远背着。运维界有句老话:故障不可怕,可怕的是同一故障在不同设备上叫不同名字——四个统一指标就是冲着这句话写的。

快速问答

问:普通用户要关心这些指标吗? 答:不需要;它们面向跑节点和跑验证者的运维者。 问:四个指标之外怎么区分客户端? 答:各家继续用自己的前缀,恰好保证私有指标不互相踩名。 问:这算硬分叉吗? 答:完全不算,规范明确写着不影响共识。

风险提示:本文描述运维标准,不构成任何投资建议。指标语义以EIP原文与客户端文档为准。