Zabbix 的基础概念、原理和架构

Zabbix 的基础概念、原理和架构

  • Zabbix 基础概念
    • 1、Zabbix 简介
    • 2、Zabbix 优缺点
  • Zabbix 基础原理
  • Zabbix 基础架构
    • 1、Zabbix 组件及常见进程
    • 2、Zabbix 常见术语
    • 3、Zabbix 其它术语
      • 3.1 Item key
      • 3.2 Trigger Expressions
      • 3.3 Action
      • 3.4 User Parameters
      • 3.5 宏
      • 3.6 可视化、模版、维护时间
    • 4、Zabbix 监控架构
    • 5、Zabbix network discovery
    • 6、Zabbix auto_registation
    • 7、Zabbix 监控方式
      • 7.1 SNMP 监控方式
      • 7.2 JMX 监控方式

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 基础架构

Zabbix 的基础概念、原理和架构_第1张图片

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.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接口

3、Zabbix 其它术语

3.1 Item key

  • 命名要求:只能使用字母、数字、下划线、点号、连接符
  • 接受参数;system.cpu.load[,], net.if.inbound[if,]
  • 注意:每个key背后都应该有一个命令或脚本来负现实现数据收集;此命令或脚本可调用传递给key的参数,调用方式为$1, $2,…
  • 官方文档链接
  • 在zabbix中定义item时调用某key,还需额外定义数据采集频率、历史数据的保存时长等

3.2 Trigger Expressions

  • 触发器表达式:{:.()}

  • 示例:{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>:
    	>, <, =, #(不等于)
    	/, *, -, +	
    	&, |
    

3.3 Action

# 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方能被使用

3.4 User Parameters

# 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}'

3.5 宏

两类:
	内建:{MACRO_NAME}
	自定义:{$MACRO_NAME}

可以三个级别使用:
	Global, Template, Host

优先级:Host --> Template --> Global(在某级别找到后将直接使用)

3.6 可视化、模版、维护时间

# 可视化
	# graph, screen, slide shows, map

# 模板:一系列配置的集合,此些配置可通过“链接”的方式应用于指定的主机;
	# application, item, trigger, graph, screen, discovery, web

# 维护时间:Configuration --> Maintance

4、Zabbix 监控架构

在实际监控架构中,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归类在一起统一进行管理组件

5、Zabbix network discovery

  • zabbix 提供网络发现功能:network discovery
  • HTTP、ICMP、SSH、LDAP、TCP、SNMP、Telnet、Zabbix_agent 扫描指定网络内的主机
  • 一旦主机被发现,如果对其进行操作,将由action来决定
  • LLD: Low Level Discovery
  • 此二者的功能:自动添加或移除主机、将主机链接至模板或删除链接、添加监控项、将主机添加至分组、定义触发器、执行远程脚本
  • 网络发现有两个步骤: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

6、Zabbix auto_registation

  • 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
    

7、Zabbix 监控方式

zabbix-web所能够显示的且可指定为监控接口类型的监控方式:

  • Agent:passive 和 active
  • SNMP: Simple Network Management Protocol(MIB, SMI, SNMP (v1, v2c, v3))
  • IPMI:智慧平台管理接口(Intelligent Platform Management Interface)原本是一种Intel架构的企业系统的周边设备所采用的一种工业标准。IPMI亦是一个开放的免费标准,使用者无需支付额外的费用即可使用此标准
  • JMX:Java Management Extensions,用于通过Java自己的接口对java程序进行监控(zabbix-java-gateway用于获取监控数据)

7.1 SNMP 监控方式

操作: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

7.2 JMX 监控方式

(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 

你可能感兴趣的:(Linux学习笔记,Linux,Zabbix)