Zabbix 是由 Alexei Vladishev 创建,目前是由 Zabbix SIA 在持续开发和提供支持。
Zabbix 是一种企业级的分布式开源监控解决方案。
Zabbix 是一款能够监控众多网络参数和服务器的健康度和完整性的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的警报。这样可以快速相应服务器问题。Zabbix 基于存储的数据提供出色的报告和数据可视化。这些功能使得 Zabbix 成为容量规划的理想选择。
Zabbix 支持轮询和被动捕获。所有的 Zabbix 报告、统计信息和配置参数都可以通过基于 Web 的前端页面进行访问。基于 Web 的前端页面确保您的网络状态和服务器健康状况可以从任何地方进行评估。在经过适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于拥有少量服务器的小型组织,还是拥有大量服务器的大型公司而言,同样适用。
数据采集
可用性和性能采集;
支持 SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware 监控;
自定义检查;
按照自定义的时间间隔采集需要的数据;
通过 Server/Proxy 和 Agents 来执行数据采集。
灵活的阈值定义
您可以定义非常灵活的告警阈值,称之为触发器,触发器从后端数据库获得参考值。
高度可配置化的告警
可以根据递增计划、接收者、媒介类型自定义发送告警通知;
使用宏变量可以使告警通知变得更加高效有益;
自动动作包含远程命令。
实时图形
使用内置图形功能可实以将监控项绘制成图形。
Web 监控功能
Zabbix 可以追踪模拟鼠标在 Web 网站上的点击操作,来检查 Web 网站的功能和响应时间。
丰富的可视化选项
能够创建可以将多个监控项组合到单个视图中的自定义图形;
网络拓扑图;
以仪表盘样式展示自定义聚合图形和幻灯片演示;
报表;
监控资源的高层次(业务)视图。
历史数据存储
存储在数据库中的数据;
可配置的历史数据;
内置数据管理机制(housekeeping)。
配置简单
将被监控设备添加为主机;
主机一旦添加到数据库中,就会采集主机数据用于监控;
将模板用于监控设备。
套用模板
在模板中分组检查;
模板可以关联其他模板,获得继承。
网络发现
自动发现网络设备;
Zabbix Agent 发现设备后自动注册;
自动发现文件系统、网络接口和 SNMP OIDs 值。
快捷的 Web 界面
基于 PHP 的 Web 前端;
可以从任何地方访问;
您可以定制自己的操作方式;
审计日志。
Zabbix API
Zabbix API 为 Zabbix 提供可编程接口,用于批量操作、第三方软件集成和其他用途。
权限管理系统
安全的用户身份验证;
将特定用户限制于访问特定的视图。
功能强大且易于扩展的 Zabbix Agent
部署于被监控对象上;
完美支持 Linux 和 Windows ;
二进制守护进程
为了更好的性能和更少的内存占用,采用 C 语言编写;
便于移植。
适应更复杂的环境
使用 Zabbix Proxy 代理,可以轻松实现分布式远程监控。
Zabbix 由几个主要的功能组件组成,其职责如下所示。
Server
Zabbix server 是 Zabbix agent 向其报告可用性、系统完整性信息和统计信息的核心组件。是存储所有配置信息、统计信息和操作信息的核心存储库。
数据库
所有配置信息以及 Zabbix 收集到的数据都被存储在数据库中。
Web 界面
为了从任何地方和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
Proxy
Zabbix proxy 可以替 Zabbix server 收集性能和可用性数据。Zabbix proxy 是 Zabbix 环境部署的可选部分;然而,它对于单个 Zabbix server 负载的分担是非常有益的。
Agent
Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
此外,重要的是,需要回过头来了解下 Zabbix 内部的整体数据流。首先,为了创建一个采集数据的监控项,您就必须先创建主机。其次,必须有一个监控项来创建触发器。最后,您必须有一个触发器来创建一个动作,这几个点构成了一个完整的数据流。因此,如果您想要收到 CPU load it too high on Server X 的告警,您必须首先为 Server X 创建一个主机条目,其次创建一个用于监视其 CPU 的监控项,最后创建一个触发器,用来触发 CPU is too high 这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,其实并不复杂。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。
在Zabbix官方网站zabbix.com查找需要部署的主机的类型
根据官网提示部署:
安装Zabbix仓库Install Zabbix repository
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
#线上联网才能下载安装
yum clean all
#清除之前的安装记录
编辑/etc/yum.repos.d/zabbix.repo并使其生效,需要修改的地方:
仓库搭建好查看仓库内容
安装Zabbix的前端包
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl
安装Zabbix服务端和代理端Install Zabbix server and agent
yum install zabbix-server-mysql zabbix-agent -y
阿里巴巴开源镜像站–>工具–>zabbix
安装Zabbix前端服务Install Zabbix frontend
yum install centos-release-scl -y
vim中的技巧
:%s/$需要被替换的内容/替换的内容/
回车即可实现替换
创建并初始化数据库
下载mysql系列压缩包并解压
网址戳这里
tar xf mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar
yum install -y
mysql-community-common-5.7.37-1.el7.x86_64.rpm
mysql-community-client-5.7.37-1.el7.x86_64.rpm
mysql-community-libs-5.7.37-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.37-1.el7.x86_64.rpm
mysql-community-server-5.7.37-1.el7.x86_64.rpm
systemctl start mysqld
cat /var/log/mysqld.log
mysql_secure_installation#初始化数据库
先复制之前日志的密码再设置密码,这里注意再次设置的密码需要包括字母大小写数字符号的8位密码,否则会…进入循环
设置完成要记住密码,之后的问题除了下面的回答NO,其他全是YES
接着使用密码进入数据库,可以执行一两条测试
# mysql -uroot -p
password
#创建zabbix数据库,创建数据库用户并授权
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password写自己的密码';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
#导入初始架构和数据
zcat create.sql.gz | mysql -uzabbix -p zabbix
#该命令很长,会执行一小会儿,中间不要打断
为Zabbix服务器配置数据库Configure the database for Zabbix server
vim /etc/zabbix/zabbix_server.conf
DBPassword=password
#修改时区
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Shanghai
#重启并设置zabbix-server,zabbix-agent,httpd,rh-php72-php-fpm这几个服务为开机自启
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
测试 在真机浏览器访问serverIP/zabbix
即进入zabbix网页安装模式
输入设置好的数据库密码
注意:默认的登陆界面中,用户为Admin,密码为zabbix
安装成功进入zabbix的界面,语言在User settings里可以修改
在代理主机1和代理主机2分别安装代理服务
先复制服务端的ZABBIX.repo仓库文件
修改.repo文件
将所有的GPGCHECK关闭
gpgcheck=0
否则会出现报错如下:
(报错的原因:yum仓库设置gpgcheck=1,下载安装时会去校验GPG key,本地找不到file:///etc/pki/rpm-gpg/RPM-GPG-KEY-zabbix就会报此错误。)
修改配置文件:(配置服务端主机IP)
配置代理端IP和hostname
添加成功效果展示
全绿才算添加成功。如果有红色需要查看具体的报错,如:
Get value from agent failed: cannot connect to [[172.25.76.2]:10050]: [113] No route to host
113号报错,无法连接到主机
先考虑网络,这里网络是通畅的,再考虑火墙,这里火墙没有关闭,关闭后再重启服务即可成功。
在界面切换至中文时,一些地方会出现乱码现象
浏览器刷新后,中文可正常显示
自动发现主机功能:由服务端主动发起,Zabbix Server开启发现进程,定时扫描并设别局域网中IP服务器和设备
配置agebt2主机的zabbix-agent服务
yum install -y zabbix-agent
systemctl enable --now zabbix-agent
vim /etc/zabbix/zabbix-agent.conf
创建自动发现规则
配置–自动发现–创建发现规则
为自动发现规则设置相应的动作
配置–动作–Tigger actions
动作和操作都完成才能创建成功
设置完成后静静等待一分钟,自动发现了agent2,证明自动发现规则生效
自动注册主机由客户端主动发起,客户端必须安装并启动Agentd,否则无法被自动注册添加至主机列表;对于使用SNMP的就要采用自动发现了
为实现本实验效果并不浪费本人PC的资源,删除上一个实验创建的自动发现规则并删除主机agebt2
创建动作和操作
这次选择Autoregister actions
静静等待一会儿agent2会注册成功,证明该自动注册动作设置生效
Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:
Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON-RPC 2.0协议,这意味着两点:
具体API调用实验:
当完成了前端的安装配置后,可以使用远程HTTP请求来调用API;为此,需要向位于前端目录中的 api_jsonrpc.php 文件发送HTTP POST请求
验证
在访问Zabbix中的任何数据之前,你需要登录并获取身份验证令牌。这可以使用该 user.login 方法完成。让我们假设你想要以标准Zabbix Admin用户身份登录。
vim zabbix_api.sh
---
#!/bin/bash
curl -s -XPOST -H 'Content-Type:application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' http://172.25.76.1/zabbix/api_jsonrpc.php | python -m json.tool
---
其中
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}是json请求的内容
细看看示例请求对象。它具有以下属性:
如果你正确提供了凭据,API返回的响应将包含用户身份验证令牌:
响应对象包含以下属性:
检索主机
现在有一个有效的用户身份验证令牌,可以用来访问Zabbix中的数据。
例如,可以使用 host.get 方法检索所有已配置主机的ID,主机名和接口
vim zabbix_api_1.sh
---
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "0424bd59b807674191e7d77572075f33"
}
注意, auth 属性现在设置为通过调用user.login方法获得的身份验证令牌
vim zabbix_api_del.sh
---
#!/bin/bash
curl -s -XPOST -H 'Content-Type:application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
##这里是需要爱删除的主机的hostid
"10440"
],
##这里是之前的身份验证令牌
"auth":"9e379f59399c2e02335d024ce64a1519",
##这里是主机名hostname所带的数字
"id": 2
}' http://172.25.76.1/zabbix/api_jsonrpc.php | python -m json.tool
---
响应对象的显示
再次查看服务端及其代理端,发现agent已被删除
图形监控界面得到的效果:成功删除agent1主机
创建主机
vim zabbix_api_create.sh
---
#!/bin/bash
curl -s -XPOST -H 'Content-Type:application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "agent2",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.76.3",
"dns": "",
"port": "10050"
}
],
"groups": [
{
####这里群组的ID需要在zabbix主页查看
"groupid": "2"
}
],
"tags": [
{
"tag": "Host name",
"value": "Linux server"
}
],
"templates": [
{
##这里模板的ID需要在zabbix主页的url处查看
"templateid": "10001"
}
]
},
"auth": "9e379f59399c2e02335d024ce64a1519",
"id": 3
}' http://172.25.76.1/zabbix/api_jsonrpc.php | python -m json.tool
查看群组ID
查看模板ID
图形监控界面得到的效果:成功添加agent2主机,特定的设置也有显示
这里监控agent2的nginx服务,首先在agent2上配置nginx服务
在被监控主机agent2配置被监控项目
在图形界面创建监控项:主机–boke3–监控项–创建监控项
在zabbix服务器端server使用zabbix_get查看效果
安装zabbix-get工具的步骤
mysql服务器所在主机已安装zabbix agent;与在zabbix agent端自定义监控项类似,监控项类型为“zabbix 客户端(被动型)”,由mysql服务器上的zabbix agent执行登录检查命令,并将结果回传给zabbix server
配置zabbix-agent的mysql参数文件
重启zabbix-agent稍候查看监控效果
percona zabbix mysql-plugin是percona发布的一个使用zabbix监控mysql数据库的工具,这款工具比zabbix自带的监控模板要强大的多,毕竟percona是Mysql的一个重要分支,专业做数据库的,所以,采集的数据比较全面;percona的监控插件是php编写的,通过php连接mysql来获取相关的数据,所以需要在安装zabbix agent的同时,部署php和php-mysql
yum install -y php php-mysql
wget http://jaminzhang.github.io/soft-conf/Zabbix/zbx_percona_mysql_template.xml