有时候我们需要监控外网网络的连接状况,通常的做法是在本机ping一些网络地址,比如sina。要实现这一目的,可以编写bat脚本不间断ping目标地址,并将返回结果保存到文本文件中,也可以使用Zabbix做一些配置来不间断监控网络状况,本文介绍这两种方法的具体实现。

简单的方法


最简单的方法就是编写一个bat脚本,循环ping目标地址,并将ping的结果放到文本文件中,比如以下脚本:

:top
echo %time% >> log.txt
ping -l 1024 -n 1 sina.com.cn | findstr "TTL">> log.txt
ping -n 2 127.1 >nul
goto top

使用命令行运行,在脚本所在目录会生成一个log.txt文件,里面会记录每次ping的回报信息:

11:09:08.51 
来自 111.13.134.203 的回复: 字节=1024 时间=34ms TTL=49
11:09:09.58 
来自 111.13.134.203 的回复: 字节=1024 时间=34ms TTL=49
11:09:10.69 
来自 111.13.134.203 的回复: 字节=1024 时间=30ms TTL=49
11:09:11.77 
来自 111.13.134.203 的回复: 字节=1024 时间=34ms TTL=49
11:09:12.89 
来自 111.13.134.203 的回复: 字节=1024 时间=30ms TTL=49
11:09:13.94 
来自 111.13.134.203 的回复: 字节=1024 时间=31ms TTL=49
11:09:15.04 
来自 111.13.134.203 的回复: 字节=1024 时间=31ms TTL=49
11:09:16.15 
来自 111.13.134.203 的回复: 字节=1024 时间=34ms TTL=49
11:09:17.26 
来自 111.13.134.203 的回复: 字节=1024 时间=34ms TTL=49
11:09:18.37 
来自 111.13.134.203 的回复: 字节=1024 时间=32ms TTL=49
11:09:19.46 
来自 111.13.134.203 的回复: 字节=1024 时间=32ms TTL=49

可以看到,上述脚本已经实现了对目标地址的不间断ping。

配置Zabbix客户端


使用Zabbix监控目标机器的网络状态,首先需要使用脚本来ping目标网络地址获取返回值,并将返回值作为关键字发送到Zabbix服务端。在Zabbix配置管理工具中创建相关的项目和图表,就能达到按照指定频率监控网络连接的目的。

Zabbix是一个客户端-服务器结构,要想监控目标机器的状态,需要在该机器上安装Zabbix客户端,这里以Windows系统为例。首先创建以下使用PowerShell获取网络连接的脚本 pingsina.ps1 :

$Test = test-connection sina.com.cn -count 1
$Test.responsetime

脚本创建完成之后,将该脚本拷贝到Zabbix agent安装目录,并使用PowerShell运行一下:

PS C:\zabbix> .\pingsina.ps1
29

初次运行如果报以下错误:

PS C:\zabbix> .\pingsina.ps1
无法加载文件 C:\zabbix\pingsina.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_signing"。
所在位置 行:1 字符: 15
+ .\pingsina.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

则表示没有执行脚本的权限,可以执行以下语句:

PS C:\zabbix> Set-ExecutionPolicy -ExecutionPolicy Unrestricted

执行策略更改
执行策略可以防止您执行不信任的脚本。更改执行策略可能会使您面临 about_Execution_Policies
帮助主题中所述的安全风险。是否要更改执行策略?
[Y] 是(Y)  [N] 否(N)  [S] 挂起(S)  [?] 帮助 (默认值为“Y”): y

以上设置成功之后,表示能够ping并且可以得到返回值,接下来需要对zabbix_agent进行配置,找到zabbix_agent的安装目录,打开zabbix_agentd.win.conf文件,在最后面添加:

UnsafeUserParameters=1
UserParameter=pingsina,C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe C:\zabbix\pingsina.ps1

表示将pingsina.ps1的执行结果放到关键字pingsina中,作为结果传递到zabbix服务器上。

配置Zabbix服务端


首先,在被监控的客户端 “Configuration"->"Hosts"->"Items" 创建一个Item监控项 :

这里被监控的客户端的IP地址是1.9,在Items里面添加一个监控项Item。如上图,Key就是在Zabbix Agent客户端配置文件里面设定的pingsina,数据类型是Numeric。

添加完监控项后在”“Configuration"->"Hosts"->"Graphics" 里面新建一个图形。

在图形监控的Items里面,点击Add,在弹出的选项里面选择之前创建的监控项。

以上配置完成之后,可以在”Monitor"->"Graphics"下面,显示图形了:

还可以将该监控图形添加到监控面板上,在“Monitor”->"Screens"下面,点击右上角“Edit Screen",选择一个单元格,可以进行配置刚才的图形: