1. 什么是zabbix?
1
2
3
4
5
6
7
概述
Zabbix由Alexei Vladishev创建,目前由Zabbix SIA积极开发和支持。
Zabbix是一个企业级开源的分布式监控解决方案。
Zabbix是监控网络的众多参数以及服务器的健康和完整性的软件。 Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的警报。这允许对服务器问题的快速反应。基于存储的数据,Zabbix提供卓越的报告和数据可视化功能。这使得Zabbix成为容量规划的理想选择。
Zabbix支持轮询和陷印。所有Zabbix报告和统计信息以及配置参数都通过基于Web的前端访问。基于Web的前端可确保从任何位置评估网络的状态和服务器的运行状况。正确配置后,Zabbix可以在监控IT基础架构中发挥重要作用。这对于具有少量服务器的小型组织和具有大量服务器的大型公司同样如此。
Zabbix是免费的。 Zabbix是在GPL通用公共许可证版本2下编写和分发的。这意味着其源代码是免费分发的并可供一般公众使用。
商业支持由Zabbix公司提供。

2.Zabbix功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
概述
Zabbix是一种高度集成的网络监控解决方案,在单个封装中提供多种功能。
数据收集
可用性和性能检查
支持SNMP(陷阱和轮询),IPMI,JMX,VMware监控
自定义检查
以定制间隔收集所需数据
由服务器/代理和代理执行
灵活的阈值定义
您可以定义非常灵活的问题阈值,称为触发器,引用来自后端数据库的值
高度可配置的警报
可以为升级调度,收件人,媒体类型自定义发送通知
可以使用宏变量使通知变得有意义和有用
自动操作包括远程命令
实时图形
使用内置的图形功能立即绘制监视项目
Web监视功能
Zabbix可以按照在网站上模拟鼠标点击的路径,检查功能和响应时间
广泛的可视化选项
能够创建可将多个项目合并为单个视图的自定义图形
网络地图
自定义屏幕和幻灯片,用于仪表板样式概述
报告
高级(业务)视图的受监视资源
历史数据存储
数据存储在数据库中
可配置历史
内置内务程序
配置方便
将受监控设备添加为主机
主机被拾取用于监视,一次在数据库中
将模板应用于受监控设备
使用模板
在模板中分组检查
模板可以继承其他模板
网络发现
自动发现网络设备
代理自动注册
发现文件系统,网络接口和SNMP OID
快速的web界面
PHP中的基于Web的前端
可从任何地方访问
你可以点击你的方式
审计日志
Zabbix API
Zabbix API为Zabbix 提供可编程接口,用于大规模操作,第三方软件集成和其他目的。
权限系统
安全用户认证
某些用户可以限制到某些视图
全功能和易扩展的代理
部署在监控目标上
可以部署在Linux和Windows上
二进制守护进程
写在C,性能和小内存占用
轻松便携
准备复杂的环境
通过使用Zabbix代理,使远程监控变得容易

3.可以监控的对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
设备/软件
设备:服务器、交换机、路由器、IO系统
软件:OS、网络、应用程序
偶发现故障:
主机down机,服务不可用、主机不可达
严重故障:
主机性能指标
趋势:
时间序列数据
web:
api、页面状态,下载速度,页面打开时间,
可以配合脚本,监控一切能监控的状态

4.zabbix发展:

1
2
第一版本:2012年07月31日,ZABBIX 2.0.2 正式版发布。
现在官网最新版本3.4,不过现在生产环境主流应用还是3.0和3.2版本。

5.ZABBIX由几个主要的软件组件:

1
2
3
4
5
6
7
8
9
10
11
12
server:
ZABBIX服务器是核心部件到代理报告的可用性和完整性信息和统计数据。服务器在中央存储库中,所有的配置,统计数据和运营数据存储。
Database storage:
所有配置信息以及由的zabbix收集的数据被存储在数据库中。
Web interface:
Zabbix web interface must run on the same physical machine if SQLite is used.
Proxy
zabbix代理可以收集代表zabbix服务器的性能和可用性数据。代理服务器是部署zabbix的可选部分;但是,它可能是非常有益的分发单个zabbix服务器的负荷。
Agent
zabbix agents部署在监测目标,以积极监测当地的资源和应用程序,并收集到的数据报告给zabbix服务器。
Data flow
看看内zabbix整个数据流是非常重要的。为了创建一个收集项目数据,你必须首先创建一个主机。移动到zabbix光谱的另一端,你必须首先要创建触发器的项目。你必须有一个触发器来创建一个动作。因此,如果您希望收到你的CPU加载过高的服务器X,你必须首先创建服务器X监测其CPU主机条目后面跟着一个项目警报,然后触发其激活,如果CPU太高,其次由向您发送电子邮件的操作。虽然这可能看起来很多的步骤,使用模板的它真的不是。然而,由于这样的设计,可以创建一个非常灵活的设置。

6.zabbix术语定义
(1)术语

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
主机(host):
-要监控的网络设备,可由IP或DNS名称指定;
主机组(host group):
- 主机的逻辑容器,它可以含有主机和模板,但同一个组内的主机和模板不能互
相链接;主机组通常在给用户或用户组指派监控权限时使用;
监控项(item):
- 一个特定监控指标的相关的数据,这些数据来自于被监控对象,item是zabbix
进行数据收集的核心,没有item,将没有数据,相对某监控对象来说,每个item
都由“key”进行标识;
触发器(trigger):
- 定义一个问题阈值的逻辑表达式,用于“评估”收到的数据当接收到的数据
高于阈值,触发器从“ok”进入一个“problem”状态,当接收到的数据低于阈值时,
触发停留在/返回一个“ok”状态。
事件(event):
- 即发生的一个值的关注的事情,比如触发器的状态转换,新的agent或重新上
线的agent的自动注册等;
行动(action):
- 对于特定事件事先定义的处理方法,通过包含操作(如发通知)和条件(何时执行)。
一个动作由操作(如发送通知)和条件(当操作被执行)
报警升级(escalation):
- 发送警报或执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等;
media(媒体)
- 发送通知的手段;传递通道,发送告警的几种方式:email、script、sms(短信)、jabber (php开发的一款即时通讯软件)、商业EZ短信
notification(通告)
- 通过选定的媒体频道发送给用户的一些事件的消息
remote command(远程命令)
- 在某些情况下,一个预先定义的命令,在监视主机上处于某特定条件下自动执行;
template(模板)
- 用于快速定义被监控主机的预设条目集合,通常包含了item,trigger,graph,screen、
application以及low-level discovery rule;模板可以直接连接至单个主机;
应用(application)
一组item的集合;
web场景(web scennario):
- 用于检测web站点可用性的一个或多个http请求;
前端(frontend):
- 提供zabbix web接口;
Zabbix API
- Zabbix API允许你使用JSON RPC协议的创建、更新和获取对象(如主机,Zabbix项目,图表和其他)或执行任何其他自定义任务
Zabbix server
- Zabbix软件执行监控中心的过程中,与Zabbix代理和代理,计算触发,发送通知数据的中央存储库;
zabbix agent
- 部署在监测目标的过程中,积极监测当地资源和应用
zabbix proxy
- 可以收集代表zabbix服务器的数据,取一些处理负载关闭服务器的处理

(2)agent两种模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
被动和主动检查
简单来说:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
主动模式流程:
主动模式一定要记得设置ServerActive=ServerIP
Agent向Server建立一个TCP连接
Agent请求需要检测的数据列表
Server响应Agent,发送一个Items列表
Agent允许响应
TCP连接完成本次会话关闭
Agent开始周期性地收集数据.
被动:server向agent请求获取监控项的数据,agent返回数据。
被动模式一定要记得设置Server = ServerIP
被动模式工作流程:
Server 打开一个TCP连接
Server发送一个key 为agent.ping
Agent接受这个请求,然后响应< HEADER >< DATALEN >
Server对接受到的数据进行处理
TCP连接关闭

(3)proxy:

1
2
Zabbix代理是一个过程,可以收集从一个或多个监测设备的监测数据,并将信息发送给Zabbix服务器,基本上是在代表服务器。所有收集的数据的本地缓冲然后转到Zabbix服务器代理属于。
部署一个代理是可选的,但可能是一个单一的Zabbix服务器的负载分配非常有限。如果只代理收集数据,服务器上的处理就变少了,性能会得到提升。

(4)java gateway

1
监控java应用jmx

(5)zabbix sender (被动监控模式)

1
2
zabbix_sender是一个命令行工具,可以用来发送Zabbix服务器处理性能数据。该工具通常用于长时间运行的用户脚本,
用于定期发送可用性和性能数据。例子:http://www.fyluo.com/?post=126

(6)zabbix get

1
2
3
4
5
6
7
8
9
10
Zabbix得到的是一个命令行工具,可用于交流和Zabbix代理代理检索所需的信息。
它通常用于Zabbix代理的故障排除。
参数说明:
-s --host: 指定客户端主机名或者IP
-p --port:客户端端口,默认10050
-I --source-address:指定源IP,写上zabbix server的ip地址即可,一般留空,服务器如果有多ip的时候,你指定一个。
-k --key:你想获取的key
比如监控cpu15分钟内的负载:
[root@ip-172-31-1-181 ~]# zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg15]"
0.050000

7.zabbix产生的数据主要由四部分组成:

1
2
3
4
配置数据:
历史数据:
历史趋势数据:
时间数据:
  1. zabbix3.0 install:
    1
    2
    3
    4
    5
    6
    7
    8
    - 编译安装:
    https://www.zabbix.com/documentation/3.0/manual/installation/install#from_distribution_packages
    - yum安装:
    https://www.zabbix.com/documentation/3.0/manual/installation/install_from_packages
    一直坚持yum安装,原则如下:
    1. 公共约定优先,方便运维
    2. 方便编写自动化部署脚本
    3. 应用升级方便

9.zabbix quickstart(快速入门)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
1.login and configuring user
2.new host
3.new item(新项目)
监控项(item)是zabbix服务器用于监控一个特定对象上的一个特定指标,并负载针对其收集相关
的监控数据
比如CPU每分钟的平均负载可以是一个item,每五分钟的平均负载是一个item,某特定网络接口接
收报文的速率又是一个item等。
每一个item都拥有相应的“类型(Type)”
例如:“zabbix agent”、“snmp”、“External check”、"IPMI agent"、"ssh agent"、“jmx agent”等
zabbix服务器会使用相应类型的协议或机制同被监控端通信
item key
每一个item都有其专用的“key”
zabbix服务器在与被监控端通信时就使用相应的协议或机制去询问被监控端这个key的值,
被监控端则调用与此key对应的监控脚本获取数据并返回给服务器端
key的命名只能使用“0-9a-zA-Z_.”(引号中的内容)等字符,且可以接受参数,其命令习惯
如system.cpu.load[<cpu>,<mode>],其中,中括号中的内容为参数,且分别可以按次序
使用$1,$2、...进行引用,此实例中仅有两个参数
若要使用不定数目的参数,则可以使用*表示
zabbix有许多预定义的key,详细信息的获取地址:
对于每一个item,zabbix服务器还定义了怎么存储这个item的数据以数据采集的频率
及历史数据的保存时长等
多个item还可归类为一个由application定义的逻辑组
name:item的名字,可以使用宏变量:$1, $2…$9,这9个参数对应item key的参数位置。
type:zabbix server服务器用什么机制于被监控客户端通信,item类型(常见agent、SNMP、agent(active)等),控制方式不同,key的配置也不同。
key:监控项item的key.点击select菜单能查找出可以支持的Item keys,自定义的key不能通过菜单查找出来,需手工输入。
host interface:主机的接口,在配置了多种监控方式或多个IP监控的时候,可以基于主机接口来选择。
type of infrmation:(选择哪一个,跟采样的数据结果有关系)
数据中进行类型转换之后存入数据库中,
Numeric (unsigned) – 64bit无符号的整数;如果是整数,就现则无符号的整数
Numeric (float) – 浮点数类型;
Character – 字符串,最长255字节Log – 日志文件. key必须为log[];
Text – 大小无限制的文本;
date type:
数据类型用于存储items中key所获取的数值,用于存储在不同的表中,定义获取到整数数据的数据类型Boolean – 数据为0或者1.
’true’表示1,’false’为0,不区分大小写。如下为True和False的定义:TRUE – true, t, yes, y, on, up, running, enabled,
availableFALSE – false, f, no, n, off, down, unused, disabled, unavailable任何非0数字都被认为是TRUE,0被定义为
FALSE.负数呢?Octal – 八进制Decimal – 十进制Hexadecimal – 十六进制zabbix将会自动把他们转为数字
units:单位,如果定义为bps,超过1000,会生成1kb,超过1000000,会生成1Mbps
use custom multiplier:
update interval(in sec):采样时间间隔,可以自定义,
fiexble intervals:选择哪个时间段需要监控
history storage period(in days):保存历史数据的时间,
Trend storage period(in days):保留历史趋势数据,可以长一点儿(比历史数据占用空间小)
历史数据:采样生成的数据
历史趋势数据:每小时的最大值,最小值,平均值,统计
Store value:
As is:不做任何处理,是啥就存啥
Delta(speed per second):(value - pre_value)/(time - pre_time)
例如网卡流量,每次获取到得都是当前网卡总流量。比如第一次给的值是0字节
(UNIX时间为1),第二获取到得是3000字节(UNIX时间为31),
那么套用公式(3000-0)/(31-30),可以得出数据是100字节/秒
备注:如果当前获取到的值比上一个值更小,那么zabbix会忽略这个值
10:12000,20:13000,
delta(simple change):(value - pre_value)
show value:
值映射,需要配置数字映射到字符的映射表。例如1=>ttlsa.com访问正常。
如果key返回的数据为1,那么监控页面不会显示1,而是显示ttlsa.com访问正常。
key返回的数据只能为整数,并且不做任何修改保存到数据库中。只有在显示的时候
才会根据映射表来展示相应的内容
new application:
指定一个新的应用
Populates host inventory field:
将item归属于哪个资产管理组中
Description:
监控项的描述
Enabled:
是否启用这个监控项
创建一个graph
name:图形名称
width:宽度
height:高度
show legend:
Normal:线状图
stacked:堆叠图
pie:饼图
exploded:爆炸饼图
Show legend:
显示出数据指标是什么
Percentile line (left)
:左边坐标轴百分比
Percentile line (right)
:右边坐标轴百分比
Y axis MIN value:
Calculated:自动计算最小值
fixed:固定最小值
item:最后一次获取的为最小值
Y axis MAX value:
Calculated:自动计算最大值
fixed:固定最大值
item:最后一次获取的为最大值
item:添加定义好的监控项
4 创建触发器(trigger)
”监控项“仅负责搜集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时
给相关人员发送告警信息,“触发器”正是用于为监控项所收集的数据定义阈值
每一个触发器仅能关联至一个监控项,但可以我一个监控项同时使用多个触发器
事实上,为一个监控项定义多个具有不同阈值的触发器,可以实现不同级别的报警功能
一个触发器由一个表达式构成,它定义了监控项所采取的数据的一个阈值
一旦某次采集的数据超出了此触发器定义的阈值,触发器状态将会转换为“problem”;而当采取
的数据再次回归至合理范围内时,其状态将重新返回到“ok”
触发器表达式高度灵活,可以为之创建出非常复杂的测试条件
基本的触发器表达式格式如下所示:
{<server>:<key>.<function>(<parameter>)}<operator><constant>
server:主机名;
key:主机上关联的相应监控项的key;
function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据
采取的数据、当前时间及其它因素进行;
目前,触发器所支持的函数:avg、count、change、date、dayofweek、delta、diff、
iregexp、last、max、min、nodata、now、sum等
parameter:函数参数,大多数数值函数可以接受秒数为其参数,而如果在数值参数之前
使用"#"作为前缀,则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和,
而sum(#10)则表示最近10次取值之和;
此外,avg、count、last、min和max还支持使用第二个参数,用于完成时间限定;例如,
max(1h,7d)将返回一周之前的最大值;
一个例子:
{www.micous.com:system.cpu.load[all,avg1].last(0)}>3
表示主机www.micous.com上所有cpu的过去1分钟内的平均负载的最后一次取值大于3时将
http://www.ttlsa.com/zabbix/zabbix-trigger-expression/
触发状态变换
对last函数来说,last(0)相当于last(#1)
在一个网络中,主机的可用性之间可能存在依赖关系
例如,当某网关主机不可用时,其背后的所有主机都将无法正常访问
如果所有主机都配置了触发器并定义了相关的通知功能,相关人员将会接收到许多告警
信息,这既不利于快速定位问题,也会浪费资源
正确定义的触发器依赖关系可以避免类似情况的发生,它将使用通知机制仅发送最根本
问题相关的告警
注意:目前zabbix不能够直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义
触发器等级:
触发器等级用于表示事件的严重性
zabbix支持如下表示的等级:
not classified unknow serverity grey
information for information purposess
warning
average
high
disaster
name:trigger名字
Expression:条件
Expression constructor
问题升级:
描述:
URL:指定是从哪个triggerID发送的
触发事件,执行报警:
默认三种:email、jabber、sms手机短信、外部其他商业短信报警
email:
name:类型email
type:email
smtp server:mail.zabbix.example.cn
smtp helo:zabbix.example.cn
smtp email:zabbix@zabbix.example.cn
发给哪个用户:
添加用户,添加发送到的邮箱地址,设置发送时间和报警级别。
定义action:
action有两类:
send message
command
一次监控的配置过程:host groups-host-->application-->item-->trigger(一个item可以多个
trigger)-->action-->(send message,command)
send message:
media type:
zabbix user:使用可用item
模板:
创建zabbix模板
点击Configuration(配置) ---Templates(模板)---create template(创建模板),
Template name:模板名称,在嵌套模板中,都使用template name
Visible name :显示的名称,template显示是visible name,方便识别
Groups Host/template :当前模板归到哪个组
New group:创建一个新组,当前模板便会加入这个组,可以为空
Hosts/Templates:把模板链接到主机
描述:一些描述信息
Linked templates:
需要嵌套的模板,输入关键词,然后选择你要的模板,最后点击add,
模板嵌套,是一个继承的关系。例如我们定义了一个基础模板,里面item有cpu、内存、硬盘、
网卡等等基本信息监控,我们有需要定义个MySQL与WEB监控模板,那么这两个模板分别嵌套这
个基础模板即可,而不需要重复定义监控项。
模板级宏变量,以后跟大家介绍一下。
编辑zabbix模板
点击Configuration(配置) ---Templates(模板)---你需要编辑的模板,当前的底部要比创建模板要多几个按钮,
我们分别来讲下这下按钮都是做什么的
save:保存,没什么好说的
Clone:克隆模板,克隆一个与当前模板一模一样的模板,此时你只需要修改下模板名称,以及在其基础上做修改,
便能很快的完成一个模板
full clone:完全克隆,比clone多一点东西,例如screen
delete:删除模板,如果主机有嵌套当前模板,那么这些item依旧保留在主机上,主机不受影响
delete and clear:删除模板,如果主机有嵌套当前模板,那么这些item也被删除掉。
cancel:取消