目录
- 1、为什么要使用Zabbix监控工具
- 2、Zabbix简介
- 3、实验环境规划
- 4、Yum 安装Zabbix监控系统
- 4.1 Zabbix-Server端配置
- 4.1.1 基础环境配置
- 4.1.2 下载Zabbix Yum源仓库
- 4.1.3 安装Zabbix服务端相关组件zabbix-server、zabbix-agent、zabbix-get
- 4.1.4 安装Zabbix前端组件
- 4.1.5 安装Zabbix-Database(mariadb数据库)
- 4.1.6 为Zabbix-Server配置数据库
- 4.1.7 导入初始SQL语句
- 4.1.8 更改Zabbix-Server配置文件,配置数据库
- 4.1.9 为Zabbix配置前端PHP时区
- 4.1.10 更改程序运行用户
- 4.1.11启动Zabbix服务各个组件
- 4.1.12配置Zabbix前端
- 4.1.13登录Zabbix监控系统
- 4.2 Zabbix前端部分优化
- 4.3 部署Zabbix-Agent端
- 5、Zabbix Server端添加监控设备
1、为什么要使用Zabbix监控工具
在企业运维中,管理员必须随时关注各服务器和网络的运行状况,以便 及时发现问题,尽可能减少故障的发生。当网络中的设备、服务器等数 量较多时,为了更加方便、快捷的获得设备自身的一些数据信息时,通 常会借助一些集中监控软件对设备进行监控提供实时的监控数据。
监控软件使用比较多的有:Zabbix、Prometherus、Cacti、Nagio。
Zabbix是集Cacti和Nagios两种监控工具的优点于一身功能更强大, 是实现企业级分布式监控不可或缺的一部分。
Prometherus可能会更偏向于和容器搭边使用,如K8S。
2、Zabbix简介
Zabbix是一个基于Web界面的开源企业级监控工具,由C语言编写而成 的底层架构(server端和agent端)提供分布式系统监控、自动发现、 集中展示、管理分布式、扩展性、数据收集、通知机制等功能,具备主 机的性能监 控、网络设备性能监控、数据库性能监控、等多种监控种类 和多种告警 方式并提供详细的报表、图表的绘制等。监控对象可以是 Linux和Windows服务器,也可以是路由、交换等网络设备。
并提供灵活的通知机制让系统管理员快速定位、解决存在的各种问题。
Zabbix Server端口:10051
Zabbix Agent端口:10050
目前Zabbix最新版本:Zabbix5.2
Zabbix官网地址
2.1 一个完整的监控系统需要具备的指标
1、采集:周期性的获取某个被检测指标的相关数据。
2、存储:将采集的数据存储再指定的存储系统中,Zabbix默认是 MySQL。
3、监控的数据:历史数据,可理解为过去某一时间点的数据。趋势数据,可解释为根据过去时间点到当前时间点显示的数据趋势。
4、展示:为了使数据能够直观的展示给用户,可将采集的数据进行 二次处理,做出图形,Zabbix使用PHP程序将采集的数据 通过Web GUI界面展示给用户。
5、报警:当监控的指标出现异常能够自动发出报警信息,甚至报警 后能自动完成修好和执行特定的命令。
2.2 Zabbix5.0 LTS新特性
1、5.0 LTS的发布时间为2020年4月。
2、Zabbix5.0版本后需要使用agent2作为代理端监控。(static表示为agent2)
3、Zabbix Agent2使用Golang语言编写,可方便编写各种插件,灵活配置监控(4.4版本也是Golang语言编写,4.4版本之前是C编写。现分为agent和agent2
4、PHP的版本需要7.2.x或者以上。
5、MySQL需要5.6或者以上。
2.3 Zabbix运行模式、运行条件
Zabbix通过C/S模式采集数据,B/S模式在Web前端做数据展示和配置。
Zabbix运行模式
被监控端:在监控端设备上运行,负责收集数据提交给Zabbix Server。
Server端:通过被监控端设备上收集的数据,写入数据库,经过二次处理,在通过Web的方式展示。
运行条件
Zabbix需要运行在LAMP或LNMP环境上。
2.4 Zabbix主要组件
1、Zabbix Server:服务端组件,负责收集数据和计算展示。
2、Zabbix Agent:部署在被监控主机上,用户采集数据并提供 给Zabbix Server或Zabbix Proxy代理。
3、Zabbix Proxy:负责代替Zabbix Server收集其他组件提交 的数据,然后再集中提交给Zabbix Server,一般大型经常该组件以缓解Zabbix Server压力。
4、Zabbix-WebGUI:Zabbix提供的Gui接口,为Zabbix Server 提供的Web界面,PHP语言编写。
5、Zabbix-Database:用于存储Zabbix收集到的数据。
6、其他组件还有:zabbix-java-gateway、zabbix-get、zabbix-sender
2.5 Zabbix主要守护进程
默认情况下Zabbix包含五个程序:zabbix_server、 zabbix_agentd、zabbix_proxy 、zabbix_get、zabbix_sender,另外有个zabbix_java_gateway是可选的,需要另外安装。
1、Zabbix_Server:Zabbix服务端守护进程,其他所有组件进程的数据都是提交到zabbix_server,数据并不都主动提给 zabbix_server,也有被动提交数据的,即Server主动去获取数据(使用zabbix_get进程)。
2、Zabbix_Agent:客户端守护进行,此进程用于收集被监控端的数据并提交给server端。
3、Zabbix_proxy: Zabbix代理守护进程,功能类似Server,唯一不同的它只是一个中转站,代替Server收集数据,然后再一并提交给Server。
4、Zabbix_get:zabbix工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令,通常用于排错**。
5、Zabbix_sender:zabbix工具,用于发送数据给Server或者Proxy,通常用于耗时比较长的检测。跟多检测非常耗时间,导致zabbix超时,此时我们可以使 zabbix_sender主动提交数据Server或Proxy。
6、Zabbix_java_gateway:zabbix2.0之后引入的一个功能,顾名思义Java网关,但是只用于Java方面,需要注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。
2.6 Zabbix数据采集方式
1、SNMP协议:简单网络管理协议,主要针对网络设备进行数据 收集监控。
2、Zabbix Agent:Zabbix自带的组件,在编译安装时需要添加参数–enable-agent参数启用该组件,主要针对主机设备进行数据收集和监控,数据提交分为被动和主动提交。
3、通过IPMI:智能平台管理接口,通过这种方式,它可以采集到其他方法无法采集到的硬件状态信息,如CPU温度、风扇转速等,优点是:不管OS是开机或 还是关机状态下,只有能接通电源就可以实现对服务启动监控。缺点是被监控主机的硬件能够支持,一般需要单独购买控制卡。
4、通过JMX协议:JAVA管理扩展,JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议。是一个为应用程序、设备、系统等植入管理功能的框架,JMX框架在部队现有应用做修改的情况下植入到现有的应用中,对现有应用的运行情况进 行管理,一般只适用于采集Java应用的数据,如Tomcat,Zabbix Server端需要在编译安装Zabbix时添加参数–enable-java启用zabbix-java-gateway进程。JVM不太适合采集系统级的甚至硬件级的监控数据。要求被监控设备上必须按照Java环境。
5、SSH协议:通过SSH协议连接到被监控端,用户使用编写的特定脚本,收集特定的个性化数据。Zabbix服务器或代理端捕获被执行的命令序列或脚本程序所返回的结果作为被监控项目所采集的数据。
6、数据库监控:数据库监控采集方法的原理就是,Zabbix服务器进程直接通过ODBC接口技术,查询各种不同类型的数据库里的数据,以采集需要的数据内容。
2.7 Zabbix监控架构
Zabbix根据网络环境、监控规模等因素分为三种架构。
1、Server-client(直接连接)
2、Master-node-client(Node架构)
3、Server-proxy-client(Proxy架构)
1、Server-client架构
针对网络比较简单、设备比较少的环境下,该架构是zabbix中最简单的架构,监控端Server和被监控端之间不经过任何代理,直接在zabbix-server和zabbix-agentd(或其他获取 数据的方式;如SNMP)之间直接进行数 据交换。
2、Master-Node-client架构
针对跨机房、设备较多的大型环境,该架构是zabbix中最复杂的 监控架构,每个node同时也是一个Server端,node下面可以接proxy,也可以直接接client。node有自己的配置文件和数据库, 其要做的是将配置信息和监控数据想master同步。当master发生故障或损坏,node可以保证架构的完整性。
3、Server-Proxy-client架构
该架构适用于跨机房、跨网络的中型网络结构的监控,proxy 是 server、client之间沟通的一个桥梁,proxy本身没有前端,而且本身并不存放数据,只是将agent发来的数据暂时存放,而后 在提交给server。该架构经常和master-node-client做比较的 架构。
2.8 Zabbix监控流程/架构图
2.8.1 分布式架构图
2.8.2 中型架构图
2.8.3 Zabbix逻辑结构图
逻辑组件
1.主机组(hosts groups)
2.主机(hosts)
3.应用(application)
4.监控项(items)
5.触发器(triggers)
6.事件(events)
7.动作(actions):条件(condiitions)和操作(operations)
8.媒介(media):发送通知的通道,短信、邮件等。
9.通知(notiflcations)
10.远程命令(remote command)
11.报警升级(escalation)
12.模板(template)
13.图形(graph)
14.屏幕(screens)
15.幻灯(slide show)
4)监控流程
agent端需要安装到被监控主机上,它负责定期收集各项数据, 并发送到zabbix server端或proxy,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展示和绘图。当zabbix监控某个具体的项目时,我们可以设置一个触发器设定的 阈值,会进行一些必要的动作,动作包括发送通知机制(邮件、微信、钉钉、短信),发送命令(shell命令、 reboot、restart、install)
5)Agent的主、被动模式
agentd提交数据分为主动和被动两种模式。
agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启,一般建议不要设置为0,因为当监控项很多时,可以部分使用主动模式配置项ServerActive,部分使用 被动模式。
主动:agent主动建立TCP连接,并获取server主机的监控项列表, 并主动将监控项内需要检测的数据提交给server/proxy。
主动模式流程:
1.Agent主动找server要需要采集的数据。
2.Server响应Agent,发送要采集的数据内容。
3.Agent开始周期性地收集数据并提供给Server。
被动:server建立TCP连接,并向agent请求获取监控项数据,agent返回数据。
6)Zabbix Server启动后的进程
7)通信过程
zabbix首先向ServerActive配置的IP请求获取active items, 获取并提交active tiems数据值server或者proxy。很多人会 提出疑问:zabbix多久获取一次active items?它会根据配置 文件中的RefreshActiveChecks的频率进行,如果获取失败,那 么将会在60秒之后重试。分两个部分:
2.9 Zabbix主要特点
Zabbix是一个高度集成的系统/网络监控解解决方案,具备以下特点 等。
1.开源免费、无软件成本投入
2.支持分布式集中管理
3.针对简单、复杂的监控架构有多种解决方案
4.无厂家支持、出现问题解决比较麻烦
5.需要被监控端安装agent,所有数据都存储在数据库,产生的数据很大,并将主要在数据库
6.数据收集:可用性和性能检查、支持SNMP(trapping和polling)、IPMI、JMX、VMware的监控、按照自定义时间间隔收集所需数据
7.灵活的阈值定义:可以定义非常灵活的问题阈值,称为触发器,从后端数据库调用数值。
8.高度可配置的告警:可以自定义告警升级(escalstion)、接收者及告警方式、告警信息可以配置并允许使用宏(macro)变量、通过远程命令实行自动化动作(action)。
9.实时绘图:通过内置的绘图方法试试监控数据实时绘图。
10.Web界面:Zabbix-Server将接收到的数据通过Web界面展示
11.广泛的可视化选项:能够创建自定义图表,可以组合多个项到一个单一的视图中网络拓扑、自定义屏幕和侧边栏作为仪表盘(dashboard)样式显示报告、监视资源的高级视图(商业)。
12.历史数据存储:使用数据库存储数据、配置历史、内置的管理程序。
13.模板:模板中的可以组监控、模板可以继承其他模板。
14.网络发现:网络设备的自动发现、代理(agent)自动注册、自动发现文件系统、网络接口、SNMP OID。
15.快速的Web接口:Web前端采用PHP编写、按照自定义的方式单击审计日志。
16.Zabbix API:Zabbix API提供可编程接口面向zabbix大规模操 作,方便第三方软件集成。
17.权限系统:全的用户认证、某些用户可以受限于某些视图,
18.功能齐全易于扩展(agent) 部署在监控设备目标上、网络设备通过SNMP协议。
19.二进制守护进程:用C语言编写,高性能、内存占用少。
20.为复杂环境准备多种监控架构:通过使用Zabbix-Proxy可以轻松进行远程监控。
3、实验环境规划
这里的环境比较简单,主要是演示Yum-安装Zabbix和监控一台linux客户端。
OS | IP | 主机名 | 需要安装的组件 |
---|---|---|---|
CentOS-7.5 | 192.168.8.2 | zabbix-server | Zabbix-server、Zabbix-agent、Zabbix-get、Zabbix-database |
CentOS-7.5 | 192.168.8.3 | node-01 | zabbix-01、zabbix-java-gateway、zabix-sender |
4、Yum 安装Zabbix监控系统
4.1 Zabbix-Server端配置
4.1.1 基础环境配置
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
[root@localhost ~]# hostname zabbix-server
[root@localhost ~]# bash
[root@zabbix-server ~]#
4.1.2 下载Zabbix Yum源仓库
[root@zabbix-server ~]# cd /etc/yum.repos.d/
[root@zabbix-server yum.repos.d]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zabbix-server yum.repos.d]# yum clean all && yum makecache fast
//快速建立yum缓存
4.1.3 安装Zabbix服务端相关组件zabbix-server、zabbix-agent、zabbix-get
[root@zabbix-server yum.repos.d]# yum -y install zabbix-server-mysql zabbix-agent zabbix-get
4.1.4 安装Zabbix前端组件
首先我们需要启动zabbix Yum源仓库里的指定仓库,然后在安装zabbix前端组件前,我们首先需要下载红帽的软件集合,这样我们在安装zabbix前端组件时可以解决我们前端软件的依赖关系。
[root@zabbix-server yum.repos.d]# vim zabbix.repo
8 [zabbix-frontend]
9 name=Zabbix Official Repository frontend - $basearch
10 baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/frontend
11 enabled=1 //启用该仓库
12 gpgcheck=1
13 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
[root@zabbix-server yum.repos.d]# yum -y install centos-release-scl
//下载红帽软件集合
[root@zabbix-server yum.repos.d]# yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl //安装zabbix前端组件
4.1.5 安装Zabbix-Database(mariadb数据库)
[root@zabbix-server ~]# yum -y install mariadb mariadb-server mariadb-devel
[root@zabbix-server ~]# systemctl enable --now mariadb
[root@zabbix-server ~]# mysqladmin -u root password '123.com'
4.1.6 为Zabbix-Server配置数据库
[root@zabbix-server ~]# mysql -uroot -p123.com
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> create user zabbix@'192.168.8.%' identified by '123.com';
MariaDB [(none)]> grant all on zabbix.* to zabbix@'localhost' identified by '123.com';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
4.1.7 导入初始SQL语句
[root@zabbix-server ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix //将数据导入zabbix库中
Enter password:abc123,
4.1.8 更改Zabbix-Server配置文件,配置数据库
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
100 DBName=zabbix
116 DBUser=zabbix
124 DBPassword= 123.com
4.1.9 为Zabbix配置前端PHP时区
[root@zabbix-server ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
24 php_value[date.timezone] = Asia/Shanghai //删除注释
4.1.10 更改程序运行用户
可选配置,如果后续有步骤报错,有可能就是这里的原因。注意
[root@zabbix-server ~]# chown -R apache:apache /etc/zabbix/*
[root@zabbix-server ~]# chown -R apache:apache /usr/lib/zabbix/*
[root@zabbix-server ~]# chown -R apache:apache /usr/share/zabbix/*
[root@zabbix-server ~]# chown -R apache:apache /etc/opt/rh/rh-php72/*
[root@zabbix-server ~]# chown -R apache:apache /etc/httpd/*
4.1.11启动Zabbix服务各个组件
[root@zabbix-server ~]# systemctl restart httpd mariadb rh-php72-php-fpm
[root@zabbix-server ~]# systemctl restart zabbix-server zabbix-agent
[root@zabbix-server yum.repos.d]# netstat -anpt | grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 17381/zabbix_agentd
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 17380/zabbix_server
tcp6 0 0 :::10050 :::* LISTEN 17381/zabbix_agentd
tcp6 0 0 :::10051 :::* LISTEN 17380/zabbix_server
4.1.12配置Zabbix前端
建议使用火狐或Google浏览器,完成Zabbix前端配置
URL:http://192.168.8.2/zabbix
这里提示报错了,提供拒绝连接,也就是没有权限,在数据库中添加以下SQL语句即可
原因是更改了主机名,现在授权一下新的主机名即可,授权完成后,再次连接数据库
MariaDB [(none)]> grant all on *.* to zabbix@'zabbix-server' identified by '123.com';
4.1.13登录Zabbix监控系统
默认账户:Admin
默认密码:zabbix
4.2 Zabbix前端部分优化
4.2.1 调整Zabbix页面为中文语言和主题颜色
4.2.2 更改Admin用户默认密码
4.2.3 解决图标中文乱码问题
从下图中可以看到,图表的字体为乱码,现在我们需要改一下,使用更合适的字体集。
查看字体相关参数
[root@zabbix-server ~]# vim /usr/share/zabbix/include/defines.inc.php
80 define('ZBX_FONTPATH', realpath('assets/fonts')); // where to search for font (GD > 2.0.18)
81 define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
可以看出zabbix使用了/usr/share/zabbix/assets/fonts下面定义的字 体文件,名为:graphfont
解决方法如下
使用Windows中的字体替换zabbix中的默认字体将Windows中C:\Windows\Fonts中的微软雅黑字体上传到Zabbix服务器中的/usr/share/zabbix/assets/fonts下面后,将微软字体MSYH.TTF重命名为graphfont.ttf
[root@zabbix-server ~]# rz
[root@zabbix-server ~]# ll
总用量 47484
-rw-------. 1 root root 1516 12月 30 22:35 anaconda-ks.cfg
-rw-r--r-- 1 root root 16829116 3月 19 2019 MSYHBD.TTC
-rw-r--r-- 1 root root 12139380 3月 19 2019 MSYHL.TTC
-rw-r--r-- 1 root root 19647736 3月 19 2019 MSYH.TTC
[root@zabbix-server ~]# cd /usr/share/zabbix/assets/fonts/
[root@zabbix-server fonts]# mv graphfont.ttf graphfont.ttf.bak //备份一下
[root@zabbix-server fonts]# mv /root/MSYH.TTC ./graphfont.ttf //替换
mv:是否覆盖"DejaVuSans.ttf"? y
[root@zabbix-server fonts]# ln -sf /usr/share/zabbix/assets/fonts/graphfont.ttf /etc/alternatives/zabbix-web-font
再次查看图表
4.2.4 更改httpd网页根目录
此项为可选配,
由于zabbix的网页存放路径和httpd不再同一个目录,每次访问 zabbix Web页面时,需要指定zabbix目录,如;192.168.8.3/zabbix。为了不用每次指定zabbix做跳转,我们需要更改httpd的网页根目录。
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
119 DocumentRoot "/usr/share/zabbix" //更改为zabbix网页目录
[root@localhost ~]# systemctl restart httpd
访问zabbix服务器时会直接访问到zabbix Web前端,更改后URL地址:http://192.168.8.2
到此Zabbix-Server端口的配置基本就完了
4.3 部署Zabbix-Agent端
地址:192.168.8.3
4.3.1 基础环境配置
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
[root@localhost ~]# hostname agent-01
[root@localhost ~]# bash
[root@agent-01 ~]#
4.3.2 下载Zabbix-Yum源
[root@agent-01 ~]# cd /etc/yum.repos.d/
[root@agent-01 yum.repos.d]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zabbix-server yum.repos.d]# yum clean all && yum makecache fast
//快速建立yum缓存
4.3.3 安装Zabbix-agent代理组件及相关组件
[root@agent-01 yum.repos.d]# yum -y install zabbix-agent zabbix-sender zabbix-java-gateway
[root@agent-01 yum.repos.d]# systemctl enable --now zabbix-agent zabbix-java-gateway
[root@agent-01 yum.repos.d]# netstat -anpt | egrep "zabbix|java"
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 29536/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 29536/zabbix_agentd
tcp6 0 0 :::10052 :::* LISTEN 29543/java
4.3.4 更改agent配置文件
指定zabbix服务器
[root@agent-01 ~]# vim /etc/zabbix/zabbix_agentd.conf
117 Server=192.168.8.2 //指定zabbix服务器地址
158 ServerActive=192.168.8.2 //主动模式,指定zabbix服务器地址
169 Hostname=192.168.8.3 //设备名称
[root@agent-01 ~]# systemctl restart zabbix-agent
5、Zabbix Server端添加监控设备
添加agent被监控端,这里就先不对Zabbix server本身的agent进行操作了
5.1 添加被监控主机
5.1.1 为agent-01端添加监控模板
根据自己需求添加自己需要的模板
等待1~2分钟,agent-01端的状态ZBX标志就会高亮
5.1.2 查看agent-01端监控项状态
5.1.3 查看agent-01监控数据图形
到此就完成了zabbix部署和简单的配置,当然这还远不不够