我如何教Zabbix监视节点并报告问题

哈Ha!

我目前正在与我的同事们一起进行区块链信使项目。 谁在乎-查看个人资料中的链接或在评论中提问。

区块链开发是一个陌生的新领域,因此有时您必须使用非常非标准的工具。 显微镜和指甲在哪里! 因此,我决定保留此博客,以便从实践中讲述各种有趣的案例。 今天的帖子是关于我如何设置有关节点状态的即时通知,以便在这种情况下我可以快速恢复状态。



我遵循的计划


我自己设定的任务是:每次节点崩溃或停止工作时,我都应立即收到有关它的通知。 但是我们生活在一个进步的时代,习惯于立即接收所有重要信息,对吗?

我决定要完成此任务,我将把Zabbix固定在Slack上(我们有一个有效的项目工具)。 因此,Zabbix将监视该节点,并在Slack的PM中向我发送错误消息。

实施:逐步


步骤1:Zabbix


当然,Zabbix没有针对我们的节点的标准预配置监视工具。 因此,第一个需求是使用键net.tcp.listen[port].确定节点端口的可用性net.tcp.listen[port].

但是只有一个“ but”:碰巧该节点是活动的,它在端口上侦听,但不能正常运行。 在这里,我面临着一个事实,即您需要确定节点性能的主要标志。

Noda应该怎么办? 是的,成长。 增长将是主要迹象。 因此,我决定使用键system.run[command, mode]

连同curl -s http://127.0.0.1:36666/api/blocks/getHeight

结果,我们收到了以下格式的JSON格式字符串

 {"success":true,"nodeTimestamp":XXXXXXX,"height":XXXXXXX} 

jq包(https://stedolan.imtqy.com/jq/)有助于解决JSON解析问题。 通过管道curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height简单结果传输curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height {6666 / api / blocks / getHeight curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height ,而不是期待已久的高度,我们收到了包含有关curl命令信息的响应。



需要删除多余的信息,然后需要一个助手-s ,又名-silent 。 结果,使用Zabbix密钥system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height] system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height]我们将获得所需的节点高度,并且便于监视视图XXXXXXXXX。



还需要触发器来配置计划的警报。 计划是这样的:比较最后一个值和先前的值,以便触发器在增长值小于1时起作用。

{ADAMANT Node Monitoring:system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height].change()}<1

步骤2.从Zabbix到Slack




下一个任务是在Slack中通知触发器。 作为基础,我采用了https://github.com/ericoc/zabbix-slack-alertscript的材料。

说明很清楚,但是使用表情符号区分严重性并不严重。 颜色突出显示要有趣得多。 处理脚本后,将保留以下内容:

  url='********************************' username='Server' to="$1" subject="$2" recoversub='^RECOVER(Y|ED)?$' if [[ "$subject" == 'Warning' ]]; then color='#EBFF00' elif [ "$subject" == 'Not classified' ]; then color='#D8E3FF' elif [ "$subject" == 'Information' ]; then color='#0049FF' elif [ "$subject" == 'Average' ]; then color='#FFC200' elif [ "$subject" == 'High' ]; then color='#FF5500' elif [ "$subject" == 'Disaster' ]; then color='#FF0000' else color='#00FF06' fi message="${subject} \n $3" payload="payload={\"attachments\": [{\"color\": \"${color}\", \"text\": \"${message}\"}]}" curl -m 5 --data-urlencode "${payload}" $url 

结论


从道德上讲几句话,为什么方便的监控如此重要。 您越了解这种情况,您就越会迅速纠正它,后果将越不明显。 正如他们所说,认为增加的时间没有减少。 在Slack中,还有群聊,因此团队可以连接以解决问题并协调行动。 顺便说一下,我们的项目有开源代码,我们非常尊重其他开源项目。 我的实验再次表明开源是好的。

Source: https://habr.com/ru/post/zh-CN440216/


All Articles