简介

Zabbix 能够监控众多网络参数和服务器的健康度、完整性。 Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置基于告警。这样用户可以快速响应服务器问题。Zabbix 为存储的数据提供出色的报表和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想选择。

组成

Zabbix Server 由 zabbix-server 及可选组件 zabbix-agent 组成
基本的 zabbix-server 的功能又可分为 zabbix-server、web 前端和数据库三个不同的组件

1635262271(1).jpg

环境

主机名 IP 系统版本 Zabbix 版本 角色
zabbix-1 192.168.137.223 CentOS 7 4.0LTS Zabbix-server,Zabbix-web,Mysql-5.7
zabbix-2 192.168.137.224 CentOS 7 4.0LTS Zabbix-agent

   数据库最好单独部署在独立的服务器上,因为学习环境资源有限,这里将 server、web、数据库都部署在 zabbix-1 上,zabbix-2 作监控对象。

部署 Zabbix

~ zabbix-1 上操作

  • systemctl stop firewalld ####临时关闭防火墙
  • setenforce 0 ####临时关闭安全策略
  • rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
  • yum install -y zabbix-server-mysql zabbix-web-mysql ######分别为zabbix服务端 web前端
  •  
  • ####以下为mysql5.7部署
  • wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
  • tar -xvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
  • mv mysql-5.7.30-linux-glibc2.12-x86_64 /usr/local/mysql
  • useradd mysql
  • mkdir -p /data/mysql
  • mkdir -p /var/log/mysql
  • chown -R mysql:mysql /usr/local/mysql
  • chown -R mysql:mysql /data/mysql
  • chown -R mysql:mysql /var/log/mysql
  • cat >/etc/my.cnf<<eof
  • [mysqld]
  • user=mysql
  • basedir=/usr/local/mysql
  • datadir=/data/mysql
  • server_id=6
  • log-error=/var/log/mysql/error.log #日志
  • port=3306
  • socket=/tmp/mysql.sock
  • [mysql]
  • socket=/tmp/mysql.sock
  • eof
  • cd /data/mysql
  • /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
  • echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
  • cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
  • chmod +x /etc/init.d/mysqld
  • source /etc/profile
  • /etc/init.d/mysqld start
  •  
  • ####数据库导入zabbix库及表
  • mysql -e 'create database zabbix character set utf8 collate utf8_bin;' ####建库:zabbix 字符集:utf8 排序规则:utf8_bin
  • mysql -e 'create user zabbix@"192.168.137.%" identified by "123456";'
  • mysql -e 'grant all privileges on zabbix.* to zabbix@"192.168.137.%";'
  • zcat /usr/share/doc/zabbix-server-mysql-4.0.35/create.sql.gz | mysql -u zabbix -h 192.168.137.223 -p123456 zabbix ####导入sql
  •  
  • ####修改zabbix-server的配置,配置文件路径:/etc/zabbix/zabbix_server.conf
  • sed -i '/ListenPort=10051/c\ListenPort=10051' /etc/zabbix/zabbix_server.conf ####监听端口
  • sed -i '/# DBHost=localhost/c\DBHost=192.168.137.223' /etc/zabbix/zabbix_server.conf ####数据库远程登录IP
  • sed -i '/# DBPassword=/c\DBPassword=123456' /etc/zabbix/zabbix_server.conf ####数据库Zibbix用户密码
  •  
  • ####开启httpd 以及 zabbix-server 服务
  • systemctl start httpd zabbix-server
  • systemctl status httpd zabbix-server | grep Active ####如图出现两个running及成功开启

1635263318(1).jpg

~ 回到 Window 浏览器操作

  • 192.168.137.223/zabbix

1635263578(1).jpg

~ 出现下面这个错误就是时区没有改

1635264167(1).jpg

~ 回到 zabbix-1 改 httpd 的配置文件,路径为 /etc/httpd/conf.d/zabbix.conf

  • sed -i '/# php_value date.timezone Europe\/Riga/s/Europe\/Riga/Asia\/Shanghai/' /etc/httpd/conf.d/zabbix.conf
  • sed -i '/# php_value date.timezone Asia\/Shanghai/s/# //' /etc/httpd/conf.d/zabbix.conf
  • systemctl restart httpd

~ 回到浏览器刷新

1635264661(1).jpg

1635264809(1).jpg

1635264955(1).jpg

1635264984(1).jpg

1635265007(1).jpg

1635265142(1).jpg

改语言及配置基本用户

~ 改语言及密码

1635265377(1).jpg

1635265445(1).jpg

~ 创建基本用户

1635266198(1).jpg

1635265990(1).jpg

1635266107(1).jpg

~ 主机必须属于某个主机组,系统默认为我们创建几个主机组,我们也可以自己创建主机组

1635299153(1).jpg

1635299173(1).jpg

~ 在 Zabbix 中,主机的访问权限是被分配到用户组,而不是单个用户。所以为新建的用户提升权限

1635298703(1).jpg

1635298797(1).jpg

~ 完成!你现在可以尝试使用这个新用户的凭证进行登录了。

Zabbix-agent 添加被监控主机

~ zabbix-2 操作

  • rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
  • yum -y install zabbix-agent
  • vim /etc/zabbix/zabbix_agentd.conf ####根据下图做更改

1635301376(1).jpg

  • systemctl start zabbix-agent
  • systemctl enable zabbix-agent ####设置开机自启
  • netstat -anplut | grep 10050 ####看下10050端口打没打开

1635312525(1).jpg

~ 回到 zabbix-1 测试

  • yum -y install zabbix-get.x86_64 ####zabbix-get可以测试agent的连接
  • zabbix_get -s 192.168.137.224 -k system.uname

1635312780(1).jpg

~ 回到 Window 浏览器 zabbix-web 页面添加主机

1635312996(1).jpg

1635313194(1).jpg

1635313316(1).jpg

1635313385(1).jpg

~ 至此被监控主机已经添加完毕

添加监控项 item

~ 监控项概念
在 zabbix 中,我们要监控的某一个指标,被称为 "监控项",例如的磁盘使用率,在 zabbix 中就可以被认为是一个 "监控项"(item),要获取到 "监控项" 的相关信息,我们则要执行一个命令,但是我们不能直接调用命令,而是通过一个 "别名" 去调用命令,这个 "命令别名" 在 zabbix 中被称为 "键"(key),所以,在 zabbix 中,如果我们想要获取到一个 "监控项" 的值,则需要有对应的 "键",通过 "键" 能够调用相应的命令,获取到对应的监控信息

~ zabbix-web 页面操作

1635313851(1).jpg

1635313888(1).jpg

1635314118(1).jpg

1635314501.jpg

~ 回到 redis-2 开启 httpd(即开启 80 端口)

  • systemctl start httpd
  • systemctl status httpd
  • netstat -anplut | grep 80

1635314649(1).jpg

~ 回到 zabbix-web 页面最新数据处刷新下可以看到 "监听 80 端口" 这个监控项的值变为 1

1635314854(1).jpg

~ 点击监控项后面的 "图形" 按钮可以获取 zabbix 根据收集到的数据制成的更直观的图形,以便于我们分析和报告

1635315089(1).jpg

~ 可能会出现如下图显示不正常的正文页面

1635315193(1).jpg

~ 到如图路径找到合适字体拉取到 redis-1 主机上 /usr/share/zabbix/assets/fonts/ ,并且如果后缀是 TTF 要改成 ttf

1635315318(1).jpg

1635315568(1).jpg

  • chmod +x SIMKAI.ttf
  • vim /usr/share/zabbix/include/defines.inc.php ##根据下图做更改

1635315863(1).jpg

1635315906(1).jpg

~ 以上配置保存后回到 zabbix-web 页面刷新,中文显示正常

1635315998(1).jpg

~ 更多监控项 Key 可看官方文档 Zabbix 支持的监控项 key

添加触发器

~ 概念

监控项只是用于收集数据。如果需要自动评估收到的数据,我们则需要定义触发器。触发器包含了一个表达式,这个表达式定义了数据的可接受的阈值级别。如果收到的数据超过了这个定义好的级别,触发器将被 “触发”,这就产生了一个 “事件” 或者进入 “异常(Problem)” 状态 —— 从而引起我们的注意,让我们知道有问题发生。如果数据再次恢复到合理的范围,触发器将会到 “正常(Ok)” 状态。

~ 到 zabbix-web 页面

1635316314(1).jpg

1635316344(1).jpg

1635316538(1).jpg

~ 添加完触发器后做个测试,回到 redis-2

  • systemctl stop httpd

~ 回到 zabbix-web 主页面刷新

1635317292(1).jpg

~ 至此触发器成功添加

添加动作和邮件报警

~ 先添加报警媒介

1635317864(1).jpg

1635317919(1).jpg

1635319008(1).jpg

1635319276(1).jpg

~ 添加动作

1635318049(1).jpg

1635318608(1).jpg

1635318281(1).jpg

1635335208(1).jpg

1635318481(1).jpg

~ 测试,回到 redis-2

  • systemctl stop httpd ####接受报警邮件

1635319416(1).jpg

  • systemctl start httpd ####接收恢复邮件

1635319511(1).jpg

WEB 检测展开目录

1635324643(1).jpg

1635324695(1).jpg

1635324828(1).jpg

1635325040(1).jpg

1635325090(1).jpg

1635325102(1).jpg

主动模式与被动模式

~ 概念

zabbix-agent 两种运行方式,即主动模式和被动模式,两种模式是相对客户端角度来说的。
▲ 被动模式:等待 server 来取数据,可以使用自定义 key 方式自定义检测数据。server 端使用 zabbix_get 来主动获取 agent 上的数据,如果有 100 个监控项,就需要 100 个来回,当监控项太多时会造成 server 压力。agent 配置文件里 "server=IP" 就是允许谁来取数据,如果被设置为 127.0.0.1,就只能在本地取数据了。
▲ 主动模式:agent 将不会打开端口监听,主动推送所有数据给 server,比如 server 询问 100 个监控项的值,agent 会一次返回给 server,这样就是减轻 server 的负担,自定义数据使用 zabbix_sender 向服务端推送。server 使用采集器来采集此类数据。

~ 主动模式使用的场景

  • 当服务端监控的主机达到一定数量之后,由Server端去收集数据,Zabbix会出现严重的性能问题,主要表现如下:
  • 1、当被监控端到达一个量级的时候,Web操作很卡,容易出现502
  • 2、图层断裂
  • 3、开启的进程(Pollar)太多,即使减少item数量,以后加入一定量的机器也会有问题
  • 所以下面主要往两个优化方向考虑:
  • 1、添加Proxy节点或者Node模式做分布式监控
  • 2、调整Agentd为主动模式
  • 由于第一个方案需要增加物理机器,所以首先尝试第二方案。

~ redis-2 修改配置文件改为主动模式

1635325859(1).jpg

  • systemctl restart zabbix-agent
  • netstat -ntl ####可以看到已经没有监听10050端口了

1635325959(1).jpg

  • ps -ef | grep zabbix ####但是agent还在运行,就说明已经转为主动模式了

1635326009(1).jpg

~ 回到 zabbix-web 页面增加主动模式模板

1635326917(1).jpg

1635326973(1).jpg

1635327062(1).jpg

1635327138(1).jpg

1635327181(1).jpg

1635327199(1).jpg

1635327243(1).jpg

~ 到 zabbix-web 页面添加该主动模式下的 redis-2,资源有限,这里已经将之前的被动模式 redis-2 删除

1635327523(1).jpg

1635327630(1).jpg

1635327708(1).jpg

1635327845(1).jpg

1635327935(1).jpg

自动发现和自动注册概念和区别

~ 概念

Zabbix 提供自动将网络中的主机,纳入自己的监控范围的功能,前提是这些新加入的主机都安装有 zabbix-agent (可通过自动化运维手段实现)
▲ 自动发现:zabbix-server 主动去添加主机。在 web 上创建自动发现的规则后,zabbix-server 会在一个 ip 地址范围内去扫描 agent 主机,如果发现有 10050 端口响应的主机,则将该主机添加到 server 端,自动添加操作可以由 zabbix server 的动作(Action)来完成。
  Zabbix-server 自动扫描和发现的操作,会增加 server 的压力。
▲ 自动注册:zabbix-agent 主动发送注册信息到 server 端,然后 agent 主机会被添加到 web 端。这是 agent 端的操作,会降低 server 端的负载。

1635328193(1).jpg

配置自动发现

~   条件有限,这里把 zabbix-web 页面原来主动模式的 redis-2 删除,并已经把 redis-2 配置改为被动模式

1635328783(1).jpg

1635328992(1).jpg

1635329047(1).jpg

1635329150(1).jpg

1635329171(1).jpg

1635329566(1).jpg

1635331696(1).jpg

~ 总结流程

server 先定义了规则:每隔 1m 探测局域网 IP 段 192.168.137.210-230 的 10050 端口,如发现存活就执行一个 key 的操作 system.uname 如成功,则表示该主机可以纳入监控。
再定义了动作, 一旦满足了 两个条件
1、属于 192.168.137.210-230 的 IP 段范围
2、满足规则的要求

则执行操作:
1、添加主机
2、添加主机到群组
3、关联 OS 模板

配置自动注册

~   先禁用掉刚才创建的 自动发现规则 和 自动发现动作,并且 zabbix 页面删除刚才添加的 redis-2 主机

~ 概念

Active agent 主动联系 zabbix server,最后由 zabbix server 将这些 agent 加到 host 里。对于需要部署特别多服务器的人来说,这功能相当给力。所有服务器批量装好 zabbix agent,server 配置好动作,所有的服务器就都配置好了,非常快速。

~ 将 redis-2 配置改为主动模式并参考如图配置进行更改

1635334002(1).jpg

  • systemctl restart zabbix-agent

~ 回到 zabbix-web 页面

1635334232(1).jpg

1635334376(1).jpg

1635334453(1).jpg

1635334613(1).jpg

~ 至此 Zabbix 基础就全部完成了,但 Zabbix 不止如此,还需要慢慢研究