1. zabbix介绍
1.1 zabbix是什么
Zabbix 是由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持。 Zabbix 是一个企业级的分布式开源监控方案。 Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。 Zabbix支持主动轮询和被动捕获。Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。适当的配置后,Zabbix可以在IT基础架构监控方面扮演重要的角色。对于只有少量服务器的小型组织和拥有大量服务器的大型公司也同样如此。 Zabbix是免费的。Zabbix是根据GPL通用公共许可证第2版编写和发行的。这意味着它的源代码都是免费发行的,可供公众任意使用。
1.2 zabbix概述
Zabbix由几个主要的软件组件构成,这些组件的功能如下:
- Server Zabbix server 是监控代理程序报告系统可用性、系统完成整性和统计信息的核心组件。Zabbix Server是所有配置信息、统计信息和操作数据的核心存储器。
- 数据库存储 所有配置信息和Zabbix收集到的数据都被存储在数据库中。
- Web界面 为了从任何地方和任何平台都轻松的访问Zabbix,Zabbix提供了基于Web的界面。该界面是Zabbix Server的一部分,通常(但不一定)跟Zabbix Server运行在同一台物理机器上。如果使用SQLite,Zabbix Web界面必须要跟Zabbix Server运行在同一台物理机器上。
- Proxy代理服务器 Zabbix proxy 可以替Zabbix Server收集性能和可用性数据。Proxy代理服务器是Zabbix软件可选择部署的一部分;当然,Proxy代理服务器可以帮助单台Zabbix Server分担负载压力。
- Agent监控代理 Zabbix agents监控代理 部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix Server。
- 数据流 此外,了解Zabbix内部的数据流同样很重要。为了创建一个监控项用于采集数据,必须先创建一个主机。转换到Zabbix功能的其他部分,你必须先有一个监控项来创建触发器,你必须有一个触发器来创建动作。 因此,如果你想收到X服务器CPU负载过高的告警,你必须先为X服务器创建一个主机实体并关联一个用于对CPU进行监控的监控项,然后如果CPU负载太高便会激活触发器,接着会执行一个动作,给你发送告警邮件。虽然看起来有很多步骤,但是使用模板的话可以会很简单。同时,这个设计可以创建一个非常灵活的配置。
1.3 zabbix术语
- 主机 (host): 一台你想监控的网络设备,用IP或域名表示
- 主机组 (host group): 主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。
- 监控项 (item): 你想要接收的主机的特定数据,一个度量数据。
- 触发器 (trigger): 一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式 当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。
- 事件 (event): 单次发生的需要注意的事情,例如触发器状态改变或发现有监控代理自动注册
- 异常 (problem): 一个处在“异常”状态的触发器
- 动作 (action): 一个对事件做出反应的预定义的操作。 一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成
- 升级 (escalation): 一个在动作内执行操作的自定义场景; 发送通知/执行远程命令的序列
- 媒介 (media): 发送告警通知的手段;告警通知的途径
- 通知 (notification): 利用已选择的媒体途径把跟事件相关的信息发送给用户
- 远程命令 (remote command): 一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令
- 模版 (template): 一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合 模版的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。
- 应用 (application): 一组监控项组成的逻辑分组
- web 场景 (web scenario): 利用一个或多个HTTP请求来检查网站的可用性
- 前端 (frontend): Zabbix提供的web界面
- Zabbix API: Zabbix API允许你使用JSON RPC协议来创建、更新和获取Zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务
- Zabbix server: Zabbix软件实现监控的核心程序,主要功能是与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等
- Zabbix agent: 一个部署在监控对象上的,能够主动监控本地资源和应用的程序
- Zabbix proxy: 一个帮助Zabbix Server收集数据,分担Zabbix Server的负载的程序
1.4 zabbix进程
(1). zabbix-server
Zabbix server是整个Zabbix软件的核心程序。 Server通过轮询和捕获数据,计算是否满足触发器条件,向用户发送通知。它是Zabbix监控代理和Proxy代理报告系统可用性和完整性数据的核心组件。Server自身可以通过简单服务远程检查网络服务(如Web服务器和邮件服务)。 Sever是一个包含了被存储了所有配置,统计方面的和可操作数据的中央仓库,它是监控系统问题升级以至于激活警告管理器的Zabbix中的实体。 基本的Zabbix服务器起作用分三个不同的组件;他们是:Zabbix服务器,Web前端和数据库存储。 Zabbix的所有配置信息都存储在服务器和Web前端进行交互的数据库中。Zabbix的所有配置信息都存储在服务器和Web前端进行交互的数据库中。例如,当你通过Web前端(或者API)新增一个条目时,它会被添加到数据库的item表里。然后,Zabbix服务器以每分钟一次的频率查询item表中的活动列表,接着将它存储在Zabbix服务器中的缓存里。这就是为什么Zabbix前端所做的任何更改最多需要花费两分钟才能显示在最新的数据段的原因。
(2). zabbix-agent
Zabbix agent部署在监控的目标上,主动监测本地的资源和应用(硬件驱动,内存,处理器统计等)。 Zabbix agent收集本地的操作信息并将数据报告给Zabbix server用于进一步处理。一旦出现异常 (比如硬盘空间已满或者有崩溃的服务进程), Zabbix server会主动警告管理员指定机器上的异常。. Zabbix agents 的极端高效缘于它可以利用本地系统调用来完成统计数据的收集。 被动(passive)和主动(active)检查 Zabbix agents可以执行被动和主动两种检查方式。 在passive check 模式中agent应答数据请求,Zabbix server(或者proxy)询问agent数据,如CPU 的负载情况,然后Zabbix agent回送结果。 Active checks 处理过程将相对复杂。 Agent必须首先从Zabbix sever索取监控项列表以进行独立处理,然后周期性地发送新的值给server。 执行被动或主动检查是通过选择相应的监测项目类型来配置的。item type. Zabbix agent处理监控项类型有’Zabbix agent’和’Zabbix agent (active)’。
(3). zabbix_proxy
Zabbix Proxy是一个可以从一个或多个受监控设备收集监控数据,并将信息发送到Zabbix sever的进程,基本上是代表sever工作的。 所有收集的数据都在本地进行缓存,然后传送到proxy所属的Zabbix sever。 部署Proxy是可选的,,但是可能非常有益于分散单个Zabbix sever的负载。 如果只有proxy收集数据,sever上的进程就会减少CPU消耗和磁盘I / O负载。 Zabbix proxy是完成远程区域、分支机构、没有本地管理员的网络的集中监控的理想解决方案。 Zabbix proxy需要使用独立的数据库。
zabbix proxy 仅仅需要一条 tcp 连接到 zabbix server,所以防火墙上仅仅需要加上一条规则即可。 zabbix proxy 数据库必须和 server 分开,否则数据会被破坏。 proxy 收集到数据之后,首先将数据缓存在本地,然后在一定得时间之后传递给 zabbix server,这样就不会因为服务器的任何临时通信问题而丢失数据。这个时间由 proxy配置文件中参数 ProxyLocalBuffer 和 ProxyOfflineBuffer 决定。 注意从Zabbix server数据库直接更新最新配置的proxy可能会比Zabbix server新,而Zabbix server的配置由于 CacheUpdateFrequency 的原因而无法快速更新。因此,proxy收集发送Zabbix server数据可能会被忽略。 zabbix proxy 是一个数据收集器,它不计算触发器、不处理事件、不发送报警。
2. 安装zabbix server和zabbix agent组合
2.1 机器A安装zabbix server
更新zabbix的安装包源
wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb
sudo dpkg -i zabbix-release_3.4-1+xenial_all.deb
sudo apt-get update
安装Zabbix部署包,使用mysql数据库安装Zabbix server、WEB前端的实例。
sudo apt-get install zabbix-server-mysql zabbix-frontend-php
安装了PHP前端之后,可能无法运行,需要更改PHP代码的文件权限
sudo chown -R www-data:www-data /usr/share/zabbix
只安装Zabbix Agent的实例。
sudo apt-get install zabbix-agent
启动zabbix-agent的服务
sudo service zabbix-agent restart
修改配置文件/etc/zabbix/zabbix_agentd.conf
:
Server=127.0.0.1,192.168.0.0/24
ServerActive=192.168.0.108
初次安装重置mysql的root的密码
sudo mysql_secure_installation
安装初始化数据库 (操作mariadb的时候记得加上sudo) 创建zabbix数据库和zabbix用户
shell> sudo mysql -uroot -p<password>
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '<password>';
mysql> quit;
在MySQL上安装Zabbix数据库和用户,请参考下列指导步骤。MySQL数据库创建脚本。 然后导入初始架构(Schema)和数据
zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uroot -p zabbix
启动Zabbix Server进程 在zabbix_server.conf中编辑数据库配置
sudo vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
启动Zabbix Server进程
sudo service zabbix-server start
编辑Zabbix前端的PHP配置 Zabbix前端的Apache配置文件位于 /etc/apache2/conf.d/zabbix 或者 /etc/apache2/conf-enabled/zabbix.conf 。一些PHP设置已经完成了配置。 依据所在时区,你可以取消 “date.timezone” 设置的注释,并正确配置它。在配置文件更改后,需要重启Apache Web服务器。
sudo service apache2 restart
Zabbix前端可以在浏览器中通过 http://zabbix-frontend-hostname/zabbix 进行访问。默认的用户名/密码为 Admin/zabbix。