一、Zabbix特点
Zabbix 是由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持。
Zabbix 是一个企业级的分布式开源监控方案。
Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。
Zabbix支持主动轮询和被动捕获。Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。适当的配置后,Zabbix可以在IT基础架构监控方面扮演重要的角色。对于只有少量服务器的小型组织和拥有大量服务器的大型公司也同样如此。
zabbix可以通过SNMP,Agent,ssh/telnet,IPMI(端口监视),JMX等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。
Zabbix是免费的。Zabbix是根据GPL通用公共许可证第2版编写和发行的。这意味着它的源代码都是免费发行的,可供公众任意使用。
特点:
Zabbix是一个高度集成的网络监控解决方案,一个简单的安装包中提供多样性的功能。
数据收集
- 可用性和性能检查
- 支持SNMP(包括主动轮训和被动获取),IPMI,JMX,VMware监控
- 自定义检查
- 按照自定义的间隔收集需要的数据
- 通过server/proxy+agents来执行
灵活的阀值定义
- 可以非常灵活的定义问题阈值,称之为触发器,触发器从后端数据库获取参考值
高度可配置化的告警
- 可根据递增机制,接收方和媒介类型自定义发送告警通知
- 使用宏变量可以使告警通知更加高效有用
- 自动相应动作可包含远程命令
实时图表绘制
- 使用内置图表绘制功能可以将监控项的内容实时绘制成图表,高水平的业务视图监控资源。
Web监控功能
- Zabbix可以追踪模拟鼠标在Web网站上的点击操作,来检查Web的功能和响应时间
丰富的可视化选项
- 支持创建自定义的图表,一个试图集中展现多个监控项
- 网络拓扑图
- 以仪表盘的样式自定义大屏展现和幻灯片轮询播放
- 报表
- 监控内容的高级(业务)视图
历史数据存储
- 数据库数据
- 可配置历史数据
- 内置数据管理机制(housekeeping)
配置简单
- 将被监控对象添加为主机
- 在数据库中获取主机进行监视
- 应用模板来监控设备
使用模板
- 在模板中分组检查
- 模板可以关联其他模板
网络发现
- 自动发现网络设备
- 监控代理自动注册
- 发现文件系统,网络接口和SNMP OID值
快捷的Web界面
- PHP Web前端
- 可从任何地方访问
- 你可以定制自己的操作方式
- 审核日志
Zabbix API
- Zabbix API为Zabbix 提供了对外的可编程接口,用于批量操作,第三方软件集成和其他目的
权限管理系统
- 安全用户认证
- 特定用户可以限制访问特定的视图
功能强大,易于扩展的agent
- 部署在被监控对象上
- 支持Linux和Windows
二进制代码
- 为了性能和更少内存的占用,用C语言编写
- 便于移植
为复杂环境准备
- 使用Zabbix proxy代理服务器,使得远程监控更简单
支持自由的自定义事件和邮件发送。
二、Zabbix结构
Zabbix由几个主要的软件组件构成,这些组件的功能如下。
1. Zabbix Server
Zabbix server 是agent程序报告系统可用性、系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。
2. Database Storage
所有配置信息和Zabbix收集到的数据都被存储在数据库中。
3. Web interface
为了从任何地方和任何平台都可以轻松的访问Zabbix, 提供基于Web的Zabbix界面。该界面是Zabbix Server的一部分,通常(但不一定)跟Zabbix Server运行在同一台物理机器上。
如果使用SQLite,Zabbix Web界面必须要跟Zabbix Server运行在同一台物理机器上。
4. PROXY代理服务器
Zabbix proxy 可以替Zabbix Server收集性能和可用性数据。Proxy代理服务器是Zabbix软件可选择部署的一部分;当然,Proxy代理服务器可以帮助单台Zabbix Server分担负载压力。
5. AGENT监控代理
Zabbix agents监控代理 部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix Server。
三、Zabbix进程
默认情况下zabbix包含5个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选,这个需要另外安装。
zabbix_agentd
客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。
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。
逻辑关系图:
四、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的负载的程序
zabbix流程图,其串联了各术语之间的关系:
五、zabbix的监控架构
在实际监控架构中,zabbix根据网络环境、监控规模等 分了三种架构: server-client 、master-node-client、server-proxy-client 三种 。
server-client架构
上图是server-client架构,也是zabbix的最简单的架构,监控机和被监控机之间不经过任何代理 ,直接由zabbix server和zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境 。
server-proxy-client架构
上图是server-proxy-client架构,其中proxy是server、client之间沟通的一个桥梁,proxy本身没有前端,而且其本身并不存放数据,只是将agentd发来的数据暂时存放,而后再提交给server 。该架构经常是和master-node-client架构做比较的架构 ,一般适用于跨机房、跨网络的中型网络架构的监控。
master-node-client架构
上图是master-node-client架构,该架构是zabbix最复杂的监控架构,适用于跨网络、跨机房、设备较多的大型环境 。每个node同时也是一个server端,node下面可以接proxy,也可以直接接client 。node有自已的配置文件和数据库,其要做的是将配置信息和监控数据向master同步,master的故障或损坏对node其下架构的完整性。
六、Zabbix安装要求
部署Zabbix有四种途径:
- 从分发包进行安装
- 下载最新的源代码归档,并自行编译
- 从容器安装
- 下载虚拟应用
安装要求:
硬件
内存和磁盘:
Zabbix同时需要物理内存和磁盘空间。刚开始使用Zabbix,建议128MB物理内存和256MB可用磁盘空间。然而, 具体需要的内存大小和磁盘空间要根据主机数量和监控参数而定。如果你计划对监控的参数进行长期保存,你应该考虑至少在数据库中预留几个GB的空间,以用来保留历史数据。
每个Zabbix的守护进程需要与数据库服务器建立多个连接。分配给连接的内存数量,取决于数据库引擎的配置。
CPU:
根据监控参数及选择的数据库引擎,Zabbix,特别是Zabbix数据库,可能需要大量的CPU资源。
下表是几个硬件配置的示例:
名称 | 平台 | CPU/内存 | 数据库 | 监控主机数量 |
---|---|---|---|---|
小型 | CentOS | 虚拟应用 | MySQL InnoDB | 100 |
中型 | CentOS | 2 CPU cores/2GB | MySQL InnoDB | 500 |
大型 | RedHat Enterprise Linux | 4 CPU cores/8GB | RAID10 MySQL InnoDB or PostgreSQL | >1000 |
巨大型 | RedHat Enterprise Linux | 8 CPU cores/16GB | 快速RAID10 MySQL InnoDB or PostgreSQL | >10000 |
具体的配置极其依赖于Active Item数量和轮询频率。如需要进行大规模部署,强烈建议将数据库进行独立部署。
支持平台
由于监控服务器的安全要求及关键任务的特性,UNIX是唯一可以持续提供必要性能、容错性和扩展性的操作系统。Zabbix可以运行在市场上的主流版本。
- Linux
- IBM AIX
- FreeBSD
- NetBSD
- OpenBSD
- HP-UX
- Mac OS X
- Solaris
- Windows: Windows 2000以后的所有桌面和服务器版本 (只可运行Zabbix agent)
软件
Zabbix基于先进的Apache Web服务器、领先的数据库引擎和PHP脚本语言进行构建。
数据库管理系统
软件 | 版本 | 备注 |
---|---|---|
MySQL | 5.0.3或以上 | 使用MySQL作为Zabbix后端数据库。需要InnoDB引擎。 |
Oracle | 10g或以上 | 使用Oracle作为Zabbix后端数据库。 |
PostgreSQL | 8.1或以上 | 使用PostgreSQL作为Zabbix后端数据库。 |
SQLite | 3.3.5或以上 | 使用SQLite作为Zabbix后端数据库。 |
数据库容量
Zabbix配置数据需要使用固定的磁盘空间,而且这个空间不会过多增长。
前端
Zabbix前端需要使用下列软件:
软件 | 版本 |
---|---|
Apache | 1.3.12或以上 |
PHP | 5.4.0或以上 |
PHP扩展包 | … |
客户端浏览器
必须启用Cookies和Java Script功能。
支持最新版本的Google Chrome,Mozilla Firefox,Microsoft Internet Explorer和Opera。其他浏览器(如Apple Safari, Konqueror)可能也支持Zabbix。
时钟同步
对于Zabbix稳定运行而言,服务获得精确的系统时间是非常重要的。ntpd 是一个最流行的用于同步主机和其他服务器之间的时间的后台程序。对于所有运行Zabbix组件的系统,强烈建议这些系统的时间保持同步。
如果时间未同步,Zabbix将在建立数据连接之后,根据得到的客户端/服务器的时间戳,将获得值的时间戳转化为Zabbix server的时间,并且会根据客户端-服务器的时间差对获得值的时间戳进行调整。
为了保持简单,并且避免可能的并发问题出现,网络延迟会被忽略。因此,通过主动连接(active agent, active proxy, sender)获得的时间戳数据包含网络延迟,通过被动连接(passive proxy)获得的数据已经减去了网络延迟。所有其他检查服务器花费的时间和它们的时间戳不调整。
七、Zabbix部署包安装
1. 安装zabbix服务端所需软件
安装配置zabbix专用源
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all
yum makecache
# 下载安装完成后,/etc/yum.repos.d 目录下会生成 zabbix.repo 文件,即可正常使用zabbix源
安装zabbix服务端组件
yum -y install zabbix-server-mysql zabbix-get
安装Software Collections软件包仓库源
yum -y install centos-release-scl
安装zabbix前端页面及初始数据库相关组件、PHP及httpd组件
yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl
2. 安装并配置MySQL数据库
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
yum install lrzsz -y
cd /usr/local/src
# 上传mysql-8.0.16-2.el7.x86_64.rpm-bundle包到当前
tar xf mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar && rm -rf mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar
yum localinstall * -y
systemctl start mysqld
# 查找mysql临时登陆密码
grep 'temporary password' /var/log/mysqld.log
# 使用临时密码登录
mysql -pRmbS?_kpH0ah
# 修改密码
mysql> alter user 'root'@'localhost' identified by 'mysql123.COM';
Query OK, 0 rows affected (0.16 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
# 创建zabbix用于存储数据的数据库
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected, 2 warnings (0.03 sec)
# 创建zabbix用于连接数据库的数据库用户
mysql> create user 'zabbix'@'localhost' identified with mysql_native_password by 'zabbix123.COM';
Query OK, 0 rows affected (0.01 sec)
# 给zabbix所使用的数据库用户授权
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost';
Query OK, 0 rows affected (0.01 sec)
导入zabbix初始数据库
[root@zabbix-server ~] zcat /usr/share/doc/zabbix-server-mysql-*/create.sql.gz | mysql -uzabbix -p'zabbix123.COM' zabbix
3. zabbix配置
- 配置数据库连接信息
# 备份
[root@zabbix-server ~] cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.bak
# 配置
[root@zabbix-server ~] vim /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBHost=localhost # 值为zabbix连接数据库的用户的客户端,即上面创建的 'zabbix'@'localhost'用户的客户端
DBName=zabbix # 值为zabbix连接数据库的数据库名,上面创建的zabbix数据库
DBUser=zabbix # 值为zabbix连接数据库的用户,即上面创建的 'zabbix'@'localhost'用户的客户端
DBPassword=zabbix123.COM # zabbix数据库用户密码
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
配置文件中的这四条信息必须和以上数据库中创建的一一对应
- 配置时区信息
[root@zabbix-server ~]# sed -i 's/; php_value\[date.timezone\] = Europe\/Riga/php_value\[date.timezone\] = Asia\/Shanghai/' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
- 配置字体,避免前台监控图形中文乱码
[root@zabbix-server ~]# yum -y install wqy-microhei-fonts
[root@zabbix-server ~]# mv /usr/share/fonts/dejavu/DejaVuSans.ttf /usr/share/fonts/dejavu/DejaVuSans.ttf.bak
[root@zabbix-server ~]# cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
启动zabbix相关服务并设置开机自启动
[root@zabbix-server ~]# setenforce 0
[root@zabbix-server ~]# sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
[root@zabbix-server ~]# systemctl start mysqld httpd rh-php72-php-fpm zabbix-server
# 设置为开启自启动
[root@zabbix-server ~]# systemctl enable mysqld httpd rh-php72-php-fpm zabbix-server
- 浏览器上访问zabbix前端,进行初始化安装
4. Zabbix初始化
浏览器访问 IP/zabbix
第一步:
第二步:确保全部OK
第三步:所填信息要和 /etc/zabbix/zabbix_server.conf 文件中一致
第四步:
第五步:确认信息
第六步:配置无误,初始化完成
第七步:登录
默认用户名是Admin,密码是zabbix,登录后请及时修改密码
进入系统后,默认是英文显示,点击左下角User settings,设置语言为中文即可
修改密码
Zabbix5.0 部署完成,如果要管理客户机,需要在客户机上安装 zabbix-agent 工具
七、添加要监控的客户端
在需要被监控主机安装zabbix-agent服务并配置
[root@zabbix-client001 ~]# sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
[root@zabbix-client001 ~]# setenforce 0
[root@zabbix-client001 ~]# systemctl stop firewalld
[root@zabbix-client001 ~]# systemctl disable firewalld
[root@zabbix-client001 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.0-1.el7.x86_64.rpm
[root@zabbix-client001 ~]# vim /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
DenyKey=system.run[*]
Server=192.168.126.70
ListenPort=10050
ServerActive=192.168.126.70
Hostname=zabbix-client001
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@zabbix-client001 ~]# systemctl start zabbix-agent
在zabbix管理平台添加需要被管理的主机
登录zabbix平台,找到“配置”—“主机”—“创建主机”,填入相关信息,选择对应的监控模板进行添加
对该客户端关联模版
添加完成后可以在主机列表中看到刚才添加的主机,稍等一会后,可用性中的“ZBX”变成绿色,即表示与客户端zabbix-agent正常连接,便可以获取到客户机相关运行数据