Skip to content

Solana 验证器监控最佳实践

确保你的验证器配置了监控至关重要。万一你的验证器出现滞后(落后于网络其他节点),你需要立即响应并修复问题。一个非常有用的监控工具是solana-watchtower

Solana Watchtower

Solana Watchtower是一款极为实用的监控工具,它会定期检查你的验证器健康状况。它能监控你的验证器是否有滞后行为,然后通过你选择的应用程序(如 Slack、Discord、Telegram 或 Twilio)通知你。此外,solana-watchtower还能监控整个集群的健康状态,使你能够意识到任何集群范围内的问题,从而确保你能及时响应并维护网络的稳定运行。

入门

要开始使用 Solana Watchtower,运行命令 solana-watchtower --help。从帮助菜单中,你可以查看可选标志及命令的解释。

以下是一个示例命令,用于监控标识公钥为 2uTk98rqqwENevkPH2AHHzGHXgeGc1h6ku8hQUqWeXZp 的验证器节点:

solana-watchtower --monitor-active-stake --validator-identity \
  2uTk98rqqwENevkPH2AHHzGHXgeGc1h6ku8hQUqWeXZp

该命令将监控你的验证器,但除非你添加了在 solana-watchtower --help 中提到的环境变量,否则你不会收到通知。由于为每种通知服务设置可能不那么直接,下一节将引导你完成在 Telegram 上设置watchtower通知的步骤。

最佳实践

最佳实践是在与你的验证器分开的服务器上运行 solana-watchtower 命令。

如果你将 solana-watchtower 运行在与 solana-validator 进程相同的计算机上,那么在像停电这样的灾难性事件中,你可能无法意识到问题的存在,因为你的 solana-watchtower 进程会在同一时间停止,与你的 solana-validator 进程一起。

此外,虽然在终端中手动设置环境变量并运行 solana-watchtower 进程是测试命令的一种好方法,但从运行操作角度来看并不可靠,因为该进程不会在终端关闭或系统重启期间重新启动。

相反,你可以将 solana-watchtower 命令作为系统进程运行,类似于 solana-validator。在系统进程文件中,你可以指定机器人的环境变量。

设置 Telegram 通知

为了将验证器健康状态通知发送到你的Telegram账户,我们需要完成以下几个步骤:

  1. 创建一个用于发送消息的机器人。这个机器人将通过 Telegram上 的 BotFather 来创建。
  2. 给机器人发送一条消息。
  3. 创建一个 Telegram 群组,该群组将接收 watchtower 的通知。
  4. 在命令行环境中添加环境变量。
  5. 重启solana-watchtower命令。

使用BotFather创建机器人

在 Telegram 中搜索 @BotFather。向 BotFather 发送以下消息:/newbot

现在,你需要为机器人想一个名字。唯一的要求是名字不能包含破折号或空格,并且必须bot结尾。很多名字已经被占用,因此你可能需要尝试几个。一旦找到可用的名字,BotFather会回复你,其中包括与机器人聊天的链接以及机器人的一个令牌。请记下这个令牌,在设置环境变量时会用到。

向机器人发送消息

在 Telegram 中找到该机器人并向它发送如下消息:/start。向机器人发送消息将在之后帮助你找到机器人聊天室ID。

创建 Telegram 群组

在 Telegram 中,点击新消息图标,然后选择创建新群组。找到你新创建的机器人并将其添加到群组中。接下来,为群组起一个你喜欢的名字。

为 Watchtower 设置环境变量

既然你已经设置了机器人,接下来需要为该机器人设置环境变量,以便 watchtower 能够发送通知。

首先,请回顾从**@BotFather**收到的聊天消息。在消息中,有一个用于你机器人的 HTTP API 令牌,格式如下:389178471:MMTKMrnZB4ErUzJmuFIXTKE6DupLSgoa7h4o。你将使用此令牌设置TELEGRAM_BOT_TOKEN环境变量。在计划运行solana-watchtower的终端中,执行以下命令:

export TELEGRAM_BOT_TOKEN=<HTTP API Token>

接下来,你需要群组的chat id,以便solana-watchtower知道应将消息发送到何处。首先,在你创建的聊天群组中向你的机器人发送一条消息,比如 @newvalidatorbot hello

接下来,在你的浏览器中,访问 https://api.telegram.org/bot<HTTP_API令牌>/getUpdates。确保将<HTTP_API令牌>替换为你从**@BotFather**消息中获得的API令牌。同时,请确保在 URL 中的 API 令牌前包含单词bot。在浏览器中发起这个请求。

响应应该是JSON格式的。在JSON中搜索字符串"chat":。该chat对象下的id值就是你的TELEGRAM_CHAT_ID。它会是一个负数,比如:-781559558。请记住要包含负号!如果你在JSON中找不到"chat":,那么你可能需要先将机器人从聊天群组中移除,然后再重新添加一次。

掌握 Telegram chat id 后,导出你计划运行 solana-watchtower 的环境变量:

export TELEGRAM_CHAT_ID=<negative chat id number>

重启 solana-watchtower

一旦设置了环境变量,接下来请重启 solana-watchtower。你应该能看到与验证器相关的输出信息。

为了测试你的Telegram配置是否工作正常,你可以暂时停止验证器,直到其被标记为滞后。一旦验证器处于逾期状态,最多在一分钟后,你应该能在Telegram群组中收到由你的机器人发送的消息。之后再次启动验证器,并确认你能从机器人那里收到另一条消息,这条消息应当显示 all clear