新闻开发人员企业区块链解释事件和会议新闻时事通讯
订阅我们的新闻.
电子邮件地址
我们尊重您的隐私
主页博客开发人员
如何监视您的Eth2验证程序并分析您的P&大号
由Coogan Brennan于2021年1月15日发布于2021年1月15日
如果您不熟悉如何运行自己的Eth2验证程序,请务必检查第1部分和第2部分。您应该检查Ben Edgington的 Eth2.News新闻通讯f或即将发布的路线图上的重要更新,错误修复和新闻。如果您需要更多有关关键术语,阶段和ConsenSys的Eth2产品的背景知识,我们的Eth2知识库将非常有用。.
介绍
自从以太坊2.0信标链的创始以来已经过去了一个半月。已经有2,515,170个ETH被抵押(按目前的市场价格约为29亿美元),拥有61,561个唯一的验证器,还有16,687个正在排队。尽管对放样有极大的兴趣,但实际上这是一个半月的平稳期:没有重大中断,只有 一些大刀阔斧 和 验证者大部分时间都参与第98个百分位. 现在是喘口气来总结我们到目前为止所做的事情的好时机.
在此博客文章中,我将介绍对您的Eth2验证程序的监视和财务分析。我概述了如何访问Teku指标,设置Beaconcha.in通知以及如何查询节点。我也分享我当前的P&l故障。在本系列的最后一部分中,我将讨论如何安全地(并希望)成功地将Teku节点从一台服务器迁移到另一台服务器。.
监控方式
在本节中,我将逐步介绍如何读取验证程序节点的指标。运行以太坊2.0验证程序正在运行分布式系统的基础结构。维护基础架构的关键部分是能够看到正在发生的事情。幸运的是,Teku附带了一套出色的监视工具,这些监视工具在我们的启动命令中带有“ –metrics-enabled”标志,如下所示:
ExecStart = / home / ubuntu / teku-20.11.1 / bin / teku –network = mainnet<强的> 强的> <强的>–eth1-endpoint = INFURA_ETH1_HTTP_ENDPOINT_GOES_HERE强> <强的>–验证程序密钥= / home / ubuntu / validator_key_info / KEYSTORE-M_123456_789_ABCD.json:/home/ubuntu/validator_key_info/validator_keys/KEYSTORE-M_123456_789_ABCD.txt强大> –rest-api-enabled = true –rest-api-docs-enabled = true –metrics-enabled –validators-keystore-locking-enabled = false <强的>–数据库路径= / var / lib / tekustrong>代码语言:HTML,XML(xml)
在读取数据之前,我们必须遵循一些步骤.
对于那些没有运行Teku客户端的用户:首先,为什么?其次,您可以在以下位置查看所有客户端提供的最低指标 以太坊2.0规格在这里.
安装Prometheus
首先,我们需要安装 普罗米修斯, 一个开源的监视程序,以及 格拉法纳, 开源分析和交互式可视化Web应用程序。 Prometheus提取数据并用Grafana显示.
在Ubuntu命令行上,下载最新的稳定版Prometheus:
卷曲-JLO <a href ="https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gz">https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gza>代码语言:HTML,XML(xml)
像这样解压缩文件:
焦油-zxvf <a href ="https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gz">prometheus-2.23.0.linux-amd64.tar.gza>代码语言:HTML,XML(xml)
移动二进制文件,以便可从命令行使用它:
CD Prometheus-2.23.0代码语言:CSS(css)sudo mv prometheus promtool / usr / local / bin /
检查并确保已正确安装:
prometheus –version promtool-版本
创建一个普罗米修斯YML配置文件:
sudo nano prometheus.yml代码语言:CSS(css)
将这些参数粘贴到配置文件中:
全局:scrape_interval:15s scrape_configs:-job_name: "普罗米修斯" static_configs:-目标:["本地主机:9090"]-job_name: "德库开发" scrape_timeout:10秒metrics_path:/ metrics方案:http static_configs:-目标:["本地主机:8008"]代码语言:PHP(php)
这指示Prometheus每10秒钟在8008端口上轮询您的Teku节点。按Command-X,然后按Y保存缓冲区
现在,让我们创建一个目录以放置我们的Prometheus配置文件:
sudo mkdir / etc / prometheus sudo mv prometheus.yml /etc/prometheus/prometheus.yml
我们将为其他Prometheus文件创建另一个目录,并将console和console_libraries模块移至/ etc / prometheus
sudo mkdir / var / lib / prometheus sudo mv consoles / console_libraries / / etc / prometheus /代码语言:JavaScript(javascript)
我们将创建一个Prometheus用户来运行系统服务,就像我们对Teku(在此处阅读更多有关基于角色的用户访问如何是服务器安全性的最佳实践的更多信息)并授予其访问适当文件的权限:
sudo useradd –no-create-home –shell / bin / false prometheus sudo chown -R prometheus:prometheus / var / lib / prometheus sudo chown -R prometheus:prometheus / etc / prometheus sudo chown -R prometheus:prometheus / usr / local / bin /代码语言:JavaScript(javascript)
最后,创建一个可以在后台运行的systemd服务,并在失败时重新启动:
须藤纳米/etc/systemd/system/prometheus.service
在此文件(应该为空)中,我们将放入一系列命令,以在启动服务时使systemd执行。将以下内容复制到文本编辑器中:
[单位]说明= Prometheus需求= network-online.target之后= network-online.target [服务]类型=简单用户= prometheus组= prometheus Restart =始终RestartSec = 5 ExecStart = / usr / local / bin / prometheus \- -config.file = / etc / prometheus / prometheus.yml \ –storage.tsdb.path = / var / lib / prometheus \ –web.console.templates = / etc / prometheus / consoles—web.console库= / etc / prometheus / console_libraries \ –web.listen-address = 0.0.0.0:9090 \ [安装] WantedBy =多用户。目标代码语言:JavaScript(javascript)
输入command-X,然后输入“ Y”以保存您的更改
我们必须重新启动systemctl才能对其进行更新:
sudo systemctl守护进程重新加载
启动服务:
须藤systemctl启动普罗米修斯
检查以确保其运行正常:
须藤systemctl状态普罗米修斯
如果您看到任何错误,请通过运行获取更多详细信息:
sudo journalctl -f -u prometheus.service代码语言:CSS(css)
您可以通过运行以下命令来停止Prometheus服务:
须藤systemctl停止普罗米修斯
安装Grafana
我们将使用Linux的APT软件包管理器来安装Grafana。这将为我们节省大量工作,并为我们提供所需的东西. 我们将按照Grafana安装页面上的步骤进行操作:
sudo apt-get安装-y apt-transport-https sudo apt-get安装-y软件属性-常见wget wget -q -O-https://packages.grafana.com/gpg.key | sudo apt键添加-代码语言:JavaScript(javascript)
我们添加稳定的Grafana存储库以进行更新:
回声 "deb https://packages.grafana.com/oss/deb稳定主程序" | sudo tee -a /etc/apt/sources.list.d/grafana.list代码语言:PHP(php)
然后我们运行APT:
sudo apt-get update sudo apt-get install grafana代码语言:JavaScript(javascript)
该软件包为我们设置了systemd服务(包括用户grafana),因此我们只需要运行:
sudo服务grafana服务器启动sudo服务grafana服务器状态sudo update-rc.d grafana服务器默认值代码语言:CSS(css)
SSH隧道
Grafana创建了一个非常漂亮的仪表板,我们可以在其中查看指标。该仪表板通常在浏览器中可用,但是由于我们正在运行Ubuntu 20.04的服务器版本,因此都是命令行。那么我们如何进入Grafana?
输入SSH隧道。与从命令行访问AWS时使用的协议相同,但是我们将对其进行设置,因此我们在本地计算机上创建一个镜像端口,该镜像端口连接到AWS实例上的特定端口。这样,当我们在本地调用端口时,例如通过打开浏览器 http://本地主机:3000, 我们实际上正在查看我们的AWS实例上的3000端口.
要正确执行此操作,您将需要用于AWS的SSH密钥和AWS IP信息。您还需要知道要连接到哪个端口。在这种情况下,我们知道Grafana实例在端口3000上运行,因此命令行指令将具有以下通用结构:
ssh -N -L 3000:localhost:3000 -i "PATH_TO_AWS_KEYPAIR.pem"ubuntu@INSTANCE_IDENTIFIER.compute-ZONE.amazonaws.com代码语言:CSS(css)
这使我们可以转到 http://本地主机:3000 在我们的本地计算机上,并查看我们的Grafana仪表板。但是我们还没有,所以我们需要做以下事情:
将Prometheus添加为数据源:
转到“添加新数据源”
点击下拉菜单中的“ Prometheus”
点击“保存并测试”
点击左侧菜单上的+,然后选择“导入信息中心”
添加Teku Grafana ID: 13457
而且,八达冰!我们有自己的仪表板,可以从自己舒适的浏览器中看到:
Beaconcha.in应用
Grafana仪表板非常出色,Prometheus为我们存储了信息。但是,还有其他选项可以检查验证器状态.
我一直在用 Beaconcha.in仪表板Android移动应用程序. 这是一个简单的界面,很好,因为它不是我的主要监视服务。它使我可以快速浏览手机以检查验证器状态,并在验证器出现问题时提供通知.
您输入要查看的验证者地址,差不多就可以了!同样,不是重型监控(这是Grafana Teku feed所提供的)。但这可以用作辅助服务,并且二进制文件“验证程序是否正常运行”:
查询节点
“监视”我们的以太坊验证器客户端的另一种方法是查询它!就像以太坊1.0客户端一样,我们的以太坊验证器客户端正在存储和维护世界状态。与以太坊1.0相比,它要小得多,但仍是验证者客户端存储和维护的链上数据.
这与Prometheus / Grafana工作流程消耗的数据相同。通过查询节点本身,我们只是在接近金属(实际上是虚拟的)。以下是可用数据的示例(完整清单在这里):
- 信标链信息(生成块,块头和根等)
- 验证者信息(验证者列表,验证者余额,验证者职责等)
- 节点信息(总体运行状况,对等方列表等)
卷曲
第一种方法是从命令行。当启动Teku时,我们添加了标志–rest-api-enabled = true。这会在默认端口5051(您可以使用标志–rest-api-port =指定其他端口)处打开API端点。您可以通过运行sudo lsof -i -P -n |双重检查端口是否打开。 grep LISTEN.
确认Teku打开了端口5051后,我们将使用 卷曲 发送 休息 在以下位置调用Teku API端点 http://本地主机:5051. 例如,这是我们检查性能最高的验证器余额的方法(根据Beaconcha.in):
curl -X GET "http:// localhost:5051 / eth / v1 / beacon / states / head / validator_balances id = 0x8538bbc2bdd5310bcc71b1461d48704e36dacd106fa19bb15c918e69adbcc360e5bf98ebc3f558eb4daefe6d6c26dda5"代码语言:PHP(php)
这是我在2021年1月中旬收到的回复(在Gwei):
{"数据":[{"指数":"4966","平衡":"32607646851"}]}代码语言:JSON /带有注释的JSON(json)
试用以下任何方法 Teku API文档页面 使用此页面底部的格式:
curl -X [REST_METHOD]“ API_CALL_IN_QUOTES”代码语言:CSS(css)
招摇UI
在启动命令中添加标志–rest-api-docs-enabled = true时,Teku提供了一个用于API调用的基本图形用户界面。它建立在 swagger-ui 并且默认情况下它位于端口5051上,我们可以使用SSH隧道访问它。从上面执行相同的SSH隧道步骤,但将5051作为端口:
ssh -N -L 5051:localhost:5051 -i "PATH_TO_AWS_KEYPAIR.pem" ubuntu@INSTANCE_IDENTIFIER.compute-ZONE.amazonaws.com代码语言:CSS(css)
从我们计算机上的浏览器中,然后我们可以导航到 http:// localhost:5051 / swagger-ui, 在我的机器上看起来像这样:
世界状态和共识是所有公共区块链中都涌现的东西。这意味着所有存储和更新信息的验证者都以太坊2.0达成共识。有点书呆子,但是要查看您的本地状态是凝结到一个更大结构的单个窗格中。分形的一个子集不断更新并发展为新事物。试试吧!
财务分析
在我的第一篇文章中,我概述了所需的基本材料要求:
- 三年承诺投入32 ETH并维护验证者节点
- 32 ETH(加上 <1 ETH的汽油费)
- $ 717.12(一个m5.xlarge实例的三年预留实例价格)+ 120(一年100 GB的存储成本,保守地假设几乎满了存储容量)= 837.12美元,在这一年中支付给了AWS
- MetaMask扩展(免费安装)
- Infura帐户(免费套餐)
AWS的费用是三年的锁定期,但是我稍后提到我还没有准备好这样做。我很高兴我没有!您稍后会明白为什么,但是这是我2020年12月31日的基本费用明细:
AWS每月费用
- 数据传输:$ 8.52
- 服务器:142.85美元
- 储存:$ 72.50
- 总计:$ 223.87
Eth2验证者奖励
- 积木:5
- 证明:〜6,803
- ETH奖励:0.420097728($ 485.83 USD)
正如您可能会看到的那样,对于一个验证者来说,261.96美元的利润并不是很大的利差。有两种选择:这是一个相对稳定的成本,因此我可以再投资32 ETH。更好的选择可能是更改我正在使用的VPS(实际上,我在第一篇文章中曾提到过):
最初,我坚信AWS是最好的虚拟平台,这是我将在本文和下一篇文章中使用的服务。但是,在经历了整个过程之后,我意识到对于单个开发人员而言,AWS可能会过大。 AWS的真正优势似乎在于其动态扩展以满足需求的能力,而这需要付出高昂的成本。对于大型企业级项目而言,这具有经济意义,但单个以太坊2.0当前的客户要求不需要如此严格.
我将继续使用AWS,但也可以选择在Digital Ocean上运行实例,这可能更适合单个开发人员.
我认为通过在Digital Ocean上运行可以获得更多的利润,但仍然不会影响我的验证器性能。一个朋友正在一个较小的VPS上运行一个验证器实例,该实例成本降低了一个数量级,并且我们具有相同的验证器性能.
尝试使用AWS真是太好了,我不后悔拥有这样的能力,以防信标链上出现某些问题。但是,我认为 真的 Eth 2开发人员兑现了可以通过家庭网络和设置进行验证的承诺,这真是太好了!
当前的价格调整也使财务分析变得困难,因为服务器成本固定为美元,但报酬却在波动。长期而言,我非常有信心我的验证者奖励会增加价值。它确实使成本收益变得棘手!
在本系列的最后一部分中,我将讨论如何安全地(希望)成功地将Teku节点从一台服务器迁移到另一台服务器。当然,主要的问题已被削减。似乎已经发生的绝大部分削减是 由于这个问题. 我们将看看情况如何…
开发者以太坊2.0以太坊客户端通讯订阅我们的时事通讯以获取最新的以太坊新闻,企业解决方案,开发人员资源等信息。