Zabbix监控系统
zabbix是一个基于WEB界面的提供分布式系统监控以及网络监控功能的企业级开源监控套件。
全面监控
适用于任何IT基础架构、服务、应用程序和资源的监控解决方案
一、Zabbix基础介绍
1.1 Zabbix简介
Zabbix由Alexei Vladishev(阿列克谢·弗拉迪舍夫)创建,目前由其成立的公司:Zabbix SIA积极的持续开发更新维护,并为用户提供技术支持服务。
Zabbix是免费的。Zabbix是根据GPL通用公共许可证的第二版编写和发布的。这意味着产品源代码是免费发布的,可供公共使用。
Zabbix软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix使用灵活的告警机制, 允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix基于存储的数据提供出色的报表和数据可视化功能。这些功能使得Zabbix成为容量规划的理想选择。
1.2 Zabbix功能
Zabbix是一个高度成熟完善的网络监控解决方案,一个软件包中包含了多种功能:
数据采集
-
可用性和性能检查
-
支持SNMP(包括主动轮询和被动捕获),IPMI,JMX,VMware监控;
简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。
智能平台管理接口(Intelligent Platform Management Interface)原本是一种Intel架构的企业系统的周边设备所采用的一种工业标准。IPMI亦是一个开放的免费标准,用户无需支付额外的费用即可使用此标准。
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
-
自定义检查;
-
按照自定义的时间间隔采集需要的数据;
-
通过Server/Proxy和Agents来执行数据采集;
灵活的阈值定义
可以参考后端数据库定义非常灵活的告警阈值,即触发器
高度可配置化的警告
- 可以根据递增计划,接收者,媒介类型自定义发出警告;
- 使用宏变量可以使告警通知变得更加高效有用;
- 自动操作包含远程执行命令。
实时图形
使用内置图形功能可以将监控项实时绘制成图形。
Web监控功能
Zabbix可以追踪模拟鼠标在Web网站上的点击操作,来检查Web网站的功能和响应时间。
丰富的可视化选项
- 可以组合多个监控项到单个视图中,创建自定义图表;
- 网络拓扑图;
- 以仪表盘样式展示自定义聚合图形和幻灯片演示;
- 报表;
- 监控资源的更高层次展示视图(业务视图)。
历史数据储存
- 储存在数据库中的数据;
- 历史配置;
- 内置数据管理机制(housekeeping(总务处,后勤部;家务开支))。(housekeeping的作用是删除数据库里的过期数据,在zabbix的web页面中,我们就可以很方便的对6种不同类型的数据设置保留时间)
配置简单
- 将被监控设备添加为主机;
- 主机一旦添加到数据库中,就会采集数据用于监控;
- 将模板用于监控设备。
使用模板
- 模板中分组检查;
- 模板可以关联模板,继承已关联模板的属性。
网络发现
- 自动发现网络设备;
- Zabbix Agent发现设备后自动注册;
- 自动发现文件系统、网络接口和SNMP OIDs值。(OIDs:对象标识符列表)
快捷的Web界面
- 基于PHP的Web前端;
- 可以从任何地方访问;
- 可以制定自己的操作方式;
- 可以通过审计日志来查看你的操作。
Zabbix API
Zabbix API为Zabbix提供可编程接口,用于批量操作,第三方软件集成和其他用途。
权限管理系统
- 安全的用户身份验证;
- 指定的用户只能查看指定的权限范围内的视图。
功能强大且易于扩展的Zabbix Agent
- 部署于被监控对象上;
- 支持Linux和windows;
二进制守护进程
- 为了更好的性能和更少的内存占用,采用C语言编写;
- 便于移植。
适应更复杂的环境
使用Zabbix Proxy代理,可以轻松实现分布式远程监控。
1.3 Zabbix架构
Zabbix由几个主要的功能组件组成,其功能介绍如下所示:
Server
Zabbix server是Zabbix软件的核心组件,agent向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。
数据库
所有配置信息以及Zabbix采集到的数据都被存储在数据库中。
Web界面
为了从任何地方和任何平台轻松访问Zabbix,提供了基于web的界面。该界面是Zabbix server的一部分,通常(但不一定)和Zabbix server运行在同一台物理机器上。
Proxy
Zabbix proxy可以代替Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。
Agent
Zabbix agents部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给Zabbix server。
数据流
整体的了解下Zabbix内部的数据流对Zabbix的使用也很重要。
- 首先,为了创建一个采集数据的监控项,您就必须先创建主机。
- 其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action) 。
因此,如果您想要收到类似"X个server上CPU负载过高"这样的告警,您必须首先为Server X创建一个主机条目,其次创建一个用于监控其CPU的监控项,最后创建一个触发器, 用来触发CPU负载过高这个动作,并将其发送到您的邮箱里。
虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得Zabbix的配置变得更加灵活易用。
1.4 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_java_gateway
zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。
二、部署Zabbix监控系统
2.1 硬件建议
下面是官方给出的硬件参考建议:
规模 | 平台 | CPU/内存 | 数据库 | 受监控的主机数量 |
---|---|---|---|---|
小型 | CentOS | Virtual Appliance | MySQL InnoDB | 100 |
中型 | CentOS | 2 CPU cores/2GB | MySQL InnoDB | 500 |
大型 | RedHat Enterprise Linux | 4 CPU cores/8GB | RAID10 MySQL InnoDB 或 PostgreSQL | >1000 |
极大型 | RedHat Enterprise Linux | 8 CPU cores/16GB | Fast RAID10 MySQL InnoDB 或 PostgreSQL | >10000 |
2.2 基础环境准备
# 关于selinux的配置当前官网提供的方法使用后无效。所以采用关闭的方法进行搭建
# 只准备mysql即可
# 安装MySQL官方源
$ wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
$ rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL
$ yum remove mariadb-libs -y
$ yum install mysql-community-server -y
# 启动服务
$ systemctl enable mysqld.service
$ systemctl start mysqld.service
# 防火墙放行
$ firewall-cmd --add-service=mysql --permanent
$ firewall-cmd --reload
$ firewall-cmd --list-all
# MySQL启动后会生成临时密码
$ grep 'temporary password' /var/log/mysqld.log
2020-05-07T07:54:50.243898Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: &g)*DyRt0_oq
# 通过使用生成的临时密码登录并为超级用户帐户设置自定义密码,尽快更改root密码:
$ mysql -uroot -p'&g)*DyRt0_oq'
# 修改密码
> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456Abc!';
Query OK, 0 rows affected (0.00 sec)
# 注意: MySQL的validate_password插件默认安装。
# 这将要求密码包含至少一个大写字母,一个小写字母,一个数字和一个特殊字符,并且密码总长度至少为8个字符。
2.3 安装和配置 Zabbix server
2.3.1 安装Zabbix源
$ cd /etc/yum.repos.d/
$ rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
$ yum clean all
2.3.2 安装 Zabbix server,agent,frontend
# 安装 Zabbix server 和 agent
$ yum install zabbix-server-mysql zabbix-agent
# 安装 Zabbix frontend
# 启用Red Hat软件集
# Centos7 gcc版本默认4.8.3,Red Hat 为了软件的稳定和版本支持,yum 上版本也是4.8.3,所以无法使用yum进行软件更新,所以使用scl。
# scl软件集(Software Collections),是为了给 RHEL/CentOS 用户提供一种以方便、安全地安装和使用应用程序和运行时环境的多个(而且可能是更新的)版本的方式,同时避免把系统搞乱。
$ yum install centos-release-scl
# 开启 zabbix-frontend 的yum源
$ vim /etc/yum.repos.d/zabbix.repo
[zabbix-frontend]
...
enabled=1
...
$ yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl
# 防火墙放行
$ firewall-cmd --zone=public --add-port=80/tcp --permanent
$ firewall-cmd --reload
$ firewall-cmd --list-all
2.3.3 创建初始化数据库
# 创建zabbix数据库及zabbix用户
$ mysql -uroot -p123456Abc!
> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected, 2 warnings (0.05 sec)
> create user 'zabbix'@'localhost' identified with mysql_native_password by '123456Abc!';
Query OK, 0 rows affected (0.00 sec)
> grant all privileges on zabbix.* to 'zabbix'@'localhost';
Query OK, 0 rows affected (0.02 sec)
> exit
3.3.4 导入数据库数据
$ zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p123456Abc! zabbix
2.3.5 为Zabbix server配置数据库
$ vim /etc/zabbix/zabbix_server.conf
DBPassword=123456Abc!
2.3.6 为Zabbix frontend配置PHP
# 调整nginx配置文件
# 修改监听ip 或 修改主机名
$ vim /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
# listen 192.168.215.3:80;
# server_name example.com;
listen 80;
server_name 192.168.215.3;
# 调整php配置文件
$ vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
listen.acl_users = apache,nginx
php_value[date.timezone] = Asia/Shanghai
2.3.7 启动Zabbix server和agent服务
$ systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
$ systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
2.3.8 配置Zabbix frontend
- 使用浏览器连接到http://192.168.215.3/setup.php
- 跟着向导一步一步安装:Installing frontend
- 安装成功后,登录默认用户名Admin,密码:zabbix
http://192.168.215.3/index.php
2.3.9 修改页面语言及登陆密码
首先使用默认用户名Admin登录zabbix服务器,选中administration,再点击users,然后点击Admin用户。
- 点击"Change password"可以打开修改密码选项卡;
- "Language"可以选择界面语言,可以选择中文;
- "Groups"可以调整所属的组;
- "Theme"可以调整界面主题风格;
- 选中administration,再点击users,然后点击create user用户,可以创建新用户
2.3.10 修改zabbix中文乱码(新版本不需要)
zabbix安装后,显示语言为中文时,会出现中文乱码情况,这主要是字体导致的问题。如果要解决,需要下载合适的字体,并将其上传到zabbix服务器上。
在windows主机的"C:\Windows\Fonts"下可以找到楷体文件,即:simkai.ttf文件,将其上传到zabbix服务器的文档根目录中,YUM安装的默认安装目录在/usr/share/zabbix中。
$ cp simkai.ttf /usr/share/zabbix/assets/fonts/
$ cd /usr/share/zabbix/assets/fonts/
$ ls
graphfont.ttf simkai.ttf
然后修改PHP界面指定的字体文件:
$ vim /usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
define('ZBX_FONT_NAME', 'simkai');
# 原先的名字为:graphfont
# 修改完毕后,刷新界面即可
2.4 Zabbix监控服务器
2.4.1 在被监控服务器上安装agent
如果希望监控linux服务器,可以使用agent的方式, 即在linux服务器上安装zabbix的agent。
# web001节点操作
$ cd /etc/yum.repos.d/
$ rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
$ yum clean all
$ yum install zabbix-agent
修改agent的配置文件/etc/zabbix/zabbix_agentd.conf,主要设置3项内容:
$ vim /etc/zabbix/zabbix_agentd.conf
# 允许server来agent主动取数据
Server=192.168.215.3
# 允许agent主动提交数据给server
ServerActive=192.168.215.3
# 这个名字将要被添加到server的主机列表里
Hostname=web001
启动agent服务并设置开启启动,默认端口为10050,需要在防火墙中放行(如果开启)
$ systemctl enable zabbix-agent.service
$ systemctl start zabbix-agent.service
$ firewall-cmd --add-service=zabbix-agent --permanent
$ firewall-cmd --reload
$ firewall-cmd --list-all
2.4.2 在zabbix服务器上去添加主机
选择"配置" → “创建主机”
主机名称添加:web001,需要和agent配置文件中hostname配置一致,添加到默认的linux servers群组中,在interfaces中添加web001的IP地址。
选择"模板”界面,将链接的模板选择为"Template OS Linux by Zabbix agent",点击添加,添加主机
稍微过一段时间,可以看到下图情况,可用性处"ZBX"为绿色,则表示添加成功。
也可以去查看监控中的图形情况,选择监控项即可查看