Metadata
permalink: /techdoc/zabbix/
tags:
  - 技术文档
  - Zabbix
  - 安装

Zabbix监控平台搭建

1. 简介

  zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

  zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

  zabbix由2部分构成,zabbix server与可选组件zabbix agent。

  zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。

2. 搭建选型

  笔者编写的时刻Zabbix的更新已经来到5.2,通过ZabbixAgent2可以实现docker容器的监控。故使用Zabbix 5.2来进行相关搭建。网络拓扑图如下,包含一台Windows服务器以及一台Debian服务器。

3. 搭建环境

  推荐使用独立的物理主机来搭建监控服务。

3.1. 获取添加zabbix仓库更新

wget https://repo.zabbix.com/zabbix/5.2/debian/pool/main/z/zabbix-release/zabbix-release_5.2-1+debian10_all.deb
dpkg -i zabbix-release_5.2-1+debian10_all.deb
apt update

3.2. 安装Zabbix server,Web前端

apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf

3.3. 创建初始数据库

  创建前请先确认监控主机中是否已安装配置MySQL或者MariaDB数据库,已安装上述数据库的可掠过此步骤,如尚未安装,执行以下命令以安装:

apt install mysql-server
  • 进入数据库命令行:
mariadb

  只要你是 Linux 的 root,登入 MariaDB 不需要密码。

  • 修改 MariaDB 的 root 密码
use mysql
UPDATE user SET Password = password('新密码') WHERE User = 'root';
flush privileges;
  • 使用原生 MySQL 认证
    因为默认使用了 UNIX SOCKET 认证,有些 phpMyAdmin 在登入时会发生 “Access Denied” 错误。我们可以更改 UNIX SOCKET 认证为原生 MySQL 认证.
update mysql.user set plugin = 'mysql_native_password' where User='root';   
flush privileges;
quit
  • 重启数据库
systemctl restart mariadb.service

3.4. 导入数据

  在数据库主机上运行以下代码。

mysql -u root -p

password

create database zabbix character set utf8 collate utf8_bin;

create user zabbix@localhost identified by 'password';

grant all privileges on zabbix.* to zabbix@localhost;

quit;

  导入初始架构和数据,系统将提示您输入新创建的密码。

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -u zabbix -p zabbix

3.5. 配置数据库

  为Zabbix server配置数据库。编辑配置文件 /etc/zabbix/zabbix_server.conf

DBPassword=password

3.6. Zabbix前端配置PHP

  编辑配置文件 /etc/zabbix/nginx.conf, 取消对'listen' 与 'server_name' 的注释并赋值。

## listen 80;
## server_name example.com;

  启动Zabbix server进程

systemctl restart zabbix-server nginx php7.3-fpm

3.7. 配置Zabbix前端

  连接到新安装的Zabbix前端: http://server_ip_or_name,打开的界面如下。

  选择UTC+08:00的时区,比如Asia/Shanghai。

  根据安装向导的执行操作,直至安装完成。

4. docker安装

  Zabbix的应用提供了Docker镜像,可将Zabbix-Server与Zabbix-Web使用Docker安装。

  拉取mysql镜像。

docker pull mariadb

  拉取zabbix-server-mysql镜像,这里拉取的是zabbix 5.2版本镜像。

docker pull zabbix/zabbix-server-mysql:latest

  拉取zabbix-web-nginx-mysql镜像,这里拉取的是zabbix 5.2版本镜像。

docker pull zabbix/zabbix-web-nginx-mysql:latest

  Docker运行mysql。

docker run -itd --name zabbix-mysql \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123=abc" \      # 根据需要修改密码
-e MYSQL_ROOT_PASSWORD="123=abc" \ # 根据需要修改密码
-v /www/server/zabbix/mysql/data/:/var/lib/mysql/ \ # 根据需要修改数据库文件的存储位置,修改/www/server/zabbix/mysql/data/为其他自定义位置
-p 3307:3306 \
mariadb \
--character-set-server=utf8 \
--collation-server=utf8_unicode_ci 

  运行Zabbix-Server。

docker run -itd --name "zabbix-server" \
--link zabbix-mysql:mysql \
-e DB_SERVER_HOST="172.18.0.1" \ # 根据Docker分配的容器IP进行修改
-e DB_SERVER_PORT=3307 \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_ROOT_PASSWORD="123=abc" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123=abc" \
-v /www/server/zabbix/zabbix-server/alertscripts/:/usr/lib/zabbix/alertscripts/ \
-v /www/server/zabbix/zabbix-server/externalscripts/:/usr/lib/zabbix/externalscripts/ \
-p 10051:10051 \
-p 10050:10050 \
zabbix/zabbix-server-mysql

  运行Zabbix-Web。

docker run -itd --name zabbix-web \
--link zabbix-mysql:mysql \
--link zabbix-server:zabbix-server \
-e DB_SERVER_HOST=172.18.0.1 \ # 根据Docker分配的容器IP进行修改
-e DB_SERVER_PORT=3307 \
-e MYSQL_USER=zabbix \
-e MYSQL_PASSWORD=123=abc \
-e MYSQL_DATABASE=zabbix \
-e ZBX_SERVER_HOST=zabbix-server \
-e PHP_TZ="Asia/Shanghai" \
-p 8880:8080 \
-p 8443:8443 \
zabbix/zabbix-web-nginx-mysql

5. 基础设置

  访问http://server_ip_or_name:Port

  初始的登录用户与密码分别为Adminzabbix

  登录后的典型样例如下。其中可添加面板用于图形化显示监控数据的信息。

5.1. 更改语言

  如果使用包安装的方式安装的Zabbix,其在安装向导阶段可设置语言,无需再进行语言的修改,如果在安装阶段设置的默认语言,Docker安装初始的语言为英文,在登录界面后,点击Administration-General,在GUI界面中修改Default LanguageChinese(zh_CN),点击下方的Update按钮以更新语言。

6. 界面介绍

  Zabbix的主界面显示如下,左侧栏为菜单栏,显示可用的菜单选项;右侧为内容栏,显示对应菜单的内容。

  • 监测:显示监控的相关信息,例如采集的数据,报警信息,主机信息等信息。
  • 资产记录:显示资产设备的相关信息。
  • 报表:显示监控记录的报表信息,包括数据采集的可用性。
  • 配置:设置主机群组,主机,监控模板以及监控项目。
  • 管理:监控系统的管理设置项,包括系统的基本设置,报警媒介的设置等。

7. 基本概念

  在使用Zabbix进行监控前,您有必要了解Zabbix中的一些基本概念,这些概念会对您接下来的操作有所帮助。详细内容可参考https://www.zabbix.com/documentation/4.0/zh/manual/definitions

7.1. 架构

  Zabbix 由几个主要的功能组件组成,其功能介绍如下所示。

7.1.1. SERVER

  Zabbix server 是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。

7.1.2. 数据库

  所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中。

7.1.3. WEB 界面

  为了从任何地方和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。

7.1.4. PROXY

  Zabbix proxy 可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。

7.1.5. AGENT

  Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。

7.1.6. 数据流

  另外,回过头来整体的了解下 Zabbix 内部的数据流对Zabbix的使用也很重要。首先,为了创建一个采集数据的监控项,您就必须先创建主机。其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action)。因此,如果您想要收到类似“X个server上CPU负载过高”这样的告警,您必须首先为 Server X 创建一个主机条目,其次创建一个用于监控其 CPU的监控项,最后创建一个触发器,用来触发 CPU负载过高这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。

7.2. 主机与主机群组(host、host group )

  一般来讲,Zabbix主机(Host)是指你希望监控的那些设备,例如服务器、工作站、交换机等等。

  创建主机是使用Zabbix过程中的一个首要任务。例如,如果你想在一台服务器“X”上监控一些参数,你必须首先创建一个主机称之为“服务器X”,然后就可以查看添加监控项到这台“服务器X”上。

  主机群组是由主机群组成的。可能包含主机和模板。一个主机群组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机群组。

7.3. 监控项(item)

  监控项是从主机收集的数据信息。

  配置主机后,你需要添加一些监控项以开始获取实际数据。

  一个监控项是一个独立的指标。快速添加多个监控项的一种方法是将一个预定义的模板附加到主机。然而,为了优化系统性能,您可能需要对模板进行微调,使只有真正需要的监控项被频繁的监控到。

  在单个监控项中,你可以指定从主机收集哪些数据。

  为此,你可以使用监控项key。 从而,具有名称为system.cpu.load的监控项将收集处理器负载的数据,而名为net.if.in的监控项将收集传入的流量信息。

  要用key指定更多的参数,请在key后添加方括号。 例如,system.cpu.load[avg5]将返回最近5分钟的处理器负载平均值,而net.if.in[eth0]将显示接口eth0中的流量。

7.4. 触发器(triggers)

  触发器是“评估”由监控项采集的数据并表示当前系统状况的逻辑表达式。

  当监控项用于采集系统的数据时,始终遵循这些数据是非常不切合实际的,因为这些数据始终在等待一个令人担忧或者值得关注的状态。然而这个“评估”数据的工作可以留给触发器表达式。

  触发器表达式允许定义一个什么状况的数据是“可接受”的阈值。因此,如果接收的数据超过了可接受的状态,则触发器会被触发 - 或将状态更改为异常。

  一个触发器可以拥有下面几种状态:

描述
OK 这是一个正常的触发器状态。在旧版本的Zabbix中称为FALSE。
PROBLEM 通常意味着发生了某些事情。例如,处理器的负载较高。在旧版本的Zabbix中称为TRUE。

  每当Zabbix server接收到作为表达式一部分的新值时,都会重新计算触发器状态(表达式)。

  如果在表达式中使用基于时间的函数(nodata(), date(), dayofmonth(), dayofweek(), time(), now()),触发器就会由Zabbix history syncer进程每30秒重新计算一次。如果在表达式中同时使用基于时间和非基于时间的函数,当接收到一个新值和每隔30秒都会重新计算触发器的状态。

7.5. 问题(problems)

https://www.zabbix.com/documentation/4.0/zh/manual/web_interface/frontend_sections/monitoring/problems

  在 监测-问题中 ,你可看到当前存在什么问题。问题指处在“问题”状态下的触发器。

7.6. 媒介(media)

  媒介是用于在Zabbix中发送通知和警报的传送通道。

  • E-mail
  • SMS
  • Jabber
  • Ez Texting
  • 自定义警报脚本

7.7. 模板(template)

  模板是可以方便地应用于多个主机的一组实体。 实体可以是:

  • 监控项
  • 触发器
  • 图形
  • 应用
  • 聚合图形(自Zabbix 2.0起)
  • 自动发现规则 (自Zabbix 2.0起)
  • web场景 (自Zabbix 2.0起)

  由于现实生活中的许多主机是相同或类似的,所以,您为一个主机创建的一组实体(项目,触发器,图形,…)可能对许多人有用。当然,您可以将它们复制到每个新的主机上,但需要费很大功夫。相反,使用模板,您可以将它们复制到一个模板,然后根据需要将模板应用于尽可能多的主机。

  当模板链接到主机时,模板的所有实体(项目,触发器,图形,…)都将添加到主机。模板直接分配给每个单独的主机(而不是主机组)。

  模板通常用于为特定服务或应用程序(如Apache,MySQL,PostgreSQL,Postfix …)分组实体,然后应用于运行这些服务的主机。

  使用模板的另一个好处是当所有主机都需要更改时。只需要在模板上更改某些内容将会将更改应用到所有链接的主机。

  因此,使用模板是减少工作量并简化Zabbix配置的好方法。

7.8. 应用(application)

  应用,是一种用于把监控项分组的逻辑组。

  举个例子:这里有一个叫MySQL服务器应用,它关联了MySQL服务器相关的所有监控项:MySQL的可用性、磁盘空间、处理器负载、每秒事务数、慢查询数等。

  应用也用于给Web场景分组。

  如果你正在使用应用,那么在监控-最新数据中,你将看到按各应用分组下的监控项和Web场景。

7.9. Web监测(web monitoring)

https://www.zabbix.com/documentation/4.0/zh/manual/web_monitoring

  从 Zabbix2.2 开始,Web 场景和 Items,Triggers 等一样,是依附在 Hosts/Templates 上的。这意味着 web 场景也可以创建到一个模板里,然后应用于多个主机

  任何web场景都会收集下列数据:

  • 整个场景中所有步骤的平均下载速度
  • 失败的步骤数量
  • 最近的错误信息

  对于web场景的所有步骤,都会收集下列数据:

  • 平均下载速度
  • 响应时间
  • HTTP状态码

  执行 web 场景收集的数据保存在数据库中。数据自动用于图形、触发器和通知。

  Zabbix 还支持获取 HTML 内容中是否存在设置的字符串。还可以模拟登录动作和模拟鼠标单击。

  Zabbix web 监控同时支持 HTTP 和 HTTPS。当运行 web 场景时,Zabbix 将选择跟踪重定向(请参见下面的选择跟踪重定向)。重定向硬编码的最大数量为 10 (使用 cURL 选项 CURLOPT_MAXREDIRS)。在执行 web 场景时,所有 Cookie 都会保存。

8. 安装客户端(zabbix-agent)

8.1. 在Windows中安装zabbix-agnet

  此处推荐安装zabbix-agent2,支持zabbix的新特性。https://www.zabbix.com/cn/download_agents,点击链接后,选择Windows平台中合适的版本zabbix-agent2下载。建议的选择如下:

  下载完成后,将文件解压至自定义的目录。比如位于D:\ZabbixAgent

  修改其中的\bin\zabbix_agent2.win.conf,修改其中的以下选项:

LogFile=C:\Zabbix_Agent\zabbix_agentd.log
Server=127.0.0.1#Zabbix服务器IP地址,该处设置为可接收的服务器列表,来自于列表外的服务器的监控请求将被拒绝
ServerActive= # Zabbix服务器IP地址
Hostname=windowsserver2016 # Zabbix服务端Web页面设置的对应主机名称

  修改完成后,使用管理员打开Windows Poweshell程序,运行命令以安装和启用服务运行:

cd D:\ZabbixAgent\bin\

.\zabbix_agentd.exe -i -s

运行后,可查看对应的日志以确认是否运行成功。

  zabbix_agent运行后,需设置windows防火墙。控制面板(右上角选择查看方式为大图标)---防火墙---高级设置---高级设置---出站规则---最右边 新建规则“新建出站规则向导”,在向导的第一步,选择要创建的防火墙规则类型,选择第二个“端口,然后一步一步往下走(zabbix客户端的默认端口10050)

8.2. 在debian中安装zabbix-agent

8.2.1. 获取添加zabbix仓库更新

wget https://repo.zabbix.com/zabbix/5.2/debian/pool/main/z/zabbix-release/zabbix-release_5.2-1+debian10_all.deb
dpkg -i zabbix-release_5.2-1+debian10_all.deb
apt update

8.2.2. 安装zabbix-agent2

apt install zabbix-agent2

8.2.3. 设置

  使用WinSCP等工具打开编辑debian中的/etc/zabbix/zabbix_agent2.conf文件。填写以下选项:

LogFile=/var/log/zabbix_agent2.log
Server=127.0.0.1#Zabbix服务器IP地址,该处设置为可接收的服务器列表,来自于列表外的服务器的监控请求将被拒绝
ServerActive= # Zabbix服务器IP地址
Hostname=debian # Zabbix服务端Web页面设置的对应主机名称

  保存设置后,使用以下命令重新启动zabbix-agent2。

systemctl restart zabbix-agent2

9. 设置主机监控

  接下来介绍如何在zabbix中添加主机。

  在Zabbix 的网页页面中,点击配置-主机,进入至主机列表中,列表中会列出当前已添加的主机。

  如需要新增主机,点击右上角的创建主机,进入到创建主机的界面。在改界面中填写主机名称,名称需与zabbix_agent2中设置的名称一致。选择群组,添加Interfaces

  此处以windowsserver2016为例,添加的内容如下,其中的群组isoface为自定义群组,可不添加。

  在模板页面链接图中所示的模板,链接完成后点击添加按钮完成。此时如果连接成功可在监测-最新数据中查询到主机的性能状态。

  linux主机的设置方式相似,可按照以下内容参考进行设定,客户端填写debian主机的IP地址。

  链接的模板如下:

  在模板页面链接图中所示的模板,链接完成后点击添加按钮完成。此时如果连接成功可在监测-最新数据中查询到主机的性能状态。根据上述的模板可同时监测docker中容器的运行状况。

9.1. 设置Web场景

  IsoFace中的部分产品可通过Web场景进行监控。比如FastWeb、Flying、TARS等相关监控。

  在windowsserver2016上,点击Web场景可以查看开启Web场景监控的项目。

  点击右上角的创建Web场景,按照以下格式进行填写

  点击至步骤项目,点击添加项。

  填写以下项目。填写完成后点击更新

  其他需要添加Web场景的项目依照上述方式进行操作。

9.2. 设置端口监控

  对于部分服务,只需要关注端口是否处于运行状态即可。

  点击主机名称,进入到对应的主机项目中。选择监控项。点击右上角的创建监控项

  以下以MSSQL端口为例,可按照以下内容进行填写,此处仅检查端口是否处于运行状态。填写后点击更新按钮。

  为该监控项目创建触发器。在主机页面中,点击触发器选项,点击右上角的创建触发器

  根据以下方式进行填写,表达式栏目中的值通过点击右侧的添加按钮来选择选择。

  添加按钮点击后,打开条件对话框,点击右侧的选择按钮,在其中选择刚才创建的端口监控,其余项目保持默认即可,点击插入按钮完成表达式的插入。确认触发器的已启用已勾选,点击更新按钮完成触发器的创建。

10. 设置报警媒介

  左侧菜单栏点击管理-报警媒介类型,此处以电子邮件为例。点击Email(HTML)

  填写邮箱设置的相关信息,可参考以下选项进行设置,设置完成后,点击更新按钮。

  接下来设置接收报警的用户。点击管理-用户菜单,显示当前可用的用户,我们以Admin为例。点击Admin用户。

  进入至Admin用户后,点击报警媒介

  默认的报警媒介内容为空,需要自行定义,点击添加按钮。

  添加报警媒介,类型选择Email(HTML),填写收件人邮箱,设置启用报警的时间段,以及设置触发报警媒介严重程度阈值,点击添加按钮,返回报警媒介按钮,点击更新按钮。

11. 自定义面板

  点击菜单栏的监测-仪表板,在该页面上点击编辑仪表盘进入编辑模式,该模式下可以添加仪表盘,自定义仪表的类型,此处仅以显示的图形为例。

  将鼠标移动至空白处,显示该内容,单击将页面添加进来。

  添加构件的对话框中类型选择图形,名称可自行设定。

  主机样式右侧点击选择,打开主机选择界面,勾选对应的主机。点击选择按钮。

  监控项模式中点击右侧的选择,打开监控项界面,勾选对应的监控项目,点击选择按钮。

  监控项选择完成后,点击添加按钮,将监控项添加至仪表板中。显示的图形参考如下。