监控系统基本介绍:
企业级应用中,服务器数量众多,一般情况下需要维护人员进行长时间对服务器体系、计算机或其他网络设备(包括硬件和软件)进行长时间进行性能跟踪,保证正常稳定安全的运行,于是有了监控系统。
运维行业有句话:“无监控、不运维”,监控俗称“第三只眼”。没了监控,什么基础运维,业务运维都是“瞎子”。所以说监控是运维这个职业的根本。尤其是在现在DevOps这么火的时候,用监控数据给自己撑腰,这显得更加必要,有人说运维是背锅侠,那么,有了监控,有了充足的数据,一切以数据说话,运维还需要背锅吗,所以作为一个运维工程师,如何构建一套监控系统是你的第一件工作。
监控功能
在需要的时刻,提前预警即将出问题,避免故障发生实时监控系统和业务,当出问题之后,通过发出告警,提醒相关人员,快速可以找到问题的根源,从而及时处理问题,可以实现网站,应用或者服务器的故障自愈, 保证高可用性以图形或易观察的方式呈现当前以及过往的状态,便于分析和预测系统发展趋势

开源监控软件:cacti(监控snmp协议,流量数据)、nagios(报警系统,支持多种插件)、zabbix(支持分布式,故障自愈)、smokeping(Windows监控系统)、open-falcon(小米猎鹰)、滴滴夜莺Nightingale、Prometheus(容器和云莺监控)等
商业监控方案:http://ping.chinaz.com/ 站长之家
https://www.jiankongbao.com/ 监控宝
https://www.toushibao.com/ 透视宝
https://www.tingyun.com/ 听云

监控的从业务角度,从上到下
①:业务监控(监控pv量、业务指标等)
②:应用监控
③:操作系统监控
监控模式:
①:IPMI:基于硬件的监控模式,基于IPMI,对硬件的本身做监控
②:SNMP:网络数据监控,可以监控防火墙,路由器
③:agent:普通监控模式,代理端(server-agent),被监控主机都需装agent
④:Proxy:分布式监控,每个proxy都有自己的存储体系,如:MySQL,Pgsql
⑤:API:第三方API,实现其他类型的监控
Zabbix基本介绍
Zabbix 是一个企业级解决方案,支持实时监控数千台服务器,虚拟机和网络设备,采集百万级监控指标。Zabbix 完全开源免费。
Zabbix 的主要特点有:
指标收集:从任何设备、系统、应用程序上进行指标采集
问题监测:定义智能阈值(安全线)
可视化:单一界面管理平台(UI界面统一页面管理)
告警和修复:确保及时、有效的告警
安全和认证:保护您所有层级的数据
轻松搭建部署:大批模板,开箱即用,节省您宝贵的时间
自动发现:自动监控大型动态环境
分布式监控:无限制扩展
ZABBIX API :将 Zabbix 集成到您 IT 环境的其他任何部分
Zabbix完整监控流程:

首先在被监控端安装agent应用程序,让它作为zabbix的被监控端。那么装了zabbix的被监控端就有数据采集的能力,它们会基于主动模式或者被动模式,将对应的历史数据,或者是趋势数据直接传输到zabbix服务端,其服务端会将数据进行汇集,将历史数据存储到数据库,并且会关联它的认证权限系统,将对应的趋势数据放到数据展示区,基于特定的数据格式UI展示出来。同时将其对应的数据汇集到告警策略区,一旦涉及到数据指标超阈值的行为,会触发告警策略,然后会关联到用户管理系统,认证权限系统,媒介系统,动作系统;然后将其发送告警,发送告警会关联后面的告警媒介,基于邮件、微信、电话短信来进行告警。同时将告警的event事件存储到事件管理器,在组合面板控制区展示出来。最后故障修复之后,事件管理器会重新定义事件,将对应修复的故障将其移除。
Zabbix的主要功能:
Zabbix采集到的数据分类
1:历史数据:每一个收集到的监控数据
2:趋势数据(绘图数据)
SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware 监控
灵活的阈值定义
可以参考后端数据库定义非常灵活的告警阈值,即触发器
高度可配置化的告警
可以根据递增计划、接收者、媒介类型自定义发送告警通知;
使用宏变量可以使告警通知变得更加高效有用;
自动操作包含远程执行命令(基于root用户)。
实时图形
使用内置图形功能可以将监控项实时绘制成图形。 Web 监控功能 Zabbix可以追踪模拟鼠标在 Web 网站上的点击操作,来检查 Web 网站的功能和响应时间。
丰富的可视化选项
可以组合多个监控项到单个视图中,创建自定义图表;
网络拓扑图;
以仪表盘样式展示自定义聚合图形和幻灯片演示;
报表;
监控资源的更高层次展示视图(业务视图)。
历史数据存储
存储在数据库中的数据;
历史配置; https://www.zabbix.com/documentation/5.0/zh/manual/introduction/features
内置数据管理机制
配置简单
将被监控设备添加为主机;
主机一旦添加到数据库中,就会采集数据用于监控;
将模板用于监控设备。
使用模板
模板中分组检查;
模板可以关联模板,继承已关联模板的属性。
网络发现
自动发现网络设备;
Zabbix Agent 发现设备后自动注册;
自动发现文件系统、网络接口和 SNMP OIDs 值。
快捷的 Web 界面
基于 PHP 的 Web 前端;
可以从任何地方访问;
可以定制自己的操作方式;
可以通过审计日志来查看你的操作。
Zabbix API
Zabbix API 为 Zabbix 提供可编程接口,用于批量操作、第三方软件集成和其他用途。
权限管理系统
安全的用户身份验证;
指定的用户只能查看指定的权限范围内的视图。
功能强大且易于扩展的 Zabbix Agent
部署于被监控对象上;
支持 Linux 和 Windows
二进制守护进程
为了更好的性能和更少的内存占用,采用 C 语言编写;便于移植。
适应更复杂的环境
使用 Zabbix Proxy 代理,可以轻松实现分布式远程监控
Zabbix架构

首先zabbix支持多种模式 ,它支持zabbix-server到zabbix-agent模式,也支持zabbix-server到zabbix-proxy模式。架构是zabbix-server同时关联多个zabbix agent,将zabbix agent对应的历史数据和趋势数据存储到它对应的database中,然后再通过zabbix-web端,也就是nginx展示出来。其次如果zabbix要支持proxy代理模式,那么我们只需要授权zabbix proxy,让其监听在特定的端口。而proxy会独立的管理下属zabbix agent,并将zabbix agent对应的数据,独立存储到proxy的database里面去。作为 zabbix server只是遥控zabbix proxy ,将其zabbix proxy 收集到的指标对应的数据,放到其zabbix server对应的zabbix web的图表展示区,zabbix server并没有存储各个代理节点数据库的功能。
同时zabbix还支持java的指标数据库监控,但其有一个缺点,因为zabbix是基于php体系开发的,不支持java的技术体系,而java技术体系是基于类和对象的方式来抽象组织数据。zabbix基于fastcgi来管理其对应的数据管理协议。也就是说zabbix在做绘图处理数据指标收集的时候,它的数据传递模式默认是基于fastcgi,但是java不支持fastcgi。为了去收集图表化展示的java数据,我们必须让java应用支持fastcgi,于是我们需要安装一个JMX的一个类(Java只要安装了jdk/jre,都支持JMX类,JMX就是面向监控系统的统一调用接口的API,有了这个API,就说明java的所有应用体系都支持zabbix的监控,但是要关联其fastcgi对应的接口,所以我们需要java getway这个网关将其抽象为fastcgi接口),也就是说一旦zabbix关联的javagetway,并且将java技术体系内部所有的应用程序支持javagetway,将其绑定起来。这时候我们基于JMX这个类收集到的指标就可以被zabbix-server所支持,最终可以被图表展示出来。

SERVER
Zabbix server 是 Zabbix 软件的核心组件
Zabbix Agent 向其报告可用性、系统完整性信息和统计信息。
Zabbix server也是存储所有配置信息、统计信息和操作信息的核心存储库。
Zabbix server也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将发出通知给管理员。
基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是:Zabbix server、Web前端和数据库。
Zabbix 的所有配置信息都存储在 Server和Web前端进行交互的数据库中。例如,当你通过Web前端(或者API)新增一个监控项时,它会被添加到数据库的监控项表里。然后,Zabbix server 以每分钟一次的频率查询监控项表中的有效项,接着将它存储在 Zabbix server 中的缓存里。这就是为什么 Zabbix前端所做的任何更改需要花费两分钟左右才能显示在最新的数据段的原因。
数据库
所有配置信息以及 Zabbix 采集到的数据都被持久存储在数据库中
可以支持MySQL,PostgreSQL,Oracle 等多种数据库
WEB 界面
WEB 界面是 Zabbix server 的一部分,用于实现展示和配置的界面
通常(但不一定)和 Zabbix server 运行在同一台物理机器上
基于 Apache(Nginx)+PHP 实现,早期只支持LAMP架构,从Zabbix5.0开始支持LNMP
AGENT
Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给
Zabbix server。从Zabbix5.0开始支技Zabbix Agent2
PROXY
Zabbix Proxy 可以代替 Zabbix Server 采集性能和可用性数据
Zabbix Proxy 在 Zabbix 的部署是可选部分
Zabbix Proxy 的部署可以很好的分担单个Zabbix server的负载
Java 网关
Zabbix 要监控 tomcat 服务器和其它JAVA程序,需要使用 Java gateway 做为代理,才能从JAVA程序中获取数据
内部配置的数据流程
Zabbix 内部的数据流对Zabbix的使用也很重要。首先,为了创建一个采集数据的监控项,就必须先创建主机。其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action)。因此,如果您想要收到类似“X个server上CPU负载过高”这样的告警,您必须首先为 Server X 创建一个主机条目,其次创建一个用于监控其 CPU的监控项,最后创建一个触发器,用来触发 CPU负载过高这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。
Zabbix 术语
被监控: 即 Zabbix 监控的主机或设备
监控项item:即 Zabbix 监控的相关指标,比如:CPU利用率,内存使用率,TCP连接数等
应用集Application:为方便管理众多的监控项,可将多个同类型的监控项进行归类,纳入一个集合中,即应用集
触发器Trigger:是一个表达式,或者说一个条件,如磁盘利用率超过80%等,当触发条件后,会导致一个触发事件,这个事件会执行一个或多个动作
动作Action:动作是触发器的条件被触发后的行为,可以是发送一条短信,微信或邮件,或是重启某个服务
告警:当触发器和动作二者结合起来时,就构成了的告警机制,比如cpu的使用率达到80%以上,触发了报警动作,系统将自动发送一封邮件到指定的邮箱。然后运维可以及时的去处理此错误。
Web 监测:对WEB服务进行检测,比如:访问指定网站是否可正常访问
模板 Template: 可以方便地应用于多个主机的一组实体的集合。而这些实体包括:
items(监控项)
applications(应用集)
triggers(触发器)
graphs(图形)
screens (聚合图形,自Zabbix 2.0起)
陷入器(trapper)——用于处理主动采集、陷入以及分布式节点间或服务器代理的通信
不可到达轮询器(unreachable poller)——用于轮询不可到达到的设备
vmware 收集器(vmware collector)——负责从vmware服务进程中收集数据(服务器代理端不支持这种类型的进程);
可用的mode参数包括:
avg——指定类型所有进程的平均值
count——返回创建的指定类型进程的数量
max——最大值
min——最小值
——进程号,含义参见“描述”中所述的;
可用的state参数包括:
繁忙(busy)——表示处于繁忙状态的进程;
空闲(idle)——表示处于空闲状态的进程;
low-level discovery rules (自动发现规则 ,自Zabbix 2.0起)
web scenarios (web场景, 自Zabbix 2.0起)。
zabbix的安装和基本操作
Zabbix 安装要求
https://www.zabbix.com/documentation/6.0/zh/manual/installation/requirements
https://www.zabbix.com/documentation/5.0/zh/manual/installation/requirements
https://www.zabbix.com/documentation/4.0/zh/manual/installation/requirements
安装 Zabbix Server
Zabbix Server 安装方法介绍
二进制包安装: 官方提供了二进制包安装的方法,可以支持CentOS和Debian/Ubuntu的安装
源码编译安装: 部署繁琐,生产环境定制安装可以使用
基于容器安装: 测试环境使用
zabbix配置文件详解:
zabbix server配置文件/etc/zabbix/zabbix_server.conf
zabbix agent配置文件/etc/zabbix/zabbix_agentd.conf
zabbix 监听端口
10051:server
10050:agent
10052:java gateway
日志文件所在路径

zabbix配置文件详解
日志到500M自动滚动
![]()
日志级别
![]()
默认pollers进程(预启动多少个实例数量)
![]()
预启动多少进程用于处理zabbix agent数据
![]()
启动多少进程用于检测不可达主机的运行状态
![]()
启动多少Ping进程(若检测网络设备多,可以多调)
![]()
![]()
启动多少http进程用于前端接收web页面的处理
![]()
进程的初始实例数量,用于处理动作中的自动同步步骤的进程的数量。实战环境要调
![]()
是否开启SNMP检测进程
![]()
每隔多少小时清理一次代理端数据库的history数据
![]()
每次最多删除历史数据的行数
![]()
监控缓存数量调整,根据实际内存来决定
![]()
内存缓存的数据更新周期,单位为秒
![]()
数据同步进程数量
![]()
历史数据缓存
![]()
历史数据索引缓存的大小
![]()
设置划分系统多少共享内存用于存储计算出来的趋势数据,此值可能影响数据库的压力
内存大可以多调
![]()
历史数据缓存值共享内存的大小。
![]()
获取监控数据的超时时长
![]()
当主机不可用了,多久检查一次该主机的可用性,单位为秒
![]()
监控网络设备的命令行工具
![]()
慢查询日志,单位为毫秒
![]()
开启多少proxy代理进程,用于搜集proxy代理监控数据
![]()
proxy被动模式下,server多少秒同步配置文件至proxy。
![]()
被动模式下,zabbix server间隔多少秒向proxy请求历史数据
![]()
zabbix对其他主机进行监控
在agent主机上安装zabbix-agent,并启动agent。
vim /etc/zabbix/zabbix_agentd.conf
![]()
![]()
![]()
![]()
systemctl enable --now zabbix-agent
zabbix对tomcat进行监控
tomcat基于java体系,zabbix-server需要安装java-gateway中间系统才能对后台tomcat进行监控
同时需要在tomcat内开启JMX监控
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote #启用远程监控JMX
-Dcom.sun.management.jmxremote.port=12345 #默认启用的JMX端口号,要和zabbix添加主机时候的端口一致即可
-Dcom.sun.management.jmxremote.authenticate=false #不使用用户名和密码
-Dcom.sun.management.jmxremote.ssl=false #不使用ssl认证
-Dcom.rmi.server.hostname=192.168.10.120"
在zabbix server端需要安装zabbix-java-gateway
yum -y install zabbix-java-gateway
对zabbix-java-gateway进行配置
vim /etc/zabbix/zabbix_java_gateway.conf
![]()
![]()
![]()
systemctl start zabbix-java-gateway
同时对zabbix server进行配置
![]()
![]()
![]()
![]()
![]()
然后在zabbix的监控页里取配置主机对应的模板



















