APP下载

基于Zabbix的空管业务监控设计

2019-11-30李云鹏

电子技术与软件工程 2019年20期
关键词:键值触发器表达式

文/李云鹏

民航空管信息系统种类繁多,每套系统通常都自带一套监控系统,各系统的界面、操作逻辑各不相同,亟待开发一套集中式一体化的监控系统。

Zabbix是一种开源的企业级的分布式监控解决方案,可以用来监控各类网络参数和服务器健康状态。Zabbix使用灵活的通知机制,从而保证对系统故障的快速响应。所有Zabbix的报告、统计和配置参数,都可以通过web前端控制,从而保证了监控系统的易用性和跨平台型。

1 ZabbixServer安装部署

由于空管运行生产环境大部分和互联网物理隔绝,为了便于快速安装部署,本文介绍基于ZabbixAppliance的安装方法,对应服务器系统虚拟平台为VMWareESXI6.5。

首先在Zabbix官网下载ZabbixAppliance的vmdk格式文件,该文件可以直接用于VMWarePlayer、Server和Workstation等系列产品中,如要安装在ESXI中,需要通过vCenter Converter进行格式转换。

在生产环境中,因为无法连接互联网,VMware vCenter Converter Standalone安装完成后无法正常启动服务。该问题是由于无法联网对文件完整性进行检查造成的,需要通过修改注册表解决该问题。在Windows注册表编辑器里HKEY_LOCAL_MACHINESystemCurrentControlSetControl中新建ServicesPipeTimeout键值,类型为DWORD32,并将值设成300000,随后重启操作系统。

当前版本的ZabbixAppliance操作系统为Ubuntu16.04,预装好了ZabbixServer和MySQL数据库,配置好网络及时钟参数后可以即装即用。

在生产环境中通常使用静态IP地址,登陆root用户,打开/etc/network/interfaces文件,将iface eth0 inetdhcp修改为ifaceeth0inetstatic。并在其后添加IP地址(address),子网掩码(netmask),网关(gateway)。文件编辑完成后,运行sudoifupeth0。

Zabbix存在在部分界面中文字符为乱码的Bug,需要将Windows下的中文字体上传到服务器中。如将Windows中的C:WindowsFontssimsun.ttc拷贝到服务器中的/etc/alternatives/Zabbix-frontend-font,届时乱码将正确显示为宋体。

2 Zabbix Agent安装部署

在被监控的目标计算机上需要部署ZabbixAgent,以对本地的资源和应用进行主动式监控。在Zabbix的官网上有Windows、macOS和OpenBSD的对应下载版本,而Linux版的Zabbix通常被包含在各个Linux发行版的安装源中。在生产环境,可以通过安装操作系统的iso镜像安装,或者在互联网上下载对应的rpm包。Zabbix-agent还依赖于openssl和openssl-devel,所以离线安装时要将对应版本的三个rpm包一起下载安装。

无论Linux还是Windows,ZabbixAgent安装好后,需要修改zabbix_agentd.conf配置文件,通常需要修改的项为Server和ServerActive的IP地址。配置完成后重启各自的服务,Linux下命令为service Zabbix-agent restart,Windows下可以通过任务管理器下的服务窗口重新启动ZabbixAgent。

3 Zabbix配置管理

Zabbix提供了WEB界面对各类监控项进行管理和配置。ZabbixAppliance初始化提供Admin用户进行管理,初始密码为zabbix。

监控配置首先要创建主机群组,通常一套系统可以认为是一个主机群组。

其次是模板的管理。Zabbix内置了83套模板,可以覆盖大部分的通用项目监控。比如模板TemplateModuleICMPPing可以对各类硬件进行最简单的在线与否检查,并针对丢包、响应慢及网络掉线等问题进行告警。模板Template OSWindows可以部署于Windows服务器及客户端,其提供了内存不足、CPU负载过高、进程数量过多、网络不可达等告警。模板TemplateOSLinux类似,提供了预置的监控项和触发器。

主机群组中包含若干主机,创建主机时需要填写主机名称,选择对应的主机群组,并根据软硬件环境选择监控接口,包括agent代理程序、SNMP、JMX和IPMI。同时,可以选择若干个适合的模板,减少随后监控项配置的工作量。

每台主机有监控项和触发器。监控项对应具体的监控内容,创建时需要填写名称、键值、主机接口、更新间隔、历史数据保留时长、趋势存储时间。键值根据监控类型不同,有许多常用的预设键值。同时,用户可以在Agent机上编写脚本,通过UserParameter的方式调用执行。针对每个监控项,可以先在ZabbixServer上,运行zabbix_get命令查询对应的键值是否存在或符合预期。命令格式为zabbix_get-s[目标IP地址]-k[键值]。

触发器可以针对各个监控项设置告警阈值,创建时需要设置名称、严重性、表达式等内容。严重性包括信息、警告、一般严重、严重、灾难,可以对告警进行分类管理,并按严重程度发出不同的警示声音和信息。表达式针对监控项的返回值设置不同的函数计算。通常情况下,事件的恢复表达式就是上述表达式的逆运算,如果监控项内容特殊,用户可以自定义恢复表达式。

Zabbix超级管理员可以对用户进行管理,并对不同的用户进行权限管理。用户还可以独立控制网页是否弹框或声音告警。声音告警时长包括一次、10秒或者消息超时,消息超时即自定义告警时长,同时针对每个类型的告警可以单独设置告警声音的开光。

4 空管典型业务监控配置

4.1 AFTN电报监控

AFTN电报通常使用RS-232串口链路进行传输,常用的接口协议转换设备是MOXANPORT,其提供了SNMPv1协议作为网络监控工具。在Zabbix中可以通过SNMPv1客户端进行监控,需要输入对应的SNMPOID以监控对应的数据项。比如设备启动时间对应的SNMPOID为1.3.6.1.2.1.1.3.0。

RS232串口链路需要监控对应NPORT的串口,如监控PORT1端口接收电报字节数,对应OID为IF-MIB::ifInOctets.2,如发送电报的字节数,则OID为IF-MIB::ifOutOctets.2。在MOXANPORT的OID中,序号1对应Lan口,序号2对应PORT1口,序号3对应PORT2口,依次类推。

针对串口还可以增加触发器,其表达式为{IP:moxa.RxCntOfPort1.diff()}=0,其中moxa.RxCntOfPort1为自定义的监控项,该表达式的意思为最近一次的监控数值和上次监控数值没有差异,这种情况表示最近一段时间没有收到报文,通常可以认为是上游链路或系统发生了故障。同时因为AFTN电报在白天和晚上有明显的忙时和闲时的特征,可以自定义监控的时间间隔,比如将1-7,00:00-14:00设置成60s,1-7,14:00-24:00设置成300s。

4.2 MQ消息队列监控

MQ消息队列通常用来作为不同系统间数据交换的中间件,如果消费程序异常退出,会导致队列积压,并进一步影响整体系统性能。MQ消息队列深度的监控,可以通过编写UserParameter的方式实现,如UserParamter=mq.curdepth[*],echo dis ql($2)curdepth|runmqsc $1|grep“CURDEPTH”|cut-d H-f2|cut-d(-f2|cut-d)-f1,其中runmqsc是IBMMQ提供的命令行管理工具,echo disql($2)curdepth将命令传递到runmqsc中,$1对应队列管理器名字,$2对应队列名。其后的grep和cut指令用于在返回结果提取数字的值。同时在ZabbixServer中配置对应的监控项值为mq.curdepth[NAME1,NAME2],其中NAME1为队列管理器名对应$1,NAME2为队列名对应$2。

在队列深度的监控项里可以配置触发器, 如{IP:mq.curdepth[NAME1,NAME2].min(#3)}>100,其表示在最近三次询问,队列深度都大于100时,将会告警。

4.3 Mysql数据库监控

针对Mysql数据库,ZabbixServer官方内置了模板TemplateDBMySQL,并在Linux的Agent中预置了UserParameter模板。但如果数据库安装在Windows中,则需要自行设置UserParameter。为了便于在Windows的命令行中进行字符串操作,可以先安装coreutils、gawk、grep等GnuWin32工具。常用的监控MySQLUserParamter有:

UserParameter=mysql.version,mysql-V

UserParameter=mysql.ping,mysqladmin ping|grep-c alive

UserParameter=mysql.status[*],mysql-uuser-proot-N-e“show global status where Variable_name=’$1’;”|gawk“{print $$2}”

mysql.version用来查询数据库版本,mysql.ping监控数据库是否在线,mysql.status监控数据库环境状态,预置的键值有Com_begin、Com_commit、Slow_quries等。

4.4 应用监控

监控系统中最常用到的是应用监控,对应的键值有proc.mem(监控进程内存,以字节为单位,返回整数)、proc.cpu.util(监控进程cpu百分比,返回浮点数)、proc.num(监控进程数,返回整数)。使用proc.num可以监控程序的运行与否,其参数为proc.num[,,,],name表示进程名,user表示进程的用户,state包括all、running、sleep、zomb,默认为all,cmd用来做命令行匹配的正则表达式。比如proc.num[java,,,apron2atc.jar]表示监控javajarapron2atc.jar的进程数量。额外需要注意的是,在Windows系统里,只支持name和user两个参数。

同时在触发器里设置{IP:proc.num[java,,,apron2atc.jar].last()}<>1,当进程退出或者进程重复启动的时候将会产生告警。

猜你喜欢

键值触发器表达式
一个混合核Hilbert型积分不等式及其算子范数表达式
表达式转换及求值探析
浅析C语言运算符及表达式的教学误区
主从JK触发器逻辑功能分析
使用触发器,强化安全性
对触发器逻辑功能转换的分析
触发器逻辑功能转换的两种方法
注册表值被删除导致文件夹选项成空白
“扫除”技巧之清除恶意程序