简易网络性能监控系统设计

需求描述:

笔者的公司目前面临这样的情况,在国内有七八家分公司,分公司与总公司之间通过MPLS-VPN来进行连接。如何实时的掌握总公司与分支机构之间的网络状态是笔者目前面临的一个问题。经常会遇到用户反映网络慢,无法收到邮件的问题。因MPLS线路属于电信托管,本地IT没有权限查看路由器状态。

处理方案:

根据目前的实际,笔者决定采用Ping的方式,记录实时的Ping值,通过Ping值的收集,来对网络性能进行判断。从一台监控主机向各个地点发送Ping请求,根据各地的返回值,保存到数据库中。同时,根据数据库的信息,搭建前台的展示页面。这样的设计基于BS架构。

所需条件:

1. 监控主机一台(Windows server 2012),采用这个版本考虑到这个版本的操作系统Powershell自带test-connection命令,与其他版本略不同

2. 开发工具:windows visual web developer 2010 express (微软官方免费开发工具)

3.数据库:Microsoft Sql Server 2010 express (微软官方免费开发工具)

实施效果:

已经部署完成的网络监控系统如下图所示:

从上图可以看到24小时之内的网络状况,各个地点的网络性能略有不同,这个与流量,带宽等都有关系,通过这样的简易平台,可以很直观的看到当前整个网络的运行状况

详细步骤:

1. 建立收集数据库network,建立networkresult表,用于存放收集的数据

2.在服务器端使用powershell编写收集脚本

clear-content c:\1powershell\format.txt ‘清空这个文件

clear-content c:\1powershell\import.txt

$m=(get-content c:\1powershell\iplist.txt).count ‘读取需要监控的IP清单

for ($n=0;$n -lt $m;$n++)

{

[string]$address=(get-content c:\1powershell\iplist.txt)[$n..$n]

test-netconnection $address >c:\1powershell\format.txt ‘使用这个命令获取原始的数据

for($i=2;$i -lt 8;$i++)

{

$a=(get-content c:\1powershell\format.txt)[$i..$i]|out-string

$aa=$a.substring($a.lastindexof(":")+1)

$t=$t+","+$aa.trim()

}

[string]$p=get-date

$q=","+$p+$t

$q1=$q.substring(0,$q.length-3)

$q1 >> c:\1powershell\import.txt ‘将转换好的数据保存到import.txt,准备导入SQL

$q1=""

$a=""

$aa=""

$t=""

$q=""

$p=""

}

get-content c:\1powershell\import.txt|set-content c:\1powershell\import5.txt

c:\1powershell\powershell2sql.bat 调用SQL导入脚本,将数据导入SQL

SQL导入脚本,采用BCP方式

bcp network.dbo.networkresult in c:\1powershell\import5.txt -c -t "," -U sa –P **** -S abcd\sqlexpress

导入完成后进入sql,检查是否已经导入成功。

在windows计划任务中设计计划任务,定时收集数据导入到数据库

3. 设计前台UI及代码。

(1)vb.net网站架设不在描述之内,前台UI请参考上图。代码中主要使用的控件是Chart。

(2)全部代码如下:Imports System.Data.SqlClient

Imports System ‘调用命名空间

Imports System.Data

Imports System.Data.Sql

Imports System.Collections

Imports System.Collections.Specialized

Imports System.Web.UI.DataVisualization.Charting

Partial Class Network_network2

Inherits System.Web.UI.Page

Public Shared conn As SqlConnection

Public Shared conn2 As SqlConnection

Private Sub opendb() ‘定义过程

Dim connstr As String

connstr = "data source=abcd\sqlexpress;initial catalog=network;user id=sa;password=****"

conn = New SqlConnection(connstr)

conn.Open()

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ‘主要在Pageload事件中动态插入chart控件,根据IP地址数量来确定chart控件数量

If Not Me.IsPostBack Then

opendb()

Dim strsql As String

Dim cmd As SqlCommand

Dim dr As SqlDataReader

Dim i As Integer

Dim hostname As String

hostname = ""

i = 0

strsql = "select distinct remoteaddress from networkresult"

cmd = New SqlCommand(strsql, conn)

dr = cmd.ExecuteReader()

While dr.Read() ‘筛选IP地址数量,并进行循环

hostname = dr.Item(0)

Dim connstr2 As String

connstr2 = "data source=cnsz4ms0001\sqlexpress;initial catalog=network;user id=sa;[email protected]"

conn2 = New SqlConnection(connstr2)

conn2.Open()

Dim strsql2, strsql3 As String ‘筛选24小时之内的数值,并作为数据源与chart控件捆绑

Dim cmd2 As SqlCommand

Dim dr2 As SqlDataReader

strsql2 = "select top 96 date, pingreplydetails from networkresult where remoteaddress =‘" & hostname & "‘ order by date desc "

strsql3 = "select date,pingreplydetails from (" & strsql2 & ") a order by date asc "

cmd2 = New SqlCommand(strsql3, conn2)

dr2 = cmd2.ExecuteReader

Dim strles As String

strles = "legend"

Dim strarea As String

strarea = "chartarea"

Dim charttitle As String

charttitle = "SZ--" + hostname

Dim chartcontrol As New Chart() ‘向UI中插入chart

chartcontrol.Width = 400

chartcontrol.Height = 250

chartcontrol.ID = "chart_bar" + "-" + hostname

chartcontrol.Titles.Add(charttitle)

Dim chartarea As New ChartArea()

chartarea.Name = strarea

‘chartarea.AxisX.Title = "abc"

chartcontrol.ChartAreas.Add(chartarea)

chartcontrol.DataSource = dr2

Dim series As New Series()

series.Name = "series1"

series.XValueMember = "date"

series.YValueMembers = "pingreplydetails"

series.Legend = strles

series.ChartType = SeriesChartType.Column

series.ChartArea = strarea

series.BorderWidth = 3

series.Color = Drawing.Color.Orange

series.ToolTip = "#VALX,#VAL"

chartcontrol.Series.Add(series)

chartcontrol.DataBind()

Panel2.Controls.Add(chartcontrol)

dr2.Close()

conn2.Close()

End While

End If

End Sub

End Class

(3) 顺利执行完后的页面如上图展示所示。直接访问网址,即可实时查看当前网络状态。

后续提升:

1. 这个过程完整的展示了一个数据收集到展示的过程,主动触发的行为。在这个过程中,仅通过Ping值来反映网络性能。如有路由器权限,可以在路由器上设置SNMP,通过powershell脚本获取snmp相关数据,如路由器端口状态,流量,CPU,内存使用情况。并保存到数据库,通过可以提升网络的管理水平。

2. 在这样的过程中,只展示了数值的收集,同样,可以对数值进行逻辑判断,设置一个阀值,如达到一定的值,触发某个条件的警报,可大大的提升IT的主动性,比如ping值超过1000ms,可以自动登录路由器,使用show ip account等命令,获得流量排行前10位用户,并发送到邮箱,方便工作。同时,可以判断各个节点之间的连接是否有问题,如不通,可以结合邮件报警等手段来预警,可极大的提升IT管理水平。

时间: 2024-11-04 06:05:39

简易网络性能监控系统设计的相关文章

验证DDTTool作为网络性能监控数据库是否合适

# vi /etc/yum.repos.d/dag.repo[dag]name=Dag RPM Repository for Red Hat Enterprise Linuxbaseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/daggpgcheck=1gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txtenabled=1 搞定后,直接yum安装如下:#yum i

网络性能监控

网络性能监控工具应具备何种技能?

现代网络性能监控工具应具备何种技能.以前,企业网络工程师不得不为各种连接的服务器.应用程序和终端设备提供网络接入和足够的带宽.从OSI模型角度看,这些工具主要关注于1-4层网络.由于通过一个网络的所有流量和数据流都共享全部的带宽和队列资源,更高的OSI层次多少被忽略了. 网络问题 除了提供简单的在线/断线状态和使用率信息,网络性能监控产品还能执行更复杂的自动化网络故障修复任务.这其中包括路由协议监控和计划外路由变化警报.此外,有一些产品还能使用智能技术去理解各种WAN技术.虚拟堆叠和QoS特性的

报名|「OneAPM x DaoCloud」技术公开课:Docker性能监控!

如今,越来越多的公司开始 Docker 了,「三分之二的公司在尝试了 Docker 后最终使用了它」,也就是说 Docker 的转化率达到了 67%,同时转化时长也控制在 60 天内. 既然 Docker 这么火,Docker 监控是不是也该提上日程?或许具体问题要具体分析,但是似乎大家都在寻找新一代 Docker 监控的工具. 本次技术公开课将会给大家带来全方位的 Docker 实践,从监控之道到监控方案,让你了解到 Docker 实时性能状况,精准定位到性能薄弱的环节,从而优化应用,让监控之

linux性能监控以及网络命令

最近需要整理关于设备性能监控的命令(linux) 1.uptime eg: 22:59:10 up 50 days, 23:05,  3 users,  load average: 0.29, 0.43, 0.94 分别显示一分钟,五分钟,十五分钟负载 表示单位时间cpu等待队列中平均有多少进程在等待 2.free [-b | -k| -m]  指定输出单位 eg: total       used       free     shared    buffers     cached Mem:

使用prometheus+blackbox_exporter监控http、icmp网络性能

使用prometheus+blackbox_exporter监控http.icmp网络性能 话不多说,网络还是需要监控起来的.转载的上一篇博客最后面我贴了下prometheus的监控图表,这里详细介绍下用法. 安装prometheus.grafana的步骤略过,不是这里的重点,需要的话,可以翻翻我之前的博客笔记. cd  /usr/local/prometheus vim prometheus.yml 添加如下内容(51cto编辑器会自动把yml的缩进弄丢了,因此这里贴的是图片) 需要指出的是

在线公开课 | 京东云监控系统设计及落地之路

谈运维为什么离不开监控?典型监控系统一般是如何设计的?业务驱动的高可用监控系统又有何不同?作为巨头之一的电商平台京东, 其基于京东云的监控系统是否有值得借鉴的地方?本文将解答这些问题.本文整理自 10 月 30 日由京东云开发者社区和英特尔联合举办的在线公开课,京东云工具产品研发部专家架构师颜志杰的在线课程演讲--业务驱动监控系统设计与落地. 世上没有百分百可靠的系统,程序.机器.网络都可能在运行中出现问题,进而导致服务异常, 带来金钱及品牌的损失,所以监控目标就是降低损失,通过发现.定位.解决

服务性能监控指标

Apache性能监控支持以下指标: Apache吞吐率 Apache并发连接数 Apache并发连接数详细统计,包括读取请求.持久连接.发送响应内容.关闭连接.等待连接 Lighttpd性能监控支持以下指标: Lighttpd吞吐率 Lighttpd并发连接数 Lighttpd并发连接数详细统计,包括建立连接.读取请求.读取POST数据.处理请求.发送响应内容.关闭连接 Nginx性能监控支持以下指标: Nginx吞吐率 Nginx并发连接数 Nginx并发连接数详细统计,包括读取请求.处理请求

linux性能监控命令

1,Top命令:用于按一定的顺序显示所有正在运行而且处于活动状态的实时进程,而且会定期更新显示结果.这条命令显示了CPU的使用率.内存使用率.交换内存使用大小.高速缓存使用大小.缓冲区使用大小,进程PID.所使用命令以及其他.它还可以显示正在运行进程的内存和CPU占用多的情况. [email protected]:~$ top -H top - 22:00:25 up 1 min, 1 user, load average: 1.08, 0.37, 0.13 Threads: 222 total