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界面的提供企业级的开源分布式系统监视以及网络监视功能的企业级的开源解决方案。
Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。是一个基于WEB界面的提供企业级的开源分布式系统监视以及网络监视功能的企业级的开源解决方案。
Agent端:主机通过安装agent方式采集数据
Server端:通过收集agent发送的数据,写入数据库(MySQL,ORACLE),在通过php+apache/nginx在web前端展示
优点:基于两款工具(cacti+Nagios)优点于一身并更强大,实现企业级分布式监控
缺点:需在被监控主机上安装agent,所有数据都存在数据库里,产生的数据量很大,瓶颈主要在数据库
Zabbix agent需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。
这里agent收集数据分为主动和被动两种模式:
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 # 代理服务器,可选
主机组(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.load[<cpu>,<mode>]
system.cpu.num[<type>]
system.cpu.switches
system.cpu.util[<cpu>,<type>,<mode>]
磁盘IO或文件系统相关:
vfs.dev.read[<device>,<type>,<mode>]
vfs.dev.write[<device>,<type>,<mode>]
vfs.fs.inode[fs,<mode>]
用户可自定义item:
关键:选取一个惟一的key
命令:收集数据的命令或脚本
4、触发器(trigger):一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从"OK"转变为"Problem",当数据再次恢复到合理范围,又转变为"OK"
状态:
OK
PROBLEM:有事件发生;
zabbix server每次接收到items的新数据时,就会对Item的当前采样值进行判断,即与trigger的表达式进行比较
一个trigger只能属于一个Item, 但一个Item可以有多个trigger;
Severity:
Not classified # 未知级别,灰色
Information # 一般信息,亮绿
Warning # 警告信息,黄色
Average # 一般故障,橙色
High # 高级别故障,红色
Disater # 致使故障,亮红
Trigger:
名称中可以使用宏:
{HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.CONN}, {HOST.DNS}
5、事件(event):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等
触发条件一般为事件:
Trigger events: OK --> PROBLEM
Discovery events: zabbix的network discovery工作时发现主机
Auto registration events:主动模式的agent注册时产生的事件
Internal events:Item变成不再被支持,或Trigger变成未知状态
6、动作(action):指对于特定事件事先定义的处理方法,如发送通知,何时执行操作
动作:
send message
Remote command
配置send message:
(1) 定义好Media
(2) 定义好用户
(3) 配置要发送的信息
7、报警升级(escalation):发送警报或者执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送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场景(web scennario):用于检测web站点可用性的一个活多个HTTP请求
14、前端(frontend):Zabbix的web接口
system.cpu.load[,], net.if.inbound[if,]
触发器表达式:{
示例:{node2.magedu.com:net.if.in[eth0,bytes].last(#1)}>1200
:评估采集到的数据是否在合理范围内时所使用的函数;其评估过程可以根据采集到的数据、当前时间或其它因素;avg, count, change, date, dayofweek, dayofmonth, delta, diff, iregexp, regexp, last, max, min, nodata, now, prev, str, strlen, sum
regexp # 检查最后一次采样的数据是否能够被指定的模式所匹配;1表示匹配,0表示不匹配;
now # 返回自Unix元年至此刻经历的秒数;
prev # 倒数第二个采样值;
str # 从最后一次的采样中查找此处指定的子串;
strlen
<operator>:
>, <, =, #(不等于)
/, *, -, +
&, |
# message
# condition
event:
trigger
disovery:
Service Up, Service Down, Host up, Host Down, Service Discovered, Service Lost, Host Discovered, Host Lost
auto_registration
lld
LLD: Low Level Discovery(自动发现特定变量的名称)
#IFNAME, #FSNAME(添加针对对变量的Items)
# operation
send message
Media Type
Email, SMS, Jabber, Script, EZ Texting
User
remote command
(1) 给zabbix定义sudo规则
zabbix ALL=(ALL) ALL
(2) 不支持active模式的agent
(3) 不支持代理模式
(4) 命令长度不得超过255个字符
(5) 可以使用宏
(6) zabbix-server仅执行命令,而不关心命令是否执行成功
# 前提:zabbix-agent要配置为支持执行远程命令:EnableRemoteCommands=1
# 注意
(1) 如果用到以其它用户身份执行命令的话,那么命令本身要以sudo方式运行:
sudo /etc/rc.d/init.d/httpd restart
(2) 在各agent上的sudoers文件,要注释如下行:
Defaults requiretty
# Script:Alert Script
放置于特定目录中:AlertScriptsPath=/usr/lib/zabbix/alertscripts
zabbix_server.conf配置文件中的参数
# 脚本中可使用$1, $2, $3来调用 action 中的 邮件的收件人, Default Subject, Default Message;
# 注意:新放入此目录中的脚本,只有重启zabbix-server方能被使用
# zabbix 内置了许多item key
# 实现用户自定义item key, 实现特有数据指标监控
# 语法:
UserParameter=<key>,<command>
# 示例:
UserParameter=os.memory.used, free -m | awk '/^Mem/{print $3}'
UserParameter=os.memory.total, free -m | awk '/^Mem/{print $2}'
UserParameter=Mysql.dml[*], /usr/local/mysql/bin/mysql -h$1 -u$2 -p$3 -e 'SHOW GLOBAL STATUS' | awk '/Com_$4\>/{print $$2}'
两类:
内建:{MACRO_NAME}
自定义:{$MACRO_NAME}
可以三个级别使用:
Global, Template, Host
优先级:Host --> Template --> Global(在某级别找到后将直接使用)
# 可视化
# graph, screen, slide shows, map
# 模板:一系列配置的集合,此些配置可通过“链接”的方式应用于指定的主机;
# application, item, trigger, graph, screen, discovery, web
# 维护时间:Configuration --> Maintance
在实际监控架构中,zabbix根据网络环境、监控规模等 分了三种架构: server-client 、master-node-client、server-proxy-client三种 。
1、server-client架构
也是zabbix的最简单的架构,监控机和被监控机之间不经过任何代理 ,直接由zabbix server和zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境 。
2、server-proxy-client架构
其中proxy是server、client之间沟通的一个桥梁,proxy本身没有前端,而且其本身并不存放数据,只是将agentd发来的数据暂时存放,而后再提交给server 。该架构经常是和master-node-client架构做比较的架构 ,一般适用于跨机房、跨网络的中型网络架构的监控。
3、master-node-client架构
该架构是zabbix最复杂的监控架构,适用于跨网络、跨机房、设备较多的大型环境 。每个node同时也是一个server端,node下面可以接proxy,也可以直接接client 。node有自已的配置文件和数据库,其要做的是将配置信息和监控数据向master同步,master的故障或损坏对node其下架构的完整性。
依赖关系:
# Host --> Item --> Trigger --> Action --> Notice, Command
Zabbix完整的监控配置流程大体上由如下步骤组成:
# Host group --> Hosts --> Applications --> Items --> Triggers --> Events --> Actions --> User groups --> Users --> Medias
由zabbix监控某关注的指标:
# host group --> host --> item (存储于MySQL)--> graph (zabbix-web) --> trigger(触发器) --> action(conditon+operation)
# application:把功能相近的一组item归类在一起统一进行管理组件
network discovery
HTTP、ICMP、SSH、LDAP、TCP、SNMP、Telnet、Zabbix_agent
扫描指定网络内的主机discovery --> action
discovery:
Service Discovered, Service Lost, Service Up, Service Down
Host Discovered, Host List, Host Up, Host Down
actions:
Sending notifications
Adding/removing hosts
Enabling/disabling hosts
Adding hosts to a group
Removing hosts from a group
Linking hosts to/unlinking from a template
Executing remote scripts
Active Agent Auto-Registration
HostMetadata
支持使用agent(active)类型的item key
配置过程
(1) 定义agent端:
ServerActive=
Server=
Hostname=
ListenIP= 设置为本机某特定IP;
ListenPort=
HostMetadata=
HostMetadataItem=item key, 一般使用system.uname
(2) 配置action, 要求其事件来源为auto-registation
zabbix-web所能够显示的且可指定为监控接口类型的监控方式:
操作:Get, GetNext, Set, Response, Trap
MIB: 是被管理对象的集合,而且还额外定义了被管理对象的名称、访问权限、数据类型等属性;
MIB视图:MIB的子集
授权:将某MIB视图与某Community绑定来实现;
OID:Object ID, 1.3.6.1.2.1
1: system
2: interface
4: ip
6: tcp
7: udp
(1) 安装zabbix-java-gateway;
配置文件:/etc/zabbix/zabbix_java_gateway.conf
Listen_IP=
Listen_PORT=10052
zabbix server的配置文件/etc/zabbix/zabbix_server.conf
JavaGateWay=
JavaGateWayPort=10052
(2) Java应用程序开户JMX接口:
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10053 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false