smartping开源、高效、便捷的网络质量监控神器

SmartPing

SmartPing为一个各机器(点)间间互PING检测工具,支持互PING,单向PING,绘制拓扑及报警功能。

功能

  • 单向PING,反向Ping绘图
  • 互PING间机器的状态拓扑
  • 自定义延迟、丢包阈值报警

设计思路

本系统设计为无中心化原则,所有的数据均存储自身点中,默认每个Ping目标点的数据循环保留1个月时间,由自身点的数据绘制 出PING包 的状态,由各其他点的数据绘制 进PING包 的状态,从任意一点查询数据均会通过Ajax请求关联点的API接口获取其他点数据组装全部数据,绘制 出Ping曲线图,进Ping曲线图,网络互Ping拓扑图。并可以设置阈值进行报警,方便对网络质量的监控。

项目截图

app-bg.jpg

#
去中心化设计

去中心化设计是SmartPing的一大特点,这里的去中心化并非集群概念,而是与分布式更加接近,简单点理解及数据分布式存储,各节点通过互相调用保持数据展示的统一性。

实例

如在我们的网络中存在三个对等节点A,B,C;三个节点之间将产生3!(321)=6条交互数据,在SmartPing中,每个节点存储相同的配置数据(Conf),检测数据只存储目标为其他节点的数据,及A存储 A->B|A->C , B存储B->C|B-A,C存储C->A|C->B的数据, 当用户访问任意一个节点时,用户在前端进行各节点的数据汇总使各节点的数据展示在前端上保持一致。

#
数据结构
SmartPing采用Sqlite进行数据存储,且数据结构非常简单,项目中的database-base.db为一个空sqlite数据库,程序根据场景建立响应的数据存储表。

打开SmartPing的Sqlite数据库后可以看到,SmartPing共两种类型数据表

  • pinglog-{IP}
  • alertlog-{date}

##pinglog-{IP}
pinglog数据表根据用户所设置的检测机器生成,数据表logtime设置为唯一主键,存储日-小时-分(例如:[16 18:20]16号18点20分)数据,PING检测数据通过Replace Into形式写入保证循环存储1个月的数据,保证单表最大数据量为1440*31=44640条,当用户去除响应节点检测时自动删除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE [pinglog-{IP}] (
logtime VARCHAR (8),
maxdelay VARCHAR (3),
mindelay VARCHAR (3),
avgdelay VARCHAR (3),
sendpk VARCHAR (2),
revcpk VARCHAR (2),
losspk VARCHAR (3),
lastcheck VARCHAR (16),
PRIMARY KEY (
logtime
)
);
CREATE INDEX "lc" ON [pinglog-{IP}] (
lastcheck
);

alertlog-{date}

alertlog-{date}数据表根据用户设置的保留报警日志时常进行按日分表并定期清理

1
2
3
4
5
6
CREATE TABLE [alertlog-20170916] (
logtime VARCHAR (8),
fromname VARCHAR (15),
toname VARCHAR (15),
alerttype INT (1)
);

其他资料