蔡翔华(Shawn沙恩),高效运维社区金牌讲师,国内首批ZCP,Zabbix中文手册及EXIN DevOps手册官方译者。积极投入Zabbix社区建设,在多个技术大会上进行技术分享,有丰富的Zabbix开源监控平台的全栈式监控经验。拥有DevOps Master,Zabbix认证专家,ITIL,MCSE,RHCE,VCP等认证。
壹
概述
在之前的分享中,和大家聊过监控的广度。
一个完整的监控链路应该至少由一下几部分构成:
- 底层的硬件(服务器、网络设备、UPS电源、环境温度等)
- 存储(磁盘阵列、集中式存储、分布式存储等)
- 操作系统(包括虚拟化操作系统,以及在虚拟化层之上的操作系统,如windows,linux,aix等)
- 中间件(Tomcat,Nginx,Apache等)
- 数据库(MySQL,SQLServer,Redis等)
- 应用(B端、C端应用,也包括移动端等)
对于IT专业人员而言,更关注的是操作系统这一层上下的监控(主要是操作系统,中间件和数据库)。那么有一个问题,如果这些组建能够正常运作,对应的应用和业务真的没有问题吗?
在软件测试领域,常常会使用Selenium来模拟用户的行为(鼠标操作、键盘操作、截图等),进行UI测试,确认相应的功能能否正常运作。
Zabbix虽然没有Selenium的UI测试功能,但本身也提供了一个模拟Web场景的操作功能——Web Scenario。
贰
需求分析
先想一个问题:如何确保Zabbix平台正常运行?
如果监控CPU、内存等系统指标,只能确保Zabbix所在的服务器系统面正常;
如果监控端口和进程,只能确保Zabbix在指定端口上提供了服务;
但这些仍然无法确保用户可以正常使用这些平台。
事实上,此时需要以结果为导向,模拟用户的正常操作,并确保这些操作能够达到我们的预期。
以用户访问Zabbix平台为例,用户需要实现一下几个步骤:
- 需要打开Zabbix的URL,确保能够正常访问
- 需要使用正确的用户名和密码登陆Zabbix,确保能够正常登陆
- 需要登陆后访问某个内部页面(如Configuration下面的Hosts页面),确认能够正常打开
- 需要做一些查询操作(如查询127.0.0.1这台zabbix server本机),确保能够正确查询
- 需要登出Zabbix,确保能够正常登出
在上述过程中,也可以添加一些自定义的步骤(用户使用Zabbix的行为,如添加hosts等),确保Zabbix相应的功能可以被使用正常。
叁
通过Zabbix Web Scenario实现面向业务行为的监控
那么在Zabbix平台中,我们该如何通过Web Scenario来实现?
1. 首先在一台可以访问Zabbix Web页面的服务器上创建一个Web Scenario,本例中这个Web Scenario创建在了Zabbix Server本机
在这里,我们使用了Variables变量,由于登陆的用户名密码在后续的步骤中会用到,可以在这里指定(也可以在后面步骤中书写,可以理解为全局变量和局部变量的区别)。
其他选项保持默认。接下来我们需要模拟需求分析部分的各个业务场景。
2. 第一步:需要打开Zabbix的URL,确保能够正常访问。
在Steps中添加Open Zabbix Website的步骤,如下图:
简单来说,就是让监控所在的服务器去访问这个url,如果在15s内能够访问到这个页面,且状态码为200(正常),同时返回的信息包含Zabbix这个关键词(用于确认Zabbix页面能被正常打开,而不是空白页),那么这一步就是成功的。需要注意的是,当你访问http://localhost/zabbix的时候,实际是通过跳转访问到了index.php页面,所以需要勾选Follow redirects。
3. 第二步:需要使用正确的用户名和密码登陆Zabbix,确保能够正常登陆。
在Steps中添加Sign in的步骤,如下图:
这里之所以添加了Post Field,是因为当我们登陆Zabbix的时候,其实是对于这个URL进行了Post,具体post了那些字段,可以通过浏览器的抓包看到。
同样的,我们要求状态码为200,返回页面包含zabbix关键词。
4. 第三步:需要登陆后访问某个内部页面(如Configuration下面的Hosts页面),确认能够正常打开。
同样,创建一个Visit “HOSTS” menu的step,返回值config,状态码200
5. 第四步:需要做一些查询操作(如查询127.0.0.1这台zabbix server本机),确保能够正确查询
创建Search “127.0.0.1”的step,查询search这个字段,value为127.0.0.1,由于能找到这台服务器,所以返回字段中也要求包含127.0.0.1,状态码200.
6. 第五步:需要登出Zabbix,确保能够正常登出
创建一个Sign Out的Step,确保能登出,具体的URL和field均可以通过抓包或者浏览器debug模式获得。
肆
总结
通过Zabbix Web Scenario的监控,可以实现面向业务的监控,并通过post和get请求模拟了一些常用的操作,验证了相应的功能。具体的解决思路如下:
- URL处,填写用户实际访问的地址
- Query Field处,填写Get方法对应的参数
- Post Filed处,填写Post方法对应的参数
- 按需配置返回页面包含的关键词(Required string)以及状态码(Required status codes,一般为200)
最终的监控效果如下,可以返回失败在哪一个步骤,以及对应页面的访问速度和响应时间。