Zabbix 的基础概念、原理和架构
Zabbix 基础概念
1、Zabbix 简介
Zabbix是由Alexei Vladishev开发的一种网路监视、管理系统,基于Server-Client架构。 可用于监视各种网路服务、 伺服器和网路机器等状态。
Zabbix使用MySQL 、 PostgreSQL 、 SQLite 、 Oracle或IBM DB2储存资料。 Server端基于C语言 、Web前端则是基于PHP所制作的。 Zabbix 可以使用多种方式监视。 可以只使用Simple Check 不需要安装Client 端,亦可基于SMTP 或HTTP 等各种协定做死活监视。 在客户端如UNIX、Windows 中安装Zabbix Agent 之后,可监视CPU 负荷、网路使用状况、硬碟容量等各种状态。 而就算没有安装Agent在监视对象中,Zabbix也可以经由SNMP 、 TCP 、 ICMP检查,以及利用IPMI、 SSH 、 telnet对目标进行监视。 另外,Zabbix包含XMPP等各种Item警示功能。
Zabbix的授权是属于GPLv2 。
Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。是一个基于WEB界面的提供企业级的开源分布式系统监视以及网络监视功能的企业级的开源解决方案。
2、Zabbix 优缺点
Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。是一个基于WEB界面的提供企业级的开源分布式系统监视以及网络监视功能的企业级的开源解决方案。
-
Agent端:主机通过安装agent方式采集数据
-
Server端:通过收集agent发送的数据,写入数据库(MySQL,ORACLE),在通过php+apache/nginx在web前端展示
-
优点:基于两款工具(cacti+Nagios)优点于一身并更强大,实现企业级分布式监控
-
缺点:需在被监控主机上安装agent,所有数据都存在数据库里,产生的数据量很大,瓶颈主要在数据库
Zabbix 基础原理
Zabbix agent需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。
这里agent收集数据分为主动和被动两种模式:
- 主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
- 被动:server向agent请求获取监控项的数据,agent返回数据
Zabbix 基础架构
1、Zabbix 组件及常见进程
zabbix_server # 服务端守护进程
zabbix_agented # agent 守护进程
zabbix_database # 存储系统,支持MySQL/PGSQL
zabbix_web # web GUI
zabbix_get # 命令行工具,测试向 agent 端发起数据采集请求
zabbix_sender # 命令行工具,测试向 server 端发送数据
zabbix_java_gataway # java 网关
zabbix_proxy # 代理服务器,可选
- Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行
- Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据
- Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上
- Proxy:可选组件,常用于分布监控环境中,代理Server收集部分被监控端的监控数据并统一发往Server端
- Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Proxy端
- zabbix_get:zabbix工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令。通常用户排错。例如在server端获取不到客户端的内存数据,我们可以使用zabbix_get获取客户端的内容的方式来做故障排查
- zabbix_sender:zabbix工具,用于发送数据给server或者proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致zabbix超时。于是我们在脚本执行完毕之后,使用sender主动提交数据
- zabbix_server:zabbix服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server(备注:当然不是数据都是主动提交给zabbix_server,也有的是server主动去取数据)
- zabbix_proxy:zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里。为什么要用代理?代理是做什么的?卖个关子,请继续关注运维生存时间zabbix教程系列
- zabbix_java_gateway:zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy
2、Zabbix 常见术语
主机组(host groups)
主机(hosts)
应用(applications)
监控项(items)
触发器(triggers)
事件(events)
动作(actions):条件(conditions)和操作(operations)
媒介(media):发送邮箱通知
通知(notifications)
远程命令(remote command)
报警升级(escalation)
模版(template)
图形(graph)
屏幕(screens)
幻灯(slide show)
-
1、主机(host):要监控的网络设备,可由IP或DNS名称指定
-
2、主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组织内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用
-
3、监控项(item):一个特定监控指标的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由"key"标识
默认的 Items 有多种类型: Zabbix-agent: 工作模式:passive, active 网卡流量相关: net.if.in[if,<mode>] if: 接口,如eht0 mode: bytes, packets, errors, dropped net.if.out[if,<mode>] net.if.total[if.<mode>] 端口相关: net.tcp.listen[port] net.tcp.port[<ip>,port] net.tcp.service[service,<ip>,<port>] net.udp.listen[port] 进程相关: kernel.maxfiles kernel.maxproc CPU相关: system.cpu.intr system.cpu.