一、监控软件的作用
作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果和网站的健康状态
利用一个优秀的监控软件,我们可以:
- 对系统不间断实时监控
- 实时反馈系统当前状态
- 保证服务可靠性安全性
- 保证业务持续稳定运行
二、zabbix 的概念
2.1 Zabbix是什么
zabbix是一个基于 Web界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
zabbix由2部分构成,zabbix server(端口:10051) 与可选组件 zabbix agent(端口:10050)。通过 C/S模式采集数据,通过 B/S 模式在 web 端展示和配置。
zabbix server 可以通过SNMP,zabbixagent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能它可以运行在 inux 等平台上。
zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。
Server
Zabbix Server需运行在LAMP(Linux+Apache+Mysql+PHP)环境下,对硬件要求低
Agent目前已有的agent基本支持市面常见的OS,包含Linux、HPUX、Solaris、Sun、windows等
SNMP支持各类常见的网络设备
2.2 zabbix监控原理
zabbix agent安装在被监控的主机上,zabbix agent负责定期收集客户端本地各项数据,并发送至 zabbix server端
zabbix server收到数据后,将数据存储到数据库中
用户基于 Zabbix WEB 可以看到数据在前端展现图像
当zabbix监控某个具体的项目, 该项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,包括发送信息(邮件、微信、短信)、发送命令(shell 命令、reboot、restart、install 等)
2.3 Zabbix的优点
开源,无软件成本投入
Server对设备性能要求低
支持设备多,自带多种监控模板
支持分布式集中管理,有自动发现功能,可以实现自动化监控
开放式接口,扩展性强,插件编写容易
当监控的 item 比较多服务器队列此较大时可以采用主动状态,被监控客户端主动从server端去下载需要监控的item然后取数据上传到server端。这种方式对服务器的负载比较小。
Api的支持,方便与其他系统结合
2.4 Zabbix的缺点
需在被监控主机上安装agent,所有数据都存在数据库里,产生的数据据很大,瓶颈主要在数据库。
项目批量修改不方便。
社区虽然成熟,但是中文资料相对较少,服务支持有限。
入门容易,能实现基础的监控,但是深层次需求需要非常熟悉Zabbix并进行大量的二次定制开发难度较大。
系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;且自定义的项目报警需要自己设置,过程比较繁琐。
缺少数据汇 总功能,如无法查看-组服务器平均值, 需进行二次开发;
2.5 Zabbix监控系统的监控对象
类型 典型代表服务 安装的服务
数据库 MySQL,MariaDB,Oracle,SQL Server agent
应用软件 Nginx,Apache, PHP,Tomcat agent
集群 LVS,Keepalived,HAproxy,RHCS,F5 agent
虚拟化 VMware,KVM,XEN ,docker ,k8s agent
操作系统 Linux,Unix,Windows性能参数 agent
硬件 服务器,存储,网络设备 IPMI
网络 网络环境(内网环境,外网环境) SNMP
三.Zabbix的监控架构
在实际监控架构中,zabbix根据网络环境、监控规模等分了三种架构: server-client 、master-node-client、server-proxy-client
3.1 server-client架构
- zabbix的最简单的架构
- 监控机和被监控机之间不经过任何代理 ,直接由zabbix server和zabbix agentd之间进行数据交互
- 适用于网络比较简单,设备比较少的监控环境
3.2.server-proxy-client架构
其中proxy是server、client之间沟通的一个桥梁,proxy本身没有前端,而且其本身并不存放数据,只是将agentd发来的数据暂时存放,而后再提交给server
该架构经常是和master-node-client架构做比较的架构 ,一般适用于跨机房、跨网络的中型网络架构的监控
3.3 master-node-client架构
该架构是zabbix最复杂的监控架构,适用于跨网络、跨机房、设备较多的大型环境 。
每个node同时也是一个server端,node下面可以接proxy,也可以直接接client 。
node有自已的配置文件和数据库,其要做的是将配置信息和监控数据向master同步,master的故障或损坏对node其下架构的完整性
四、Zabbix的程序组件
1.Zabbix agent:客户端守护进程,负责部署在被监控主机上,把被监控主机的数据传送给zabbix server,例如:收集 CPU 负载、内存、硬盘使用情况等;
2.Zabbix server:服务端守护进程,负责接收agent发送的信息,组织配置信息,统计配置信息和操作数据等
3.Zabbix database:存储系统,用于存储zabbix的所有配置信息,监控数据的数据库,例如mysql, pgsq|
4.Zabbix web:GUI图形化界面,zabbix的web界面,管理可以通过zabbix的web界面管理zabbix配置以及查看zabbix的监控信息,可以独一部署在一台服务器上
5.Zabbix proxy:zabbix分布式代理守护进程,分布式环境中使用,zabbix proxy代表server端管理该区域中的信息收集,最终统一发往zabbix server
6.Zabbix get:zabbix 数据接收工具,单独使用的命令,通常在 server 或者 proxy 端执行获取远程客户端信息的命令
7.Zabbix sender:zabbix 数据发送工具,用户发送数据给 server 或 proxy 端,通常用户耗时比较长的检查
8.Zabbix_ java_ gateway:java网关
五、Zabbix的监控模式
1. 主动模式
主动检测: 由agent端主动收集信息发送给server端 工具是zabbix_sender
相对于agent而言; agent(active),agent向server请求与自己相关监控项配置, 主动地将server配置的监控项相关的数据发送给server;
主动监控能极大节约监控server的资源。
2.被动模式
被动检测:由server端主动拉取信息 工具是zabbix_get
相对于agent而言 ; agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
六.Zabbix监控有哪些?
1.硬件监控:通过 SNMP 来进行路由器交换机的监控
系统监控:如 CPU 的负载,上下文切换、内存使用率、磁盘读写、磁盘使用率、磁盘 inode 节点
2.服务监控:比如公司用 LNMP nginx 自带 Status 模块、 PHP 也有相关的 Status 、 MySQL 的话可以通过 ODBC协议 来进行监控
3.网络监控:如果是云主机又不是跨机房,那么可以选择不监控网络
4.安全监控:如果是云主机可以考虑使用自带的安全防护。当然也可以Zabbix监控 iptables 如果是硬件,那么推荐以Zabbix监控硬件防火墙
5.Web 监控:web 监控的话题其实还是很多。比如可以使用自带的 web 监控来监控页面相关的延迟、 js 响应时间、下载时间、等等
6.日志监控:如果是 web 的话可以使用监控 Nginx 的 500x 日志。PHP 的 ERROR 日志
7.流量分析:平时我们分析日志都是拿 awk sed xxx 一堆工具来实现。这样对我们统计 ip 、 pv 、 uv 不是很方便。那么可以使用百度统计、 google 统计、商业,让开发嵌入代码即可 (不想关建议去掉)
8.可视化:通过 screen 以及引入一 些第三方的库来美化界面,同时我们也需要知道、订单量突然增加、 突然减少。或者说突然来了一大波流量,这流量从哪儿来,是不是推广了,还是被攻击了。可以结合监控平台来梳理各个系统之间的业务关系
9.自动化监控:如上我们做了那么多的工作,当然不能是一台一台的来加 key 实现。可以通过Zabbix 的主动模式以及被动模式来实现。当然最好还是通过 API 来实现