Zabbix 简明教程
本文最近更新于 2018 年 05 月 30 日
Zabbix 是什么?
Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利。
Zabbix 通过C/S 模式采集数据,通过 B/S 模式在 web 端展示和配置。
C/S 模式主要由客户应用程序(Client)、服务器管理程序(Server)和中间件(middleware)三个部件组成。B/S 模式是一种以 web 技术为基础的新型的 MIS 系统平台模式,把传统 C/S 模式中的服务器部分分解为一个数据服务器与一个或多个应用服务器(web 服务器),从而构成一个三层结构的客户服务器体系:第一层是用户与整个系统的接口,用户的应用程序精简到一个通用的浏览器软件,例如 Chrome、火狐或者 IE,浏览器将 HTML 代码转化成图文并茂的网页,网页还会具备一定的交互功能,允许用户在网页提供的表单上输入信息提交给后台,提出处理请求,这个后台就是第二层的 web 服务器;第二层 web 服务器将启动相应的进程来响应这一请求,并动态生成一串 HTML 代码,其中嵌入处理的结果,返回到用户的浏览器,如果用户提交的请求包括数据的存取,web 服务器还需与数据库服务器协同完成这一处理工作;数据库服务器即第三层,它的任务类似于 C/S 模式,负责协调不同的 web 服务器发出的请求,管理数据库。
B/S 模式的优势在于首先它简化了客户端。因为它无需象C/S模式那样在不同的客户机上安装不同的客户应用程序,而只需安装通用的浏览器软件。这样不但可以节省客户机的硬盘空间与内存,而且使安装过程更加简便、网络结构更加灵活;其次,它简化了系统的开发和维护。系统的开发者无须再为不同级别的用户设计开发不同的客户应用程序了,只需把所有的功能都实现在 web 服务器上,并就不同的功能为各个组别的用户设置权限就可以了;再次,它使用户的操作变得更简单;最后,B/S 特别适用于网上信息发布,使得传统的 MIS 的功能有所扩展,这是 C/S 所无法实现的。鉴于 B/S 相对于 C/S 的先进性,B/S 逐渐成为一种流行的 MIS 系统平台,各软件公司纷纷推出自己的 Internet 方案,基于 web 的财务系统、基于 web 的 ERP,一些企业已经领先一步开始使用它,并且收到了一定的成效。
B/S 模式的新颖与流行,和在某些方面相对于 C/S 的巨大改进,使 B/S 成了 MIS 系统平台的首选,也使人忽略了 B/S 不成熟的一面,以及 C/S 所固有的一些优点。C/S 模式的优势有哪些呢?首先,交互性强是 C/S 固有的一个优点,B/S 虽然由 JavaScript、VBScript 提供了一定的交互能力,但与 C/S 的一整套客户应用相比实在是太有限了;其次,C/S 模式提供了更安全的存取模式,由于 C/S 是配对的点对点的结构模式,采用适用于局域网、安全性比较好的网络协议(例如:NT 的 NetBEUI 协议),安全性可以得到较好的保证。而 B/S 采用点对多点、多点对多点这种开放的结构模式,并采用 TCP/IP 这一类运用于 Internet 的开放性协议,其安全性只能靠数据服务器上管理密码的数据库来保证。现代企业需要有开放的信息环境,需要加强与外界的联系,有的还需要通过 Internet 发展网上营销业务,这使得大多数企业将他们的内部网与 Internet 相连。由于采用 TCP/IP,他们必须采用一系列的安全措施,如构筑防火墙、建立 VPN 网络,来防止 Internet 的用户对企业内部信息的窃取以及外界病毒的侵入;再次,采用 C/S 模式将降低网络通信量。B/S 采用了逻辑上的三层结构,而在物理上的网络结构仍然是原来的以太网或环形网。这样,第一层与第二层结构之间的通信、第二层与第三层结构之间的通信都需占用同一条网络线路。而 C/S 只有两层结构,网络通信量只包括 Client 与 Server 之间的通信量。所以,C/S 处理大量信息的能力是 B/S 所无法比拟的;最后,由于 C/S 在逻辑结构上比 B/S 少一层,对于相同的任务,C/S 完成的速度总比 B/S 快,使得 C/S 更利于处理大量数据。
关于 Zabbix 的详细功能和特点可以访问官网 https://www.zabbix.com/product
Zabbix 的优缺点
优点:
- 开源,无软件成本投入
- Server 对设备性能要求低
- 支持设备多,自带多种监控模板
- 支持分布式集中管理,有自动发现功能,可以实现自动化监控
- 开放式接口,扩展性强,插件编写容易
- 当监控的 item 比较多服务器队列比较大时可以采用被动状态,被监控客户端主动从 server 端去下载需要监控的 item 然后取数据上传到 server 端,这种方式对服务器的负载比较小
- API 的支持,方便与其他系统结合
缺点:
- 需在被监控主机上安装 agent,所有数据都存在数据库里,产生的数据据很大,瓶颈主要在数据库
本文主要涉及 Zabbix 的介绍和功能概述,对于安装部分不做详细描述。安装步骤参考官方文档 https://www.zabbix.com/manuals
Zabbix 的几个配置文件
/etc/zabbix/zabbix_server.conf
修改主要参数即可正常工作:
DBName=zabbix
为数据库名称,DBUser=zabbix
为数据库用户,DBPassword=zabbix
为数据库密码。当然如果你的 mysql 不是用 rpm 包安装的,则需要将 mysql.sock 改为你的实际路径。
/etc/zabbix/zabbix_agentd.conf
该文件的作用是获取 host 数据,然后将收集到的数据发送给 server(主动模式),或者是 server 主动来拿取数据(被动模式)。而我们要对 server 本身进行监控,所以要对
zabbix_agentd.conf
进行配置。例如Server=x.x.x.x
此处添加服务端的 IP,如服务器不为本机,则需要填写远端的 zabbix server 的 IP 地址,ServerActive=x.x.x.x
此处修改为服务端的 IP,/tmp/zabbix_agentd.log
为日志路径,UnsafeUserParameters=0
默认是不启用自定义脚本功能的,要自定义 key,需开启,设置为 1,Include=/etc/zabbix/zabbix_agentd.conf.d/
为自定义的 agentd 配置文件目录。上面的两个参数
Server
是采用被动工作模式,允许访问的 IP 地址;ServerActive
是采用主动工作模式,将数据上传到哪台服务器,需要填写 server 的 IP。两个参数的语法是ip1,ip2
,即可以填写多个 server 端,中间用逗号隔开。
Zabbix 的配置和使用
通过本地浏览器访问 https://ServerIP/zabbix
来开始配置和使用 Zabbix,默认的用户名为 admin
,密码是 zabbix
。使用 Zabbix 进行监控之前,要理解 Zabbix 监控的流程。
对于实际使用的时候,一般都是采用模板进行监控配置。可以先添加主机,然后选择对应模板即可。
Zabbix 支持的监控方式类型有 agentd, snmp, jmx, ipmi。下面我们介绍一下最常见的一次监控添加的方式。
1) Host 是 Zabbix 监控的基本载体,所有的监控项都是基于 Host 的。通过 Configuration -> Hosts -> Create host 来创建监控设备。
2) 按提示填入 Name、Groups、IP,其他选项默认即可,Link Templates 处选择一个模板,save 即可成功添加设备。(注:如果 host 上没有安装 agent,添加后的状态会是 unmonitor,会采集不到值。Zabbix 自带大量的设备监控模板,我们添加主机时通过 link 到这些模板,就可以快速添加主机的监控项和告警触发条件。一旦采用 Templates 模板后,后面的步骤可以省略)。同一类的 hosts 可以归属到同一个 Host Group,便于分类管理同一类设备,在 Configuration -> Host Group -> Create Host Group 可以添加设备组。
简单的监控添加就完成了,等待一段时间,就可以在图形里面看到监控数据了。如果需要自定义监控项的监控,请继续阅读。
在自定义监控之前,需要了解几个概念:
- Items:创建监控项,这里会运用到自定义的 key 值
- Triggers:创建触发器,这里是监控项达到报警的阈值
- Graphs:添加图形
自定义监控可以在单台机器上面添加,也可以先定义成模板再把模板应用到主机上面。首先是创建 key 值,例如想监控 /etc/passwd
文件的行数,则首先定义 key(由于大规模的监控部署通常会采用链接模板的方式,下文也会提及 Template 的创建)。
1)定义之前需要先查看并确认客户端的配置 /etc/zabbix/zabbix_agentd.conf
:
LogFile=/var/log/zabbix/zabbix_agentd.log #修改日志存储路径,非必要修改
EnableRemoteCommands=0 #允许远程执行命令,非必要修改
Server=127.0.0.1,192.168.1.254 #允许哪些 IP 访问本机的 key
StartAgents=8 #启动的客户端进程数
ServerActive=192.168.1.254:10051 #主动监控,填服务端的 IP 和端口
Hostname=zabbixTest.example.com #客户端的主机名,注意此主机名需要和实际名称一样,且 server 端可以解析
Timeout=30 #超时时间
Include=/etc/zabbix/zabbix_agentd.conf.d/ #配置文件,即独立的配置文件
UnsafeUserParameters=1 #开启此项,自定义 key 时候可以添加特殊字符
2)在上面的 Include 定义的路径下 /etc/zabbix/zabbix_agentd.conf.d/
添加 count_line_passwd.conf
来定义 key 值,内容如下:
UserParameter=count.line.passwd,wc -l /etc/passwd | awk '{print $1}'
key 自定义的语法格式为 UserParameter=<key>,<command>
。以上面的定义为例,key 为 count.line.passwd
,从 wc -l /etc/passwd | awk '{print $1}'
命令取值。
另外,key 自定义格式支持参数传递。例如 UserParameter=wc[*],grep -c "$2" $1
,表示把 $2,$1
传递给 key。一个实例如下:
zabbix_get -s 127.0.0.1 -k wc[/etc/passwd,root]
这里的 /etc/passwd
为 $1,root
为 $2,则 key 最终运行的命令为 grep -c root /etc/passwd
。
3)重启客户端:
service zabbix_agentd restart
4)key 值创建是否成功,可以用命令行来检查:
zabbix_get -s <host name or IP> -k count.line.passwd
如果看到有返回值,则说明 key 值创建成功。
关于更多 zabbix_get 的用法,使用 zabbix_get --help
查看帮助即可。
5)key 值创建成功后,继续到 Zabbix Server 上面通过 web dashboard 进行配置。
登录 Zabbix web dashboard,点击 Configuration -> Templates -> Create Template,填写 Template 表,例如:
点击 Save 保存。count.line.passwd
添加成功:
在上图的 count.line.passwd
Template 显示中点击 Applications (0) -> Create application,输入 Name,然后 Save。例如:
继续添加 Item。点击 Items (0) -> Create item,填写 Item 表,然后 Save。例如:
注意:这里的 key 就是前面定义的 key
Trigger 是触发器,当 Items 采集值满足 Triggers 的触发条件时,就会产生 Actions。每一个 Trigger 必须对应一个 Item,但一个 Item 可以对应多个 Trigger。
通过设置多个 Trigger 实现触发条件的不同,从而达到不同级别的报警。默认的模板中只有一个 Trigger。
同样,新增 Trigger 可以通过点击右上角的 Create trigger 来创建。通过点击 Configuration -> Hosts -> Triggers 中某个 trigger 的名字,可以修改 Trigger 的属性。(注意:引用自 Template 的 Trigger 触发值是不能单独修改的,必须在 Template 中修改,或是复制一个同样的 Trigger 再修改,然后禁用掉之前的)
Expression 中选择对应的 Item、触发方式及触发值,Severity 是告警级别,根据 Trigger 的严重性来选择。Zabbix 提供多种 Trigger 触发方式供选择,常用的有 last value </>/=/#/N
(最近一次采集值),或是选择 maximal value for period of time
(一段时间内的最大值)等等。可以根据实际需要来设定触发方式。更多的解释请参考:link
此处略去 Graphs 的创建。
至此,Template 已经创建完毕。
6)接下来开始添加要监控的 Host。点击 Configuration -> Hosts -> Create host,填写 Host 表。例如:
链接 Template:
完成。
读懂 Event list
如下图的 Event list:
Time 列表示状态时间,Status 为状态,Duration 为状态持续时间,Age 为 Event 在 Zabbix 数据库的存在时间。
该图片的实际截取时间为 May 30th, 2018 05:58:33 PM,所以从第一行(最新的) Event 我们可以知道,所监控的节点目前状态 OK,持续时间 4h 3m 14s
(May 30th, 2018 01:55:19 PM ~ May 30th, 2018 05:58:33 PM);同理,第二行表示所监控的节点从 May 30th, 2018 01:48:19 PM 开始出现问题(状态为 PROBLEM),持续 7m
(May 30th, 2018 01:48:19 PM ~ May 30th, 2018 01:55:19 PM)……
最近更新: