01 . Zabbix简介原理及部署
zabbix简介
概述
Zabbix由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持.
Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件.zabbix使用灵活的通知机制,允许用户为任何事件配置基于邮件的告警。这样可以通过灵活的通知机制让系统管理员快速定位/解决存在的各种问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案.
zabbix支持主动轮训和被动捕获,zabbix所有的报告,统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保你从任何方面评估您的网络状态和服务器的健康性,适当的配置后,zabbix可以在IT基础架构监控方面扮演重要的角色,对于只有少量的小型组织和拥有大量服务器的大型公司也同样如此
zabbix是免费的,根据GPL通用公共许可证第2版编写和发行的,这意味着他的源代码都是免费发行的,可供公众任意使用.
zabbix server可通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,他可以运行在Linux,Solanis,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上.
早期出现的监控软件是cacti,用于监控网络设备的
后来发现他的展示图像功能很好,所以就用它来监控主机的,cacti能将服务器状态信息以图像的方式展示出来。随着应用的发展,软件不能只局限于看到服务器的状态信息,还需要设定监控监控值出发报警机制,而cacti本身没有报警的功能,需要借助于插件来实现,但是插件不是很完善,会出现误报的情况,而cacti本身没有报警的功能,需要借助于插件来实现,但是插件不是很完善,会出现误报的情况;
所以后来出现了nagios和zabbix软件.nagios软件能收集数据,展示图形,本身自带报警功能切配置简单,报警较为准确,支持邮件报警,短信报警(需购买短信网关).
zabbix能搜集数据,展示图像,且支持的报警方式很多,目前最为流行的监控软件是zabbix,很多IDC机房监控服务器状态信息和网络设备信息都用的是zabbix.
监控软件需要具备的功能:
# 1.收集数据.
# 1> shell脚本
# 2> SNMP
# 3> 专用agent
# 2.保存数据.数据收集过来之后需要保存起来的.
# 3.图像展示.通过数据进行查看,没有图像看的直接
# 4.报警系统.
Zabbix的优缺点
优点
开源,无软件成本投入
1> 数据采集: 可用性和性能检测,自动发现,支持agent,snmp,JMX,telnet等多种采集方式,支持主动和被动数据传输、支持用户自定义插件,自定义间隔收集数据.
2> 高可用: server对设备要求低,支持proxy分布式监控,分布式集中管理,有自动发现功能,可以实现自动化监控;开放式接口,扩展性强,插件编写容易.
3> 告警管理: 支持多条件告警,支持多种告警方式,自带监控模板非常丰富,支持多组模板,模板继承.
4> 告警设置: 告警周期,告警级别,告警恢复通道,告警暂停,时段阀值,支持维护周期,支持单机停用.
5> 图形化展示: 允许自定义创建多监控视图,网络拓扑,自定义面板展示,自定义IT服务的可用性.
6> 历史数据: 历史数据查询可配置,内置housekeeping数据清理机制.
7> 安全审计: 具备安全的用户审计日志,权限认证,用户可以限制允许维护的列表.
8> 当监控的item比较多服务器队列比较大时可以采用被动状态,被监控客户端主动从server端去下载需要监控的item,然后取出数据上传到server端,这种方式对服务器的负载比较小.
缺点
1> 性能瓶颈,监控系统没有低估高峰期,具有持续性和周期性,机器量越大,数据的增大会使数据库的写入成为一定的瓶颈,官网给出的单机上限5000太,届时就需要增加Proxy,增加成本.
2> Zabbix采集数据有pull方式,也就是server主动模式,当目标机器量大之后,pull任务会出现积压,采集数据会延迟.
3> 项目二次开发,需要分析Mysql表结构,表结构比较复杂,通过API开发对开发能力有要求.
4> 内置housekeeping在执行过程中会对数据库增加压力,而且所有数据都存在数据库里,产生的数据量很大时,会产生大量的IO操作,数据库会出现瓶颈,需要对数据库进行优化.但是可以使用分布式zabbix,将一台server的工作分成多个server来完成,使用proxy搜集数据,最后统一将数据交给总的zabbix进行处理.
zabbix监控远程主机的步骤
zabbix是以组的方式管理所有主机的,所有主机须加到主机群组中,组就是管理的一个对象.
1.监控一台新的主机,需先创建主机,然后将创建主机组,将主机分配到组中.
2.然后创建包括监控(Item),如cpu的上下文切换、cpu的中断,mem的剩余量、网卡的流量等都是监控项;对于网卡的流量来说分为流入的流量,网卡发出的流量,网卡的总流量,可以讲网卡相关的监控项放到同一个应用集中,方便查看:
3.最后为某一个或者是某几个监控项创建触发器: 达到什么值,出发什么事件,如cpu使用量达到90%,状态设置为critcal,当然出发器主要是为了出发报警:
4.报警需要设置给通知那个用户或者那些用户;
5.另想要查看图形还需要配置图形相关的操作.
6.可以将监控项、触发器、事件、动作、报警做成一个模板,新添加主机直接关联模板即可.
Zabbix监控端获取被监控端监控数据的两种方法
# 一、主动:
# server每隔一段时间和被监控端通讯获取数据,获取数据之后保存到本地的本地的数据库中,
# 将来将数据绘图展示在web页面上,
# 整体流程分为下面几步:
# 1.server和agent通讯获取数据.
# 2.联系数据库保存数据
# 3.将数据绘图展示在web页面上
# 采用此种方式获取数据,及时性高,但是当数据量比较多时,server的负载会较高,解决负载的方法有两种,一种是被动监控,一种是分布式监控.
# 二、被动
# 客户端出现问题,自己上报,节省资源,但是相应不及时。
Zabbix常见组件
server
Zabbix server是agent程序报告系统可用性,系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器.
数据库存储
所有配置信息和Zabbix收集到的数据都被存储在数据库中
Web界面
为了从任何地方和任何平台都可以轻松访问Zabbix,我们提供基于Web的Zabbix界面,该界面是Zabbix Server的一部分,通常(但不一定)跟Zabbix Server运行在同一台物理机器上.
如果使用SQLite, Zabbix Web界面必须要跟zabbix server运行在同一台物理机器上.
Proxy代理服务器
Zabbix proxy可以替代Zabbix Server收集性能和可用性数据。Proxy代理服务器是Zabbix软件可选择部署的一部分: 当然,Proxy代理服务器可以帮助单台Zabbix Server分担负载压力.
Agent监控代理
Zabbix agent监控代理部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix Server。
数据流
此外,了解Zabbix内部的数据流同样很重要;
监控方面,为了创建一个监控项(item)用于采集数据,必须先创建一个主机(host).
告警方面,在监控项里创建触发器(trigger),通过触发器(trigger)来触发告警动作(action).
因此,如果你想收到Server XCPU负载过高的报警,你必须:
1. 为Server X创建一个host并关联一个用于对CPU进行监控项(Item)。
2.创建一个Trigger,设置成当CPU负载过高时会触发.
3.Trigger被触发,发送告警邮件,虽然看起来很多步骤,但是使用模板的操作起来很简单,Zabbix这样的设计使得配置机制非常灵活易用.
定义
01.主机(host)
一台你想监控的网络设备,用户IP或域名表示**
02.主机组(host group)
主机的逻辑组,它包括主机和模板,一个主机组里的主机和模板之间并没有任何直接的关联,通常在给不同用户组的主机分配权限时候使用主机组
03.监控项(item)
你想要接受的主机的特定数据,一个度量数据
04.触发器(trigger)
一个被用于定义问题阀值和“评估” 监控项接收到的数据的逻辑表达式
当接收到的数值高于阀值时,触发器从"OK"变成"Problem"状态,当接收到的数据低于阀值时,触发器保留/返回一个"OK"的状态.
05.事件(event)
单次发生的需要注意的事情,例如触发器状态改变或发现有监控代理自动注册.
06.异常(problem)
一个处在"异常"状态的触发器
07.动作(action)
一个对事件做出反应的预定义的操作.
一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成.
08.升级(escalation)
一个在动作内执行操作的自定义场景: 发送通知/执行远程命令的序列.
09.媒介(media)
发送告警通知的手段: 告警通知的途径
10.通知(notification)
利用已选择的媒体途径吧跟事件相关的信息发送给用户
11.远程命令(remote command)
一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令.
12.模板(template)
一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合.
模板的任务就是加快对主机监控任务的实施: 也可以使监控任务的批量修改更简单,模板是直接关联到每台单独的主机上.
13.应用(application)
一组监控项组成的逻辑分组
14. web场景(web scenario)
利用一个或多个http请求来检查网站的可用性
15.前端(frontend)
Zabbix提供的web界面
16.ZabbixAPI
zabbix API允许你使用JSON RPC协议来创建,更新和获取zabbix对象(如主机,监控项,图形和其他)信息或者执行任何其他的自定义的任务.
17.Zabbix server
zabbix软件实现监控的核心程序,主要功能是与zabbix proxied和Agents进行交互,触发器计算,发送告警通知; 并将数据集中保存等.
18.Zabbix agent
一个部署在监控对象上的,能够主动监控本地资源和应用的程序.
19.Zabbix proxy
一个帮助Zabbix Server收集数据,分担Zabbix Server的负载的程序.
Zabbix部署
部署Zabbix有四种途径:
1> 从分发包进行安装
2> 下载最新的源代码归档,并自行编译
3> 从容器安装
4> 下载虚拟应用
安装要求
硬件
内存和硬盘
# Zabbix同时需要物理内存和磁盘空间,刚开始使用Zabbix,
# 建议128MB物理内存和256MB磁盘空间,然而,
# 具体需要的内存大小和磁盘空间要根据主机数量和监控参数而定。
# 如果你计划对监控的参数进行长期保存,你应该至少考虑在数据库中预留几个GB的空间,
# 以用来保留历史数据,每个Zabbix的守护进程需要与服务器建立多个连接,
# 分配给连接的的内存数量,取决于数据库引擎的配置.
CPU
# 根据监控参数及选择的数据库引擎,Zabbix,特别是Zabbix数据库,可能需要大量的CPU资源.
其他硬件
# 如果需要启用短信(SMS)通知功能,需要串行通讯口(serial communication port)
# 和串行GSM调制解调器(serial GSM modem).USB转串行转接器也同样可以工作.
硬件配置示例
软件
Zabbix基于Apache Web浏览器,的数据库引擎和PHP脚本语言进行构建
数据库管理系统
客户端浏览器
# 必须启用Cookies和Java Script功能
# 支持最新版本的Google Chrome,Mozila Firefox,
# Microsoft Internet Explorer和Opera.
# 其他浏览器(如Apple Safarl,Konqueror)可能也支持Zabbix。
数据库容量
Zabbix配置数据需要使用固定的磁盘空间,而且这个空间不会过多增长.
Zabbix数据库容量主要依赖下列这些参数,这些参数决定了存储历史数据所需要的空间:
每秒钟处理值的数量(Number of processed valued per second)
这个参数是指每秒钟Zabbix server收到的新值数量的平均数,比如,我们有3000个监控项(item),监控周期是60s,经计算所得,每秒处理的数量为3000/60=50,这意味着每秒钟有50个新值写入Zabbix数据库.
历史(History)数据的回收清理设置(Housekeeper)
Zabbix会在一个固定周期内保存收到的值,正常情况下保留数周或者数月,每一个新收到的值会占用一定数量的磁盘空间以存放数据和索引.
所以,如果我们每秒钟收到50个值,正常情况下保留数周或者数月,值的总数大约在(30243600)50=129600000,即大约130M个值.
根据所使用的的数据库引擎,以及收到值的类型[浮点(floats),整型(integers),字符串(strings),日志文件(log files)等],单个值的磁盘使用量从40字节到数百个字节不等,一般而言,数值型(Number)的监控项占用大约90字节,按之前的例子,这意味着130个值需要占用130M* =10.9的磁盘空间.
文本(text)/日志(log)类型的监控值的大小无法精准的预测,但你可以按每个值大约500字节来计算.
趋势(Trends)数据的回收清理设置(Housekeeper)
Zabbix为trends表中的每个监控项的值,保留一组数据: 一个小时的最大值/最小值/平均值/数量.这些数据用于趋势图和历史图表的展现。用户无法自定义这一小时的保留周期.
根据数据库的类型,Zabbix数据库需为每组值总占用约90字节的空间,如果你需要保留趋势数据5年,那么3000个监控项,每年需要300024365*90=2.2G空间,即5年需要11GB的空间.
事件(Events)数据的回收清理设置(Housekeeper)
每个Zabbix事件需要大约170字节的磁盘空间,很难估计Zabbix每天生成的事件数量,最糟糕的情况下,我们可能需要假设zabbix每秒会生成一个事件.
这意味着,如果我们需要保留3年的事件,需要336524*3600=15G的磁盘空间.
根据现实环境中使用的Mysql后端数据库设计,数值型监控项平均占用约90个字节,事件占用约170个字节.
下表列出了用于计算Zabbix系统所需磁盘空间的计算公式.所需要的磁盘总空间按下列方法计算:
配置+历史+趋势+事件
安装完zabbix,磁盘空间不会立即被分配,数据库大小根据回收清理(housekeeper)设置,在某些时间点增长或停止增长.
时间同步
对于zabbix稳定性而言,服务器获得精准的系统时间是非常重要的,ntpd是一个最流行的用于同步主机和其他服务器之间的时间后台程序,对于所有运行zabbix组件的系统,强烈建议这些系统时间保持同步.
如果时间未同步,zabbix建立连接之后,根据得到的客户端/服务器的时间戳,将获得值的事件戳转化为zabbix server的时间,并且会根据客户端服务器的时间差对获得值进行调整,为了保持简单,并且避免可能的并发问题出现,网络延迟会被忽略,因此,通过主动连接获得的时间戳数据包含网络延迟,通过被动连接获得的数据已经减去了网络延迟,所有其他检查服务器花费的时间和他们的时间不调整
支持平台
由于监控服务器的安全要求及关键任务的特性,UNIX是唯一可以持续提供必要性能、容错性和扩展性的操作系统。Zabbix可以运行在市场上的主流版本。
经测试,Zabbix可运行在下列平台:
* Linux
* IBM AIX
* FreeBSD
* NetBSD
* OpenBSD
* HP-UX
* Mac OS X
* Solaris
* Windows:
# Windows 2000以后的所有桌面和服务器版本 (只可运行Zabbix agent)
如果使用加密编译,那么Zabbix会禁用核心转储(Core dumps),同时,如果系统不允许禁用核心转储,那么Zabbix无法启动.
从部署包安装
List
Package:
mysql.5.7
zabbix-server-mysql-4.4
zabbix-web-mysql-4.4
ntpdate
httpd
# Zabbix4.4引入了一种新型的代理zabbix_agent2,提供了广泛的新功能和高级监视功能
1> 用Go语言编写
2> 用于监视各种服务和应用程序的插件框架
3> 能够在两次检查之间维持状态(例如,保持持久的数据库连接)
4> 内置调度程序以支持灵活的时间间隔
5> 使用批量数据传输来有效地利用网络
6> 即将支持使用更多平台直接替换Linux上的现有代理。
# 仍将支持现有的zabbix代理
Zabbix监控端安装
初始化
init_security() {
systemctl stop firewalld
systemctl disable firewalld &>/dev/null
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
sed -i '/^GSSAPIAu/ s/yes/no/' /etc/ssh/sshd_config
sed -i '/^#UseDNS/ {s/^#//;s/yes/no/}' /etc/ssh/sshd_config
systemctl enable sshd crond &> /dev/null
rpm -e postfix --nodeps
echo -e "\033[32m [安全配置] ==> OK \033[0m"
}
init_security
# 可以直接复制上面这段函数到命令行
安装zabbix的yum(国外源)源及zabbix包
init_yumsource() {
if [ ! -d /etc/yum.repos.d/backup ];then
mkdir /etc/yum.repos.d/backup
fi
mv /etc/yum.repos.d/* /etc/yum.repos.d/backup 2>/dev/null
if ! ping -c2 www.baidu.com &>/dev/null
then
echo "您无法上外网,不能配置yum源"
exit
fi
curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
# rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
# 以前我记得能直接下载国外源zabbix的,现在不行了,换成下面阿里的即可
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
yum clean all
timedatectl set-timezone Asia/Shanghai
echo "nameserver 114.114.114.114" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
chattr +i /etc/resolv.conf
echo -e "\033[32m [YUM Source] ==> OK \033[0m"
}
init_yumsource
安装zabbix的yum(国内源)源及zabbix包
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.centos.noarch.rpm
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.backup
wget http://mirrors.aliyun.com/repo/Centos-7.repo
mv Centos-7.repo CentOS-Base.repo
# 更新yum源更新命令
yum clean all
yum makecache
yum update -y
# 更换为国内源
cat zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
# 添加gpgkey
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX-A14FE591 -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
# 添加之后即可使用,更新源
yum makecache -y
# 安装相关软件
yum install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql mariadb-server mariadb zabbix-agent -y
安装数据库并初始化数据库
init_mysql() {
yum -y install mariadb mariadb-server
systemctl start mariadb && systemctl enable mariadb
mysqladmin password 'flying'
mysql -uroot -pflying <<EOF
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
flush privileges;
EOF
}
init_mysql
修改配置文件并启动服务
init_zabbix() {
yum -y install epel-release zabbix-server-mysql zabbix-web-mysql zabbix-agent
zcat /usr/share/doc/zabbix-server-mysql-4.4.1/create.sql.gz |mysql -uroot -pflying zabbix
sed -i '/^;date.timezone/a\date.timezone = Asia/Shanghai' /etc/php.ini
sed -i '/# DBPassword=/a\DBPassword=password' /etc/zabbix/zabbix_server.conf
systemctl start httpd mariadb zabbix-server && systemctl enable httpd mariadb zabbix-server
echo -e "\033[32m [Mysql Package Download Succeeded] ==> OK \033[0m"
}
init_zabbix
# 至此,可以通过部署的这一台主机IP地方访问到zabbix的图形化了.
浏览器输入: IP/zabbix