Tron节点监控脚本使用说明

文章目录

  • 一、配置
  • 二、脚本编写
    • 2.1 Python脚本--监控节点是否正在同步
      • 2.1.1 pyton脚本脚本示例
      • 2.1.2 使用说明
      • 2.2.3 脚本监控内容说明
    • 2.2 Shell脚本--综合情况监控
      • 2.2.1 shell脚本示例
      • 2.2.2 使用说明
      • 2.2.3 脚本监控内容说明

最近搭建了TRON节点,为了防止节点在生产环境使用过程中,出现问题,所以做了一系列的监控措施。

本说明文档介绍了如何使用Shell脚本和Python脚本来监控Tron节点的状态,并在节点不可用或不同步时通过Telegram发送报警消息。此外,脚本还监控系统资源(CPU、内存和磁盘)的使用情况,并在检测到高使用率时发送报警消息。

一、配置

无论是Shell脚本还是Python脚本,首先需要进行一些配置:

  • 本地节点URL:本地Tron节点的API URL。
  • 公共API URL:公共Tron节点的API URL,用于比较区块高度。
  • Telegram Token:Telegram Bot的API令牌。
  • Chat ID:接收报警消息的Telegram聊天ID。
  • 同步阈值:允许的最大区块高度差,超过该值则认为节点不同步。

二、脚本编写

2.1 Python脚本–监控节点是否正在同步

2.1.1 pyton脚本脚本示例

import requests# 配置
NODE_URL = "http://localhost:8090/wallet/getnowblock"
PUBLIC_API_URL = "https://api.trongrid.io/wallet/getnowblock"
TELEGRAM_TOKEN = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
CHAT_ID = "your_chat_id"
SYNC_THRESHOLD = 5  # 允许的最大区块高度差# 获取区块高度
def get_block_height(url):try:response = requests.post(url)response.raise_for_status()data = response.json()return data['block_header']['raw_data']['number']except Exception as e:print(f"Error fetching data from {url}: {e}")return None# 发送报警消息到Telegram
def send_telegram_alert(message):url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"payload = {'chat_id': CHAT_ID,'text': message}try:response = requests.post(url, json=payload)response.raise_for_status()print("Alert sent successfully")except requests.exceptions.RequestException as e:print(f"Error sending alert: {e}")# 检查本地节点的区块高度
node_height = get_block_height(NODE_URL)
if node_height is None:message = "Error: Unable to retrieve block height from local Tron node."send_telegram_alert(message)print(message)exit(1)# 检查官方节点的区块高度
public_api_height = get_block_height(PUBLIC_API_URL)
if public_api_height is None:message = "Error: Unable to retrieve block height from TronGrid API."send_telegram_alert(message)print(message)exit(1)# 比较区块高度
if (public_api_height - node_height) > SYNC_THRESHOLD:message = (f"Warning: Tron node is out of sync.\n"f"Local node height: {node_height}\n"f"Public API height: {public_api_height}")send_telegram_alert(message)print(message)
else:print(f"Tron node is in sync. Local node height: {node_height}, Public API height: {public_api_height}")

2.1.2 使用说明

  1. 安装依赖:

确保已安装requests库,可以使用以下命令安装:

pip install requests
  1. 保存脚本:
    将脚本保存为check_tron_node.py。

  2. 运行脚本:
    手动运行脚本测试脚本是否可用

python3 check_tron_node.py
  1. 设置定时任务:
    使用crontab设置定时任务,每5分钟检查一次:
crontab -e
*/5 * * * * /usr/bin/python /data/scripts/check_tron_node.py

2.2.3 脚本监控内容说明

  1. 节点可用性

使用requests库发送POST请求到本地节点,如果请求失败,则发送报警消息。

  1. 区块高度同步
    获取本地节点和公共节点的区块高度,比较高度差是否超过阈值。如果超过阈值,则发送报警消息。

2.2 Shell脚本–综合情况监控

2.2.1 shell脚本示例

#!/bin/bash# 配置部分
NODE_URL="http://localhost:8090/wallet/getnowblock"
PUBLIC_API_URL="https://api.trongrid.io/wallet/getnowblock"
TELEGRAM_TOKEN="123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
CHAT_ID="your_chat_id"
SYNC_THRESHOLD=5  # 允许的最大区块高度差# 获取区块高度
get_block_height() {curl -s -X POST $1 | jq -r '.block_header.raw_data.number'
}# 发送报警消息到Telegram
send_telegram_alert() {curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" -d chat_id=$CHAT_ID -d text="$1"
}# 检测节点可用性
response=$(curl -s -o /dev/null -w "%{http_code}" -X POST $NODE_URL)
if [ "$response" -ne 200 ]; thenmessage="Warning: Tron node is not reachable or not responding. HTTP status code: $response"send_telegram_alert "$message"echo $messageexit 1
fi# 检查区块高度同步
node_height=$(get_block_height $NODE_URL)
public_height=$(get_block_height $PUBLIC_API_URL)
if [ -z "$node_height" ] || [ -z "$public_height" ]; thenmessage="Error: Unable to retrieve block heights. Node height: $node_height, Public API height: $public_height"send_telegram_alert "$message"echo $messageexit 1
fiif (( public_height - node_height > SYNC_THRESHOLD )); thenmessage="Warning: Tron node is out of sync. Local node height: $node_height, Public API height: $public_height"send_telegram_alert "$message"echo $message
elseecho "Tron node is in sync. Local node height: $node_height, Public API height: $public_height"
fi# 监控系统资源使用情况
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
mem_usage=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
disk_usage=$(df -h | grep '/$' | awk '{print $5}' | sed 's/%//g')if (( $(echo "$cpu_usage > 85" | bc -l) )); thenmessage="Warning: High CPU usage detected: $cpu_usage%"send_telegram_alert "$message"echo $message
fiif (( $(echo "$mem_usage > 85" | bc -l) )); thenmessage="Warning: High Memory usage detected: $mem_usage%"send_telegram_alert "$message"echo $message
fiif (( disk_usage > 85 )); thenmessage="Warning: High Disk usage detected: $disk_usage%"send_telegram_alert "$message"echo $message
fi

2.2.2 使用说明

  1. 安装依赖:

需要jq工具来解析JSON数据,可以使用以下命令安装:

apt-get install jq
  1. 保存脚本:

将脚本保存为check_tron_node.sh,并赋予执行权限:

chmod +x check_tron_node.sh
  1. 运行脚本:

手动运行脚本,检测shell脚本是否可用

./check_tron_node.sh
  1. 设置定时任务:

使用crontab设置定时任务,每5分钟检查一次:

crontab -e
*/5 * * * * /opt/scripts/check_tron_node.sh

2.2.3 脚本监控内容说明

  1. 节点可用性
    使用curl检查本地节点的HTTP响应状态码,如果状态码不是200,则发送报警消息。

  2. 区块高度同步
    获取本地节点和公共节点的区块高度,比较高度差是否超过阈值。如果超过阈值,则发送报警消息。

  3. 系统资源使用情况(仅Shell脚本)
    CPU使用率:通过top命令获取当前CPU使用率,如果使用率超过85%,则发送报警消息。
    内存使用率:通过free命令获取当前内存使用率,如果使用率超过85%,则发送报警消息。
    磁盘使用率:通过df命令获取当前磁盘使用率,如果使用率超过85%,则发送报警消息。
    通过这些监控内容,您可以确保Tron节点的稳定运行,并及时收到任何潜在问题的报警通知。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mixiy(米思齐)安装

Mixiy(米思齐)安装 官网地址:爱上米思齐 打开官网,选择下图的软件进行下载 复制提取码,点击链接跳转到网盘进行下载,选择(RC4完整版) 下载完成后,解压到合适的位置,进入文件夹,双击Mixly.exe即…

Docker 部署Jenkins

1、运行镜像 docker run --namejenkins \--restartalways \--privilegedtrue \-u root \-p 8080:8080 \-p 50000:50000 \-v /home/docker/jenkins/jenkins_home:/var/jenkins_home \-v /usr/bin/docker:/usr/bin/docker \-v /var/run/docker.sock:/var/run/docker.sock \-e TZ…

【Crypto】MD5

文章目录 MD5解题感悟 MD5 提示的很明显MD5 小小flag,拿下! 解题感悟 没啥感悟…

Java输入与输出详解

Java输入和输出 前言一、Java打印Hello World二、输出到控制台基本语法代码示例格式化字符串 三、从键盘输入读入一个字符正确写法 使用 Scanner 读取字符串/整数/浮点数使用 Scanner 循环读取 N 个数字 前言 推荐一个网站给想要了解或者学习人工智能知识的读者,这…

使用 Java 和 MyBatis 实现动态排序的多表查询

相关 java实现一个根据字段和排序方式进行排序 java实现自定义排序 自定义动态排序 前言 在Web开发中,前端通常会传递一些参数来决定数据的排序方式,例如排序字段和排序方向。本文将展示如何在 Java 项目中结合 MyBatis 实现动态排序,尤其…

MySQL-性能分析

1、数据库服务器的优化步骤 2、查看系统性能参数 可以使用show status语句查询一些MySQL数据库服务器的性能参数 执行频率语法格式:show [ global | session ] status like 参数 ;常用性能参数如下所示 参数名说明connection连接MySQL服务器的次数upti…

Autodesk 3ds Max下载,3ds MAX 2024三维建模渲染软件安装包下载安装

3ds MAX中文版,其强大的功能和灵活的操作为广大用户提供了无限的创意空间,使得高质量动画、最新游戏、设计效果等领域的制作需求得以完美满足。 ​ 作为一款三维建模软件,3ds MAX中文版具备极高的建模精度和渲染质量。它支持多种建模方式&am…

【Fiddler抓包工具】第四节.断点设置和弱网测试

文章目录 前言一、断点设置 1.1 全局断点 1.2 局部断点 1.3 打断点的几种常用命令 1.4 篡改响应报文二、弱网测试 2.1 网络限速 2.2 精准限速总结 前言 一、断点设置 1.1 全局断点 特点: 中断Fiddler捕获的所有请求,包括…

记录一次prometheus因时区不同导致的无法获取数据问题

一、故障出现原因 prometheus机器压力过大,内存耗尽,负载飙高,导致无法登录; 于是从公有云web界面进行重启,重启后内存还是不足,负载很快升高; 对机器进行配置变更,由4C8G升级为4…

在链游中,智能合约如何被用于实现游戏内的各种功能

随着区块链技术的快速发展,链游(Blockchain Games)作为区块链技术的重要应用领域之一,正逐渐展现出其独特的魅力和优势。其中,智能合约作为链游的核心技术之一,对于实现游戏内的各种功能起到了至关重要的作…

【C++初阶】—— 类和对象 (下)

📝个人主页🌹:EterNity_TiMe_ ⏩收录专栏⏪:C “ 登神长阶 ” 🌹🌹期待您的关注 🌹🌹 类和对象 1. 运算符重载运算符重载赋值运算符重载前置和后置重载 2. 成员函数的补充3. 初始化列…

Java的函数式接口和 Lambda 表达式

在 Java 8 中,可以通过使用函数式接口和 Lambda 表达式来实现类似 JavaScript 中将函数作为参数传递的功能。 以下是一个简单的示例,演示如何在 Java 中使用函数式接口将函数作为参数传递: 定义一个函数式接口(函数式接口是只有…

CentOS上升级glibc2.17至glibc2.31

glibc是Linux系统中的重要组件之一。在CentOS中,glibc通常是作为系统的默认C标准库使用的,因为它是许多软件的基础库。在CentOS中,glibc的版本通常与CentOS版本一起发布。因为CentOS通常会优先选择稳定性而不是最新性,所以CentOS使…

Vue项目如何进行XSS防护

前言 在目前主推网络安全的情况下,很多开发项目都需要在上线前进行渗透测试,当符合渗透测试标准及没有安全漏洞即可正常上线,当前还会有代码审计的,这个另当别论。 如何对XSS进行防护 在很多的富文本编辑器项目中,x…

leecode热题100---994:腐烂的橘子

题目: 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回…

C++之第九课

课程列表 今天&#xff0c;我们要学习一种结构&#xff1a;循环结构。 循环的方法有3种。 今天先将第1种for学了&#xff1a; int a;//循环变量 int b; for(a1;a<10;a){//像if那样“打包”cout<<a<<" ";b; } 当然&#xff0c;也可以这样写&#…

【MySQL精通之路】InnoDB(5)-内存结构

总目录&#xff1a; 【MySQL精通之路】InnoDB存储引擎-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】InnoDB(4)-架构图-CSDN博客 目录 ​编辑 1 缓存池&#xff08;Buffer Pool&#xff09; 1.1 缓存池LRU算法 1.2 缓存区配置 1.3 使用InnoDB标准监视器监视缓存池 …

SSRF服务端请求伪造漏洞原理与修复及靶场实践

SSRF服务端请求伪造漏洞原理与修复及靶场实践 SSRF漏洞原理与检测 SSRF&#xff08;Server-Side Request Forgery&#xff0c;服务器端请求伪造&#xff09;漏洞是一种因为服务端提供了远程访问服务&#xff0c;而并未对请求目标进行限制或限制不严格而引起的安全漏洞&#x…

Java Apache Jexl规则引擎初体验

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、模板引擎的选择&#xff1f;二、什么是JEXL规则引擎&#xff1f;优点缺点 三、其他规则引擎四、示例1.引入依赖2.方法示例3、代码解释4、效果![import java…

VMware虚拟机Ubuntu 22.04.4 LTS系统 NAT网络设置异常解决

现象&#xff1a; 近日&#xff0c;一直工作正常的虚拟机莫名出现网络无法连接的情况。 参考网上的各种教程&#xff0c;终于解决问题。 如遇到类似情况的&#xff0c;可以尝试这个方式&#xff0c;看能否解决问题。 网络连接&#xff1a;采用NAT模式 异常&#xff1a;网络图标…