60分钟

第9章 网络监控管理

【学习目标】

1.知识目标

了解网络监控的概念及应用场景。

了解主流的开源监控系统的特征。

了解监控系统的工作原理

理解网络监控相关的技术和标准。

2.技能目标

安装及配置Zabbix系统。

运用Zabbix进行信息系统的监控

基本Zabbix的系统诊断

Zabbix系统二次开发能力

【认证考点】

了解网络监控的概念

了解SNMP原理及配置

了解Zabbix系统的构架

掌握Zabbix数据采集方式及原理

能够对Zabbix进行简单的扩展

能够进行基本监控参数配置

掌握基本的故障诊断知识和技巧

项目引导:企业IT系统的监控

【项目描述】

该项目将模拟企业环境下,对企业业务系统的整体进行监控,包括网络设备、数据库及中间件的监控,涉及到的数据采集技术包括SNMP、JMX及Zabbix Agent方式。数据库使用MariaDB为案例进行性能数据的监控,通过对Zabbix Agent扩展自定义监控条目的方式实现对MariaDB关键状态数据的采集,包括:慢查询、查询率、读写传输率、连接数、Buffer大小等参数。网络设备的性能数据监控,以Linux部署Net-SNMP软件包的方式来模拟交换机性能数据的采集,通过SNMP完成服务器性能数据的采集。对于中间件,使用Tomcat中间件进行模拟,通过JMX协议对Java虚拟机性能数据的采集。完成该项目需要几个过程,内容包括Zabbix Agent组件的安装及配置、Zabbix Server组件的安装配置,MariaDB数据库组件的安装及数据初始化、Zabbix Web组件的安装及配置,以及三种环境下的数据采集配置、触发器配置及动作配置,达到实现整个业务性能数据监控及异常告警目的。

知识储备

9.1 数据采集技术

在企业IT、互联网运营商、政府机关等环境下的各种计算机系统,都会存在由于机房环境、软件Bug、恶意用户的攻击行为以及用户访问量的变化导致计算机系统达不到设计时的指标要求,为了及时发生并解决问题,实时采集计算机系统的工作状态并及时响应变得至关重要,网络监控技术就这样应运而生。网络监控软件能够实时的采集计算机系统各个组件的性能数据、容量数据、配置数据及日志数据等内容,并结合实时的数据处理和分析技术,在发现异常或异常苗头的时候,通过用户自定义的规则及通知策略,及时将这些信息告知网络系统管理员,从而加快人工干预进度,提高故障的解决速度,甚至将故障扼杀在摇篮中。根据对不同的计算机产品和软件技术的监控需求,网络监控技术有多种技术标准,下面我们将对这些技术做一个简单的介绍。

9.1.1 MIB及SNMP技术

MIB及SNMP技术主要用于计算机网络设备的监控管理,现阶段大部分企事业单位使用的计算机网络产品,其软件系统都是封闭、独立的,用户基本没有方法对其进行二次开发实现功能的扩展,较难实现对计算机网络设备的运行状态的监控及管理,基于这样的现状,国际标准化组织和各网络设备的厂家共同制定了计算机网络设备的管理标准,这就是MIB和SNMP。MIB主要用于计算机网络设备性能数据的定义,包括性能数据的名字识别方法,SNMP数据类型的定义。SNMP技术主要用于网络设备和监控设备之间的通讯协议标准的定义,下面我们将分别对这两种技术进行简单的介绍。

1. SNMP技术

SNMP是管理进程(网络管理站点)和代理进程(Agent)之间的通信协议。它规定了在网络环境中对设备进行监视和管理的标准化管理框架、通信的公共语言、相应的安全和访问控制机制。网络管理员使用SNMP功能可以查询设备信息、修改设备的参数值、监控设备状态、自动发现网络故障、生成报告等。

SNMP具有以下技术优点:

(1) 基于TCP/IP互联网的标准协议,传输层协议一般采用UDP。

(2) 自动化网络管理。网络管理员可以利用SNMP平台在网络上的节点检索信息、修改信息、发现故障、完成故障诊断、进行容量规划和生成报告。

(3) 屏蔽不同设备的物理差异,实现对不同厂商产品的自动化管理。SNMP只提供最基本的功能集,使得管理任务与被管设备的物理特性和实际网络类型相对独立,从而实现对不同厂商设备的管理。

(4) 简单的请求—应答方式和主动通告方式相结合,并有超时和重传机制。

(5) 报文种类少,报文格式简单,方便解析,易于实现。

SNMP技术在其发展史上,经历了三个版本的变迁,这三个版本主要的特征下面做简要介绍。

(1) SNMP v1

SNMPv1是SNMP协议的最初版本,提供最小限度的网络管理功能。SNMPv1的SMI和MIB都比较简单,且存在较多安全缺陷。

SNMPv1采用团体名认证。团体名的作用类似于共享密码,用来限制网络管理站点与网络管理代理之间的相互访问。如果SNMP报文携带的团体名没有得到网络管理站点或网络管理代理的认可,该报文将被丢弃。

SNMPv1版本支持的数据类型不够多,比如不支持64位计数器类型,这会导致网络管理站点在采集网络设备1G、10G这样高速接口的流量数据时,计数器会快速溢出导致流量数据采集不准确的问题。

(2) SNMPv2

SNMPv2c也采用团体名认证。在兼容SNMPv1的同时又扩充了SNMPv1的功能:它提供了更多的操作类型(GetBulk操作等);支持更多的数据类型(Counter64等);提供了更丰富的错误代码,能够更细致地区分错误。

(3) SNMPv3

SNMPv3主要在安全性方面进行了增强,SNMPv3版本提供了认证和加密安全机制,以及基于用户和视图的访问控制功能,增强了安全性,它采用了USM和VACM技术。USM提供了认证和加密功能,VACM确定用户是否允许访问特定的MIB对象以及访问方式。

(4) SNMP操作

SNMP支持多种操作,主要为以下几种基本操作:

Get操作,网络管理站点使用该操作从Agent获取一个或多个参数值。

GetNext操作,网络管理站点使用该操作从Agent获取一个或多个参数的下一个参数值。

Set操作,网络管理站点使用该操作设置Agent一个或多个参数值。

Response操作,Agent返回一个或多个参数值。该操作是前面三种操作的响应。

Trap操作,Agent主动发出的操作,通知网络管理站点有某些事情发生。

执行前四种操作时设备使用UDP协议采用161端口发送报文,执行Trap操作时设备使用UDP协议采用162端口发送报文。由于收发采用了不同的端口号,所以一台设备可以同时作为Agent和网络管理站点。

2. MIB技术

任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。每个Agent都有自己的MIB。MIB也可以看作是网络管理站点和Agent之间的一个接口,通过这个接口,网络管理站点可以对Agent中的每一个被管理对象进行读/写操作,从而达到管理和监控设备的目的。

MIB是以树状结构进行存储的。树的节点表示被管理对象,它可以用从根开始的一条路径唯一地识别,这条路径就称为OID。如图9-1-1所示。管理对象system可以用一串数字{1.3.6.1.2.1.1}唯一标识,这串数字就是system的OID。

子树可以用该子树根节点的OID来标识。如以private为根节点的子树的OID为private的OID——{1.3.6.1.4}。

图9-1-1 OID树形结构

9.1.2 Java虚拟机及JMX技术

虚拟机是一种抽象化的计算机,在真实的计算机上通过实时将虚拟计算机指令通过翻译转换为真实计算机指令的方式来模拟仿真各种计算机功能。Java虚拟机有自己的硬体体系架构,如处理器、堆栈、寄存器等,还具有相应的指令集合。Java软件通过解释器屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机目标代码(字节码),就可以在多种平台上不加修改地运行。

使用Java语言编写的程序,最后都需要在Java虚拟机上运行,既然是在计算机上运行,不管是真实的,还是虚拟机的,都涉及到性能的问题,如内存空间的使用,线程数量的多少等等,这些对软件的响应速度都有很大的影响,因此,我们也需要对Java虚拟机的运行状态进行监控。为了实现这个功能,Sum 公司Java推出了JMX技术标准,JMX在Java编程语言中定义了应用程序及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如重新加载配置文件、实时修改运营配置等等,其优点是可以非常容易的管理应用程序,其伸缩性的架构使每个JMX Agent服务可以很容易的放入到Agent中。

JMX体系结构分为以下四个层次:

(1) 设备层

主要定义了信息模型。在JMX中,各种管理对象以管理构件的形式存在,需要管理时,向MBean服务器进行注册。该层还定义了通知机制以及一些辅助元数据类。

(2) 代理层

主要定义了各种服务以及通信模型。该层的核心是一个MBean服务器,所有的管理构件都需要向它注册,才能被管理。注册在MBean服务器上管理构件并不直接和远程应用程序进行通信,它们通过协议适配器和连接器进行通信。而协议适配器和连接器也以管理构件的形式向MBean服务器注册才能提供相应的服务。

(3) 分布服务层

主要定义了能对代理层进行操作的管理接口和构件,这样管理者就可以操作代理。然而,当前的JMX规范并没有给出这一层的具体规范。

(4) 附加管理协议API

定义的API主要用来支持当前已经存在的网络管理协议,如SNMP、TMN、CIM等。

9.2 主流开源网络系统介绍

随着互联网和云技术的高速发展,各行各业的信息化系统都面临极大的挑战,大量应用需要横跨不同终端系统,企业间的协作也越来越多,如各种第三方接口(如支付、地图、购物等)的广泛普及,IT系统架构越来越复杂。快速迭代的产品能够及时反映用户需求的变化,并为用户提供良好的用户体验。但也给IT运维管理者带来极大的挑战,系统越来越复杂却需要时刻保障核心业务稳定可用,使得企业IT管理人员面对复杂的系统越来越力不从心,这时系统运维管理者需要一套面向业务的解决方案,这就提出了现代运维管理的几个要求:

(1) 面向业务的运维,不但关心单点IT资源的运行状态,更关心整个业务系统的健康状态。

(2) 现在企业使用了大量的API和模块化应用,需要关注每个接口的性能及容量变化情况。

(3) 运维需要每周、每月查看报告趋势分析,从而发现系统中存在的隐患及性能瓶颈,但传统运维工具数据导出困难

(4) 需要第一时间快速发现故障,并通知相关运维人员,减少业务中断带来的损失

在企业IT系统越来越复杂化的背景下,由服务器和网络设备厂商根基自身设备而定制开发的监控软件越来越显得功能单一,覆盖范围过小,灵活性不够的缺点,无法满足用户的需求,这样催生了网络监控开源软件的发展,下面将介绍现阶段主流的监控软件及它们的特点。

1. Zabbix

Zabbix是一个基于Web界面的提供分布式系统监控以及网络监控功能的企业级开源运维平台,也是目前国内互联网用户中使用最广的监控软件,入门容易、上手简单、功能强大并且开源免费是对Zabbix的最直观评价。Zabbix易于管理和配置,能生成比较直观的数据图,支持自动发现功能,大大减轻日常管理的工作量,丰富的数据采集方式和API接口可以让用户灵活进行数据采集,而分布式系统架构可以支持监控更多的设备。理论上,通过Zabbix提供的插件式架构,可以满足企业的任何需求。

优点:

(1) 支持分布式监控。

(2) 自带绘图功能,获取到数值型的数据,可自动生成图。

(3) Web配置方式,操作易用性较好。添加监控项或机器时速度很快。

(4) 有报警时无论在任何界面会弹出小窗口报警,同时有报警的声音提示,同时可对监控项的快速查看。

(5) 自带内置函数较为丰富,同时也支持脚本及Nagios等脚本的调用。

(6) 出现问题时,可自动远程执行命令。

缺点:

(1) 性能瓶颈,监控系统系统没有业务低谷与高峰的概念,其行为具有持续性和周期性,被监控设备越多,采集和分析的数据就会越大,将使数据库的写入成为一定的瓶颈,官方给出的单机上限5000台,超过时就需要增加Zabbix Proxy设备,这将增加成本。

(2) Zabbix采集数据有pull方式,也就是server主动模式,当目标机器量大之后,pull任务会出现积压,导致采集数据会延迟。

(3) 项目二次开发,需要分析MariaDB表结构,表结构比较复杂,对开发能力有较高要求。

(4) 内置HouseKeeping在执行过程中会对数据库增加压力,需要对数据库进行优化。

2. Nagios

Nagios是一款开源的企业级监控系统,于1999年推出,由Ethan Galstad开发并维护至今。Nagios能够实现对系统CPU、磁盘、网络等方面参数的基本系统监控,而且还能监控包括SMTP,POP3,HTTP,NNTP等各种基本的服务类型。另外通过安装插件和编写监控脚本,用户可以实现应用监控,并针对大量的监控主机和多个对象部署层次化监控架构。

Nagios最大的特点是软件的开发者将Nagios设计成监控的管理中心,尽管其主要功能是监控服务和主机的,但是他自身并不包括这部分功能代码,所有的监控、告警功能都是由相关插件完成的。其全球超过100万用户。许多跨国企业和组织,如雅虎、索尼、西门子、飞利浦、AOL等都在使用,尤其适合复杂IT环境的企业。

优点:

(1) 具备自动化运维能力,出错的服务器、应用和设备会自动重启。

(2) 配置灵活,监控项目很多,可以自定义Shell脚本,通过分布式监控模式,非常适合大型网络。

(3) 支持以冗余方式进行主机监控。

(4) 具备将主机事件及服务事件相关联的能力。

(5) 报警设置具备多样性。

缺点:

(1) 很弱的事件控制台。

(2) 对性能、流量等指标的处理功能不够强大。

(3) 看不到历史数据,只能看到报警事件,很难追查故障原因。

(4) 配置复杂,初学者投入的时间、精力比较大。

(5) 插件的易用性不好。

3. Cacti

Cacti是一套完整的网络流量监测图形分析解决方案,基于RRDTool的数据存储和图形功能实现网络监控。Cacti提供快速的数据查询,先进的图形模板,多样化数据采集方法和用户管理功能。通过一个直观、易于使用的界面,实现从局域网规模到数百台设备的复杂网络监控,可以指定每一个用户能查看树状结构、Host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大。

优点:

(1) 界面比较直观,主要用途还是用来收集历史数据和画图。

(2) 树图设置自由度高,可以调节经常看的图放在前面。

(3) 用户权限设置细。

缺点:

(1) 数据采集频率默认为5分钟,采集频率稍低。

(2) Web界面设置不太直观。

(3) 添加自定义图表比较麻烦。

(4) 无数据触发及通知机制,对运维故障的及时处理不利。

4. Zenoss

Zenoss Core是开源企业级IT管理软件,也是智能监控软件,允许IT管理员依靠单一的Web控制台来监控IT架构的运行状态和健康度。Zenoss Core同时也是开源的网络与系统管理软件。

Zenoss Core的强大能力来自于深入的列表与配置管理数据库,以发现和管理公司IT环境的各类资产(包括服务器、网络、和其他结构设备)。Zenoss可以创建 关键资产清单和对应的组件级别(接口、服务、进程,已安装的软件等)。建立好模型后,就可以监控与报告IT架构中各种资源的状态和性能容限了。Zenoss同时提供与CMDB关联的事件和错误管理系统,以协助提高各类事件和提醒的管理效率。以此提高IT管理人员的效率。

优点:

(1) Zenoss比较出色的地方在于它的Dashboard,可以配置很多portlet(即widget)。

(2) 每个用户的界面都是分开管理的,自定义dashboard不会影响其他用户。

(3) 强大监控功能(服务器、路由交换、防火墙、存储、数据库、中间件)。

(4) 数据存储的架构,采用基于HBase的OpenTSDB时间序列数据库存储监控数据,具有很高的性能。

(5) 较好的将状态监控,性能监控,资源管理,更好的报告机制进行有机的整合。

缺点:

(1) 对资源要求较高,即使只管理少数几台设备、它也需要消耗大量硬件及内存等附加资源。

(2) 针对Windows系统,开源版只提供SNMP采集手段,如果需要通过WMI方式采集CPU,Disk等性能数据只在收费版提供。

9.3 Zabbix系统架构

9.3.1 Zabbix组件及功能介绍

完整的Zabbix分布式监控系统,由以下几个组件构成:

(1) Zabbix Server,负责接收Zabbix Agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行。

(2) database storage,专用于存储所有配置信息,以及由Zabbix收集的数据。

(3) Web interface,Zabbix的GUI接口,通常与Zabbix Server运行在同一台主机上。

(4) Proxy,可选组件,常用于分布监控环境中,代理Zabbix Server收集部分被监控端的监控数据并统一发往Zabbix Server端。

(5) JMX gateway:可选组件,和Zabbix Server配合,用于对Java虚拟机的状态数据的采集。

(6) Zabbix Agent:部署在被监控主机上,负责收集本地数据并发往Zabbix Server或Proxy端;

9.3.2 Zabbix相关术语

(1) host(主机):要监控的网络设备,可由IP或DNS名称指定。

(2) host group(主机组):主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用。

(3) item(监控项):一个特定监控指标的相关数据,这些数据来自于被监控对象;item是Zabbix数据收集的核心,每个item都由“key”进行标识,如果可采集多个性能参数,通过key参数, …方式指定采集特定的性能参数。

(4) tigger(触发器):一个表达式,用于评估某监控对象的某特定item或某些item数据是否在合理范围内,即阈值;接受到的数据大于阀值时,触发器状态从OK转变成Problem,当数据量再次回归合理范围时,其状态将从Problem转换会OK。

(5) event(事件):即发生的一个值得关注的时间,例如触发器的状态转变,新的agent或重新上线的agent的自动注册等。

(6) action(动作):指对于特定事件预先定义的处理方法,通常包含两个部分,执行操作的条件以及具体执行的操作,如在CPU利用率大于90%的时候,发送邮件通知系统管理员。

(7) escalation(报警升级):发送警报或执行远程命令的自定义方案,如每隔5min发送一次警报,共发送5次等。

(8) media(媒介):发送异常消息的手段和方法,如Email、Jabber或SMS,还可以通过自定义媒介脚本,实现用户自定义的消息通知手段。

(9) notification(通知):通过选定的媒介向用户发送有关某事件的信息。

(10) remote command(远程命令):预定义的命令,可在被监控主机处于某个特定条件下时自行执行。

(11) template(模板):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至单个主机。

(12) application(应用):一组item的集合。

(13) Web scennaro(Web场景):用于检测Web站点可用性的一个或多个HTTP请求。

9.3.3 Zabbix数据采集手段

(1) Agent方式:适用于通用计算机系统,通过安装代理软件,由代理软件进行数据采集并上报。

(2) 简单检查:Zabbix内置的采集方法,支持一些特殊产品的数据采集,如VMware vCenter虚拟化系统数据采集。

(3) SNMP:通过SNMP协议采集网络设备数据。

(4) 内部采集:主要针对Zabbix后台服务性能数据的采集。

(5) 外部脚本:通过在Zabbix Server上部署自定义脚本进行数据采集。

(6) 数据库采集:通过ODBC接口查询数据库实现数据采集。

(7) IPMI:通过IPMI协议对服务器监的物理健康特征,如温度、电压、风扇工作状态、电源状态等进行采集。

(8) SSH:通过SSH协议远程连接到服务器上,执行命令并返回数据。

(9) Telnet:类似SSH,不同在于使用Telnet协议。

(10) JMX:通过JMX协议,对Java虚拟机的数据进行采集。

(11) 数据聚合:对采集来的数据,进行数学运算后得到的新数据,

项目实施

某制造企业,随着公司产品市场占用率越来越大,客户及客户的订单量呈现飞速发展的趋势,公司不得不对企业的ERP系统进行了升级扩容、并上线了一些生产管理系统,导致整个企业的IT环境越来越复杂,为了保证整个IT系统的正常运行,并能够及时发现系统的问题及瓶颈,IT部技术人员决定上线一套运维监控系统提高企业的IT管理水平,该系统要求不仅能实现服务器、网络设备的性能采集,还要求能够对业务软件的运行数据进行采集,同时还要具备灵活的异常定义及实时告警通知功能。经过前期的调研,技术人员决定采用Zabbix监控系统来实现整个企业IT系统的监控及管理。

需要完成的任务:

  • Zabbix系统的安装及部署。
  • Tomcat中间件的JMX配置。
  • SNMP的安装及配置。
  • 数据库监控脚本的开发及部署。

9.4 Zabbix监控部署

9.4.1 项目需求及环境说明

采用Zabbix来实现企业IT系统的性能监控,首先要确定项目的需求,运维监控系统从功能上来说,主要包括:

(1) 对关键业务系统的性能数据进行采集。

(2) 存储性能数据,并以此产生历史数据。

(3) 具备异常发现功能,在系统存在隐患的及时发现。

(4) 通知功能,在出现异常情况时,通过合适的方式告知系统管理员。

通过部署Zabbix实现上述功能,需要完成如下步骤:

(1) 安装Zabbix监控系统,包括前端、数据库、后台服务及JMX网关组件。

(2) 在数据库服务器上安装及配置Zabbix Agent组件。

(3) 完成自定义数据采集的代码的开发。

(4) 完成中间件服务器的JMX配置。

(5) 完成SNMP Agent软件的安装及配置。

(6) 通过前端对监控系统进行监控项目的配置。

(7) 对监控项目的配置正确性进行验证。

本次运维监控项目的部署环境包括两台CentOS 7.6服务器,具体如图9-4-1所示。其中一台服务器部署整个Zabbix监控系统,管理IP地址为192.168.126.240,包含如下组件:

(1) MariaDB数据库。

(2) Zabbix Server组件。

(3) Zabbix Web组件。

(4) Zabbix Java Gateway组件。

另外一台服务器,模拟企业IT业务系统,管理IP地址为192.168.126.244,包含如下组件:

(1) Zabbix Agent组件。

(2) MariaDB数据库。

(3) NET-SNMP软件包。

(4) Tomcat中间件。

图9-4-1 运维监控项目部署图

9.4.2 Zabbix服务组件的安装及配置

1. 数据库组件的安装

安装MariaDB数据库,系统环境以CentOS 7.6为例,安装方式使用yum工具进行安装。

安装命令。

yum install mariadb-server

使用systemctl命令启动数据库服务,命令如下。

systemctl start mariadb.service

使用MariaDB命令行登录数据库命令行工具,命令如下。

mysql -uroot

出现如下提示,表示成功登录,然后在命令行工具中输入exit回车,退出MariaDB命令行。

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.64-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>

设置MariaDB数据库服务自启动,命令如下。

systemctl enable mariadb.service

2. EPEL软件仓库的安装

CentOS 7官方软件仓库中没有包含Zabbix相关组件,本次Zabbix监控部署是通过EPEL软件仓库实现的,安装EPEL软件仓库命令如下。

yum install -y epel-release.noarch

3. Zabbix服务组件的安装及配置

使用yum安装Zabbix服务组件,命令如下。

yum install -y zabbix40-server-mysql.x86_64

登录到MariaDB数据库中,命令如下。

mysql -uroot

在数据库命令行中,输入如下命令完成数据库的初始化。

create user "zabbix"@"localhost" identified by "zabbix";
create database zabbix;
grant all on zabbix.* to "zabbix"@"localhost";
flush privileges;
exit;

执行如下Shell命令,对数据库表及数据进行初始化。

cd /usr/share/zabbix-mysql
mysql -uZabbix -pzabbix zabbix < schema.sql
mysql -uZabbix -pZabbix zabbix < images.sql
mysql -uZabbix -pZabbix zabbix < data.sql

使用vim编辑器,对Zabbix服务组件的配置文件进行修改,命令如下。

vi /etc/zabbix_server.conf

进入程序界面后,修改如下条目的配置,需要注意如果内容前面包含#号,需要删除#号。

DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=3306
DBHost=localhost

启动Zabbix服务,命令如下。

systemctl start zabbix-server-mysql.service

使用如下命令,关闭防火墙并禁止防火墙自启动。

systemctl stop firewalld.service
systemctl disable firewalld.service

设置Zabbix Server组件自启动,命令如下。

systemctl enable zabbix-server-mysql.service

4. Zabbix Web前端的安装及配置

使用yum安装Zabbix Web组件,命令如下。

yum install -y zabbix40-web-mysql.noarch

修改PHP配置文件,命令如下。

vi /etc/php.ini

进入软件界面后,修改PHP时区配置如下。

date.timezone = aisa/ShangHai

重启httpd服务,命令如下。

systemctl restart httpd.service

使用浏览器登录Zabbix前端组件,本案例中前端IP地址规划为192.168.126.240,登录url为HTTP://192.168.126.240/zabbix,如图9-4-2所示。

图9-4-2 登录Zabbix Web前端URL

浏览器主页页面如图9-4-3所示,在页面中点击Next step。

图9-4-3 Zabbix Web初始化页面

如图9-4-4所示,本界面设置数据库参数,其中Databse type选择MySQL,Database host参数为localhost,Database Port为3306,Database name为zabbix,User为zbbix,Password参数为zabbix,完成后点击Next step。

图9-4-4 数据库参数设置

如图9-4-5所示,本界面设置Zabbix Server组件参数,其中Host为localhost,Port为10051,完成后点击Next step。

图9-4-5 Zabbix服务组件参数设置

如图9-4-6所示,本界面确认参数配置,如果有误,点击Back回退修改,正确则点击Next step。

图9-4-6 最终参数确认

如图9-4-7所示,本界面确认Zabbix Web前端组件初始化成功,点击Finished完成初始化。

图9-4-7 初始化成功界面

如图9-4-8所示,初始化成功后,进入登录界面,默认管理员账户名为admin,默认密码为zabbix,点击Sign in即可登录到Zabbix系统。

图9-4-8 系统登录界面

设置HTTP服务自启动,命令如下。

systemctl enable httpd.service

9.4.3 Zabbix Agent组件的安装及配置

本实验中,我们将运用Zabbix进行业务MariaDB数据库的监控配置。

1. 配置思路

数据库服务器运行在Centos 7.6操作系统中,故我们采用Zabbix Agent方式进行监控可以提供更大的灵活性,Zabbix自身的item并不包含MariaDB性能数据的采集,需要通过自定义Item方式对其采集功能进行扩展。最后通过Zabbix服务组件的采集和处理,实现MariaDB数据库的实时性能监控及异常告警。

2. MariaDB性能数据采集脚本定制

登录到业务MariaDB数据库服务器,使用vi编辑器创建监控脚本,命令如下。

vi /usr/bin/mysql_status.sh

进入软件界面后,编辑文件内容如下:

#!/bin/bash
mysqladmin -umon extended-status | awk "/[[:space:]]$1\ [[:space:]]/"'{print $4}'

为脚本赋予执行权限,命令如下。

chmod +x /usr/bin/mysql_status.sh

登录到业务MariaDB数据库中,命令如下。

mysql -uroot

在数据库命令行中,输入如下命令创建监控用户。

create user "mon"@"localhost";
flush privileges;
exit;

3. Zabix Agent安装及配置

使用yum安装代理组件,命令如下。

yum install -y zabbix40-agent.x86_64

使用vim编辑器,对Zabbix代理组件的配置文件进行修改,命令如下。

vi /etc/zabbix_agentd.conf

进入软件界面后,修改配置项目内容如下,其中192.168.126.240为本环境下的Zabbix服务组件的主机IP地址,需根据实际部署环境进行调整。

Server=192.168.126.240
ServerActive=192.168.126.240
Include=/etc/zabbix_agentd.userparams.conf

执行如下命令,关闭防火墙服务。

systemctl disable firewalld.service
systemctl stop firewalld.service 

创建自定义Item配置文件,命令如下。

vi /etc/zabbix_agentd.userparams.conf

进入软件界面后,编辑文件内容如下。

UserParameter=mysql.status[*],mysql_status.sh $1

启动Zabbix Agent组件服务,命令如下。

systemctl restart zabbix-agent.service

登录到部署Zabbix Server组件主机(192.168.126.240)上检查代理组件和服务组件之间的通讯是否正常,其中192.168.126.244为Zabbix代理组件的安装服务IP,执行命令如下:

zabbix_get -s 192.168.126.244 -k mysql.status[Uptime] 

命令将输出192.168.126.244 MariaDB服务的启动时间,实际输出随实际情况变化。

7408

设置Zabbix Agent服务开机自启动,命令如下:

systemctl enable zabbix-agent.service

9.4.4 MariaDB监控部署

【操作说明】如图9-4-9所示,Zabbix前端UI界面中,代表不同功能的链接在界面上以从上到下顺序组织的,下文将用第几级菜单来代表用户需要点击的链接位于那个层次上,例如图中Configuration在第一级,Template位于第二级别,Items位于第三级,在后面内容中,将会以第三级菜单Items这种形式来代表链接Items 。

图9-4-9 Zabbix链接层次组织

【步骤1】登录Zabbix系统。如图9-4-8所示,默认用户名为admin,默认密码为zabbix,url为HTTP://192.168.126.240/Zabbix,其中192.168.126.240为Zabbix前端服务器地址。

【步骤2】创建模板。点击一级链接Configuration后继续点击二级链接Templates,出现如图9-4-10所示界面,在该页面点击右侧的Create Template按钮创建一个新模板。

图9-4-10 创建新模板

完成上一步操作后,出现如图9-4-11所示界面进行模板参数的配置,Template name参数为模板指定唯一的名字,本例设置为MariaDB Status,Group参数通过select按钮进行选择,建议选择Templates,最后点击Add按钮,完成新增模板操作。

图9-4-11 配置模板参数

【步骤3】增加监控条目。点击一级链接Configuration后,继续点击二级链接Templates,出现如图9-4-12所示界面,在该页面下部的列表中点击刚才创建的模板MariaDB Status。

图9-4-12 选择模板

接下来界面如图9-4-13所示,先点击三级菜单中的Items链接,然后点击右边的Create item按钮来添加一个新的监控条目。

图9-4-13 增加监控item

接下来界面如图9-4-14所示,进行Item的参数配置,Name参数为Item指定唯一的名字,本例为SQL Querys,Type参数使用下拉框进行选择,设置为Zabbix Agent,Key参数设置为myql.statusQueries,Units参数为监控指标的单位,本例设置为qps,然后点击四级菜单按钮Preprocessing。

图9-4-14 配置item参数

接下来的界面如图9-4-15所示,点击Preprocessing steps中的Add链接,出现如图9-4-16的界面,选择Name参数为Change per second,然后点击最下面的Add按钮,完成监控条目的配置。

图9-4-15 确认条目配置
图9-4-16 预处理参数设置

【步骤4】创建图形。上一步完成后,界面回到模板配置界面,在界面中点击三级菜单Graphs链接,出现如图9-4-17界面,然后点击右边的Create Graphs按钮,添加新的一个监控数据图形。

图9-4-17 创建图形

接下来如图9-4-18所示,进行图形参数的配置,Name参数为图形设置唯一的名字,本例为SQL Query,然后在界面下部的Items框中点击按钮Add来为图形增加一个数据来源,在随后出现的Items界面中,勾选需要展示的数据,本例为SQL Query,然后点击Select,最后点击界面最下面的Add按钮,完成图形的配置。

图9-4-18 配置图形参数
【步骤5】创建触发器。完成上级步骤后,点击界面中的三级菜单Trigger链接,如图9-4-19所示,然后点击有点的Create Trigger按钮来新建一个触发器。
图9-4-19 创建触发器

接下来界面如图9-4-20所示,进行触发器参数的配置,Name参数为触发器设置唯一的名字,本例为SQL Event,Severity设置触发后,事件的严重程度,本例设置为Warning,点击Expression框右边的Add按钮来添加触发条件,在出现的Condition界面中,Item参数通过Select按钮来选择以前配置过的监控条目。

图9-4-20 配置触发器

接下来界面如图9-4-21所示,选择前面创建的SQL Querys监控条目。

图9-4-21 增加观测item

返回到Condition界面,按图9-4-22所示进行触发条件的配置,Function参数设置为last(),代表用最后一次采集到的数据来进行异常判断,Result参数中,第一个选择框为条件表达式,选择“>”,第二个为输入框,输入门限值,这里我们设置为200,代表最后一次采集到的数据值大于200时,触发异常事件,最后点击Insert按钮,完成触发条件的配置。

图9-4-22 配置触发条件

接下来将页面下拉到底部,如图9-4-23所示,点击Add按钮,完成触发器的配置。

图9-4-23 新增触发器确认

【步骤6】添加被监控主机。点击一级链接Configuration后继续点击二级链接Hosts,出现如图9-4-24所示界面,在页面右侧点击Create Host按钮添加被监控主机。

图9-4-24 新增主机

接下来界面如图9-4-25所示,进行主机参数的配置,其中Host name参数为新增主机设置唯一的名字,本例设置的值为ProductMariaDB,Group参数通过Select按钮进行选择,我们默认的选择Linux servers,Agent Interfaces参数中,IP地址设置为被监控主机的IP,本例为192.168.126.244,其他保持默认,完成后点击第三级菜单Templates。

图9-4-25 配置主机参数

接下来界面如图9-4-26所示,点击Link new templates参数右边的select按钮。

图9-4-26 链接模板

接下来界面如图9-4-27所示,勾选前面步骤创建的模板MariaDB Status,然后点击Select按钮。

图9-4-27 选择模板

完成上一步操作后,点击图9-4-26中的Link new templates框中的Add链接完成模板关联,最后点击界面最下面的Add按钮完成主机的添加,注意:如果是在已创建的主机进行修改,界面最下面的Add按钮将变成Update按钮。

【步骤7】配置媒体类型。点击一级链接Administration后继续点击二级链接Media Type,如图9-4-28所示,在下面的列表中然后点击Email。

图9-4-28 邮件系统配置

在如图9-4-29所示的界面中,进行Email服务相关参数的配置,其中SMTP server参数配置为发送邮件服务器地址,本例配置为smtp.mycompany.com,SMTP email参数为zabbix@ mycompany.com,即邮件发送者地址,Connection security选择SSL/TLS,Authentication选择为Username and password,Username输入框输入邮件用户名,Password输入框输入密码,勾选Enabled,最后点击Update按钮进行配置更新。

图9-4-29 邮件系统参数

注意:本例的SMTP Server参数仅为示范配置,需要根据实际环境的邮件服务器配置做相应变化。

【步骤8】配置用户参数。首先点击一级链接Administration ,然后点击二级链接Users,如图9-4-30所示,最后图中下侧列表中的Admin。

图9-4-30 用户配置

接下来界面如图9-4-31所示,在该界面点击三级菜单Media链接。

图9-4-31 用户参数设置

接下来界面如图9-4-32所示,在该界面中,点击Media旁的Add链接,为用户增加各种通知方式的消息接收地址。

图9-4-32 增加接收地址

接下来界面如图9-4-33所示,进行用户通知手段的配置,Type参数选择Email,Send to为收件邮箱地址,本例设置为admin@newcom.com,其他保持默认值,然后点击Add按钮,确认用户邮箱及接收时间等配置信息。

说明:admin@newcom.com地址为示范配置,需要根据实际部署情况进行调整。

图9-4-33 用户收件地址配置

接下来点击图9-4-32中的Update按钮,完成用户参数的配置。

【步骤9】配置动作。先点击一级链接Configuration后继续点击二级链接 Actions,如图9-4-34所示,然后点击下方列表中“Report problems to Zabbix administrators”链接。

图9-4-34 动作配置

接下来界面如图9-4-35所示,在本界面中将New condition参数的三个值依次选择为“Trigger severity”、“is greate then or equals”、“Warning”,然后点击Enabled选项上方的Add链接,勾选Enabled选项,最后点击Update按钮,完成动作配置。

图9-4-35 动作参数配置

9.4.5 SNMP监控部署

本实验运用Linux Net-SNMP软件包提供的snmpd服务,实现对Linux性能数据的监控。

(1) 搭建Linux NET-SNMP环境

在服务器192.168.126.244执行如下命令,安装Linux net-snmp软件包。

yum install -y net-snmp.x86_64

通过vi编辑器,修改/etc/snmp/snmod.conf,需要修改部分的配置如下。

com2sec notConfigUser default    zabbixlab
view  systemview  included  .1.3.6
#view  systemview  included  .1.3.6.1.2.1.25.1.1
proc Zabbix_agentd 10
proc mysqld 10
disk / 10000
disk /boot 10000
load 95 85 80

通过如下命令重启snmpd服务。

Systemctl restart snmpd

(2) 验证Linux NET-SNM环境

在服务器192.168.126.244执行如下命令,安装net-snmp-utils软件包

yum install -y net-snmp-utils.x86_64

执行如下命令,测试snmpd服务是否配置正确。

[root@localhost snmp]# snmpget -v 2c -c zabbixlab 127.0.0.1 .1.3.6.1.2.1.1.1.0

如果能够返回类似下面的服务器的域名及版本信息,则代表服务器SNMP Agent工作正常。

SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64

(3) Zabbix模板配置

通过浏览器登录到Zabbix服务器的管理界面,先点击一级链接Configuration后继续点击二级链接Templates,在出现的界面中点击Create Template按钮,出现如图9-4-36所示界面,在这个界面中,在Template name输入框中输入Linux SNMP,在Groups输入框中选择Templates,然后点击Add按钮,完成模板的添加。

图9-4-36 SNMP采集模板创建

在出现的界面中,先点击一级链接Configuration后继续点击二级链接Templates,出现如图9-4-37所示界面,在Name输入框中输入Linux SNMP,然后点击Apply按钮。然后点击页面下面列表中的Linux SNMP链接进入模板详情页。

图9-4-37 模板搜索

在图9-4-38界面中,点击三级菜单中的Items链接。

图9-4-38 Linux SNMP模板详情

如图9-4-39所示界面,在该界面中右侧点击Create item按钮,进入条目配置界面。

图9-4-39 新增条目

在如图9-4-40界面中的name输入框输入Linux CPU,在Type选择框中选择SNMPv2 agent,在Key输入框中输入cpu,在SNMP OID输入框中输入.1.3.6.1.4.1.2021.10.1.3.1,在SNMP community输入框中输入{$SNMP_COMMUNITY}。

图9-4-40 条目配置

滚动页面在底部,界面如图9-4-41所示,然后点击界面最底部Add按钮,完成监控条目的增加。

图9-4-41 确认条目配置

随后出现的界面如图9-4-42所示,点击页面下部的Linux CPU模板。

图9-4-42 模板结果过滤页

界面如图9-4-38所示,在界面中点击第三级菜单中的Graphs链接,出现图9-4-17所示的界面,在该界面中,点击Create graph按钮,出现如图9-4-43所示界面,在Name输入框中输入Linux CPU,然后点击下面Items框的Add链接。

图9-4-43 SNMP CPU图形配置

随后出现界面如图9-4-44所示,选择Linux CPU条目,然后点击select按钮,最后点击图9-4-43最下面的Add按钮,完成图形的配置。

图9-4-44 图形条目选择

(4) Zabbix 主机配置

通过浏览器登录到Zabbix服务器的管理界面,点击一级链接Configuration后继续点击二级链接Hosts,在界面下部的列表中点击Product MariaDB链接。

图9-4-45 主机配置

出现图9-4-45所示界面,在该界面上点击SNMP interface框的Add链接,出现如图9-4-46所示的界面,在界面的IP Address部分填入IP地址192.168.126.244。

图9-4-46 主机SNMP接口配置

继续点击图9-4-45界面中四级链接Macro,出现如图9-4-47所示界面,在界面点击Macro下方Add链接,随后在出现的两个数据框中分别输入{$SNMP_COMMUNITY}和zabbixlab。

图9-4-47 宏配置

完后输入后,点击界面中第四级菜单中的Templates链接,出现如图9-4-48所示界面,在这个界面中,在Link new templates框中通过Select按钮选择Linux SNMP模板,然后点击Add链接,将模板和主机进行关联,最后点击下部的Update按钮,完成主机设置的修改。

图9-4-48 模板主机关联

9.4.6 Java虚拟机性能监控

下面的实验通过对Tomcat中间件系统的监控,验证Zabbix的JMX监控能力,具体的部署步骤如下。

(1) Java Gateway安装

在192.168.126.240上,使用如下命令,下载Zabbix软件包源代码,并进行配置及安装。

yum install -y java-1.8.0-openjdk-devel.x86_64
yum install -y wget.x86_64
wget HTTPs://cdn.Zabbix.com/zabbix/sources/stable/4.0/zabbix-4.0.22.tar.gz
tar -zxvf zabbix-4.0.22.tar.gz
cd zabbix-4.0.22
./configure --enable-Java
make install

使用vi编辑器,修改文件/usr/local/sbin/Zabbix_Java/settings.sh,修改部分如下:

LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/tmp/Zabbix_Java.pid"

通过vi编辑器,新建文件/usr/lib/systemd/system/zabbix-javagateway.service,内容如下:

[Unit]
DescrIPtion=Zabbix Monitor Agent
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/local/sbin/zabbix_java/startup.sh
ExecStop=/usr/local/sbin/zabbix_java/shutdown.sh
User=zabbix
[Install]
WantedBy=multi-user.target

通过如下命令启动zabbix-javagateway服务。

systemctl daemon-reload
Systemctl start zabbix-javagateway

(2) Zabbix Server的配置

使用vi编辑器编辑文件/etc/zabbix/zabbix_server.conf,修改部分的配置如下:

JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=1

执行如下命令,重启Zabbix Server。

systemctl restart zabbix-server-mysql.service

(3) Tomcat的安装及配置

在192.168.126.244服务器上,使用如下命令安装Tomcat软件包。

yum install -y tomcat.noarch

使用vi编辑器,创建文件/usr/local/java/jmx/jmxremote.password,内容如下:

monitor zabbix

使用vi编辑器,创建文件/usr/local/java/jmx/jmxremote.access,内容如下:

monitor readonly

使用如下命令,修改上面两个文件的权限。

chmod 400 /usr/local/java/jmx/jmxremote.access 
chmod 400 /usr/local/java/jmx/jmxremote.password
chown root:tomcat /usr/local/java/jmx/jmxremote.access 
chown root:tomcat /usr/local/java/jmx/jmxremote.password

使用vi编辑器,编辑文件/etc/tomcat/tomcat.conf,修改部分的内容如下:

Java_OPTS=-Dcom.sun.management.JMXremote -Dcom.sun.management.jmxremote.port=19999 -Djava.rmi.server.hostname=192.168.126.244 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file= /usr/local/java/jmx/jmxremote.password -Dcom.sun.management.jmxremote.access.file= /usr/local/java/jmx/jmxremote.access"

使用如下命令,重启Tomcat服务:

systemctl start tomcat.service

(4) Zabbix 模板的配置

通过浏览器登录到Zabbix管理界面,先点击一级链接Configuration后继续点击二级链接Templates,在出现的界面中,在Name输入框中输入Tomcat,然后点击Apply按钮,出现如图9-4-49所示界面,点击界面中下部列表中的Template App Apache Tomcat JMX链接。

图9-4-49 Tomcat监控模板

出现如图9-4-50所示界面,在该界面中点击Macro宏,修改宏{$PROTOCOL_HANDLER_AJP}的值ajp-bio-8009,修改宏{$PROTOCOL_HANDLER_HTTP}的值为HTTP-bio-8080,通过点击add按钮增加两个宏,分别为{$USER}宏,值为monitor。{$PASSWORD}宏,值为zabbix。

图9-4-50 Tomcat模板宏配置

完成上面的设置后,点击图中底部Update按钮,完成宏参数的设置。在接下来出现的界面中,继续点击Template App Apache Tomcat JMX,在出现的界面中,点击第三级菜单中的Items选项,出现如图9-4-51所示界面:

图9-4-51 Tomcat模板条目配置

在上面的界面中,点击页面下方列表中的任意一个条目,进入条目编辑界面,如图9-4-52所示,在这个界面中,在User name输入框中输入{$USER},在Password输入框中输入{$PASSWORD}。

图9-4-52 条目认证参数配置

滚动页面到底部,出现图9-4-41界面,然后点击Update按钮,更新条目配置

重复上面的步骤,直到所有条目配置都更新完成。

(5) Zabbix主机的配置

通过浏览器登录到Zabbix服务器的管理界面,点击一级链接Configuration后继续点击二级链接Hosts,在出现界面下面的列表中点击Product MariaDB,出现界面如图9-4-53所示,在该界面的JMX interface框中点击Add链接,然后在出现的第一个输入框中输入192.168.126.244,在第三个输入框中输入19999,。

图9-4-53 主机JMX接口配置

在上一步的界面中,点击第三级菜单中的Templates选项,出现如图9-4-54所示界面,在Link new templates框中点击Select按钮,选择Template App Apache Tomcat JMX模板,然后点击Link new templates框中的Add按钮,完成后点击页面最下部的Update按钮,完成主机的配置。

图9-4-54 主机关联Template App Apache Tomcat JMX模板

9.4.7 部署验证

完成Zabbix系统的监控设置后,接下来我们需要对监控系统是否正常运行进行验证,具体的验证内容为历史数据检查。

进入Zabbix管理界面,点击一级链接Monitoring后继续点击二级链接Graphs,出现的界面如图9-4-55所示,在该界面中,选择框Group选为all,选择框Host选择为前面创建的主机Product MariaDB,选择框Graph选择模板中创建图形SQL Query。

图9-4-55 图形过滤选择

完成上一步操作后,界面下面将出现类似图9-4-56的历史数据曲线。

图9-4-56 监控数据曲线图

本章小结

本章以企业IT系统的性能监控需求为引导,介绍了运维监控系统目的及意义,并通过对常见的数据采集技术的原理介绍、结合开源监控软件Zabbix的部署,让读者通过本章的学习,能够掌握企业运维监控系统的安装、部署的基本技能,保障企业IT系统的健康运转。

本章习题

一、选择题

(1)网络设备性能数据采集的主要手段是( )。

A. JMX

B.SNMP

C.IPMP

D.SSH

(2)下面哪种媒体类型不是Zabbix内置的( )。

A.Email

B.Jabber

C.SMS

D.wechat

(3)下面那个数据,在Zabbix中代表具体的性能数据的采集( )。

A.item

B.Template

C.Trigger

D.Action

(4) 下面那个Zabbix组件,用于Java虚拟机JMX性能数据的采集( )

A.Java Gateway

B.Zabbix Proxy

C. Zabbix Web

D.Zabbix Server

5.Zabbix是一个( )系统。

A.监控系统

B.数据库系统

C.办公OA系统

D.通讯软件

(6)下面哪种数据采集方式,不是Zabbix支持的( )。

A.CMP

B.Zabbix Agent

C.SNMP

D.JMX

二、多项选择题

(1)Zabbix Template中,支持下面那些配置项 ( )。

A. item

B. graph

C.Trigger

D.Action

2.要完成异常的告警,Zabbix需要做如下那些配置( )。

A.host的配置

B.item的配置

C.Trigger的配置

D.Action的配置

三、判断题

1.Trigger的作用是定义异常的判断标准。

2.Template的作用是简化监控配置的作用。

3.Zabbix不支持使用SNMP协议采集交换机性能数据。