企业级 Zabbix 监控

一、zabbix 监控

1、zabbix 监控架构

zabbix的监控架构在实际监控架构中,zabbix根据网络环境、监控规模等 分了如下两种架构: server-client 、server-proxy-client

1、server-client架构也是zabbix的最简单的架构,监控机和被监控机之间不经过任何代理 ,直接由zabbix server和zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境 。
2、server-proxy-client架构其中proxy是server、client之间沟通的一个桥梁,proxy本身没有前端,而且其本身并不存放数据,只是将agentd发来的数据暂时存放,而后再提交给server 。一般适用于跨机房、跨网络的中型网络架构的监控

普通监控:

86c509a996294686b08aa46bf28c1467.png

分布式监控:

b7e30e84dee54073b67d0205b8469504.png

2、Zabbix 优点

1.开源,无软件成本投入,支持二次开发,接口丰富。
2.Server 对设备性能要求低,支持proxy分布式监控集中管理,有自动发现功能。
3.基于web界面的管理方式,自带多种监控模板
4.支持主被动监控模式:当监控的 item 比较多服务器队列比较大时可以采用主动监控模式,(站在agent角度)被监控客户端主动从server 端去下载需要监控的item 然后取数据上传到 server 端。这种方式对服务器的负载比较小。

3、Zabbix 缺点

​ 需在被监控主机上安装 agent,所有数据都存在数据库里, 产生的数据很大,瓶颈主要在数据库。

4、Zabbix监控方式和对象(监控接口)

6c1977cc40fe4cf7bb9479cad8e8d18c.png

  1. Zabbix agent:Zabbix agent是一种轻量级的监控代理程序,安装在要监控的设备上。它可以主动采集设备上的各种指标数据,例如CPU使用率、内存使用率、磁盘空间等。Zabbix agent还可以执行命令并返回结果,用于更复杂的监控需求。使用Zabbix agent进行监控的好处是它可以提供更详细和精确的数据,并且对于网络环境有更好的适应性。
  2. IPMI:智能平台管理接口(Intelligent Platform Management Interface)IPMI 能够横跨不同的操作系统、固件和硬件平台,用于监控服务器硬件的状态和性能。Zabbix可以通过IPMI协议直接与服务器进行通信,获取硬件相关的信息,例如温度、风扇转速、电源状态等。
  3. SNMP:网络管理协议(Simple Network Management Protocol)是专门设计用于在 IP 网络管理网络节点服务器工作站路由器交换机等)的一种标准协议,它是一种应用层协议。通过SNMP协议,Zabbix可以获取网络设备的各种信息,例如接口流量、端口状态等。
  4. JMX(Java Management Extensions):JMX是一种Java平台的管理和监控标准。Zabbix可以通过JMX协议与Java应用程序进行通信,获取应用程序运行状态的信息,例如堆内存使用情况、线程数、GC时间等。JMX适用于监控Java应用程序的性能和健康状态,对于Java开发人员和运维人员非常有用。

5、Zabbix监控模式

  1. 主动模式(Active mode):在主动模式下,Zabbix agent主动向Zabbix服务器发送监控数据。Agent会按照预定义的监控项间隔时间主动采集数据,并将数据发送到Zabbix服务器。这种模式适用于无法通过网络直接连接到被监控设备的情况,或者需要主动控制数据采集间隔时间的情况。
  2. 被动模式(Passive mode):在被动模式下,Zabbix服务器主动连接到Zabbix agent来获取监控数据。Agent会监听指定的端口,等待服务器的连接,并将采集到的数据发送给服务器。这种模式适用于可以直接连接到被监控设备的情况,或者需要服务器主动控制数据获取间隔时间的情况。
  3. SNMP模式:Zabbix可以通过SNMP协议来监控网络设备和服务器。在SNMP模式下,Zabbix服务器通过SNMP协议直接获取设备的监控数据,无需安装Agent。这种模式适用于网络设备和一些支持SNMP的服务器监控。
  4. IPMI模式:Zabbix支持通过IPMI(Intelligent Platform Management Interface)协议来监控服务器硬件。在IPMI模式下,Zabbix服务器可以直接连接到服务器的IPMI接口,并获取服务器硬件的监控数据。这种模式适用于需要监控服务器硬件的情况。
  5. JMX模式:JMX(Java Management Extensions)是Java平台上的一种管理和监控标准。Zabbix可以通过JMX协议来监控Java应用程序。在JMX模式下,Zabbix可以通过JMX接口获取Java应用程序的监控数据,例如内存使用情况、线程数等。

zabbix组件

1、Server

Zabbix server 是agent程序报告系统可用性、系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。

2、数据库存储

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

3、Web界面

为了从任何地方和任何平台都可以轻松的访问Zabbix, 我们提供基于Web的Zabbix界面。该界面是Zabbix Server的一部分,通常跟Zabbix Server运行在同一台物理机器上。

4、Proxy 代理服务器

Zabbix proxy 可以替Zabbix Server收集性能和可用性数据。

1.Zabbix Proxy是一个可以从一个或多个受监控设备收集监控数据,并将信息发送到Zabbix sever,基本上是代server工作的。所有收集的数据都在本地进行缓存,然后传送到proxy所属的Zabbix sever。
2.部署Proxy是可选的,但是可能非常有益于分散单个Zabbix sever的负载。 如果只有proxy收集数据,sever上的进程就会减少CPU消耗和磁盘I/O负载。 
3.Zabbix proxy是完成远程区域、分支机构、没有本地管理员的网络的集中监控的理想解决方案。 
4.Zabbix proxy需要使用独立的数据库。

5、Agent监控代理

Zabbix agents监控代理,部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix Server。

6、数据流(配置监控过程)

  1. 创建主机(host):在Zabbix界面中,首先创建一个主机(host),即要监控的设备或应用程序。为主机指定一个唯一的名称,设置主机的IP地址或DNS名称,并选择适当的监控方式(例如使用Agent、SNMP等)。
  2. 创建监控项(item):在创建完主机后,需要为主机创建监控项(item),用于采集数据。监控项定义了要监控的指标,例如CPU使用率、内存使用率、磁盘空间等。选择适当的监控方式(例如通过Zabbix agent、SNMP、JMX等)和相应的键值,以及采集数据的间隔时间。
  3. 创建触发器(trigger):在监控项被定义后,需要创建触发器(trigger),用于触发告警动作。触发器定义了异常情况的条件,例如CPU负载过高、网络连接超时等。设置合适的条件表达式,以及设置触发器的优先级和严重性级别。
  4. 配置告警动作(action):在触发器被定义后,需要配置告警动作(action),即在触发器被触发后所采取的操作。可以选择发送电子邮件、发送短信、执行脚本等等多种方式进行告警。为每个动作指定相应的操作,例如发送给管理员、发送给特定用户组等

因此,如果想收到Server的CPU负载过高的告警,需要按照以上步骤进行配置:

  1. 创建一个主机,并设置它的IP地址或DNS名称。
  2. 为主机创建一个监控项,选择对CPU进行监控,并设置相应的监控方式和采集间隔。
  3. 创建一个触发器,设置条件表达式为CPU负载超过某个阈值。
  4. 配置一个告警动作,选择发送邮件给管理员。

6、Zabbix常用术语的含义

1、主机 (host)

  • 一台你想监控的网络设备,用IP或域名表示

2、主机组 (host group)

  • 主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。

3、监控项 (item)

  • 你想要接收的主机的特定数据,一个度量数据。

4、触发器 (trigger)

  • 一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式 当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。

5、动作 (action)

  • 一个对事件做出反应的预定义的操作。 一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成

6、媒介 (media)

  • 发送告警通知的手段;告警通知的途径

7、远程命令 (remote command)

  • 一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令

8、模版 (template)

  • 一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,应用,Web场景等)的集合 模版的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。

9、web 场景 (web scenario)

  • 利用一个或多个HTTP请求来检查网站的可用性

10、Zabbix agent

Zabbix agent部署在监控的目标上,主动监测本地的资源和应用(硬件,内存,处理器统计等)。 Zabbix agent收集本地的操作信息并将数据报告给Zabbix server用于进一步处理。一旦出现异常 (比如硬盘空间已满或者有崩溃的服务进程), Zabbix server会主动警告管理员指定机器上的异常。

二、Zabbix 企业监控系统搭建

1、实验准备

  centos7.5 系统服务器3台、 一台作为监控服务器, 两台台作为被监控节点, 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信。

1)所有机器关闭防火墙和selinux

setenforce 0 (修改配置文件关闭)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 
systemctl stop firewalld.service

2)根据架构图,实验基本设置如下:

机器名称IP配置服务角色备注
server192.168.246.228zabbix-server开启监控功能
node1192.168.246.226zabbix-node1开启
node2192.168.246.227zabbix-node2开启

2、Zabbix的安装,安装server端

1)更新yum仓库

  我们去官网下载一个包zabbix-release-5.0-1.el7.noarch.rpm,本地安装至我们的虚拟机,这样,我们本地就有了新的yum源,可以直接安装zabbix服务:

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
cd /etc/yum.repos.d/
mv epel.repo epel.repo.bak #防止epel自动安装zabbix6版本

而后更新我们的yum仓库:

yum clean all
yum repolist

安装:

安装 zabbix rpm 源,鉴于国内网络情况,使用阿里云 zabbix 源
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent 
yum install -y zabbix-get.x86_64  #安装zabbix命令工具

2)安装设置数据库:

1、安装 mariadb.repo

yum install -y mariadb mariadb-server

2、重启数据库服务:

systemctl restart mariadb
systemctl enable mariadb
mysqladmin -u root password 'zabbix'    #设置root密码

3、创建数据库并授权账号

[root@zabbix-server ~]# mysql -uroot -p'zabbix'
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;  
                                # 创建zabbix数据库
MriaDB [(none)]> grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';                        # 注意授权网段
MariaDB [(none)]> flush privileges;           # 刷新授权
MariaDB [(none)]> \q   #退出
Bye

4、导入表

 我们直接把表导入至我们的数据库即可:

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

3、配置 server 端

  我们的数据库准备好了以后,我们要去修改server端的配置文件。

[root@zabbix-server ~]# cd /etc/zabbix/
[root@zabbix-server zabbix]# ls
web  zabbix_agentd.conf  zabbix_agentd.d  zabbix_server.conf
#为了方便我们以后恢复,我们把配置文件备份一下
[root@zabbix-server zabbix]# cp zabbix_server.conf zabbix_server.conf.bak
[root@zabbix-server zabbix]# vim zabbix_server.conf
 DBHost=localhost            #数据库对外的主机
 DBName=zabbix               #数据库名称
 DBUser=zabbix               #数据库用户
 DBPassword=zabbix           #数据库密码
 #这里的配置文件打开后:如果有的就不用添加了。如果是注释了的也不用取消注释。直接把内容
复制粘贴过去。

  以上,我们的基本配置已经完成,可以开启服务了:

[root@zabbix-server zabbix]# systemctl start zabbix-server
[root@zabbix-server zabbix]# systemctl enable zabbix-server
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.

  开启服务以后,我们一定要去确认一下我们的端口有没有开启:

[root@zabbix-server zabbix]# netstat -lntp | grep 10051
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      1574/zabbix_server  
tcp6       0      0 :::10051                :::*                    LISTEN      1574/zabbix_server

  如果查到的端口没有开启,我们就要去检查一下配置文件有没有出问题了。

4、配置 web GUI

1.启用zabbix前端源,修改vim /etc/yum.repos.d/zabbix.repo,将[zabbix-frontend]
下的 enabled 改为 1
vim /etc/yum.repos.d/zabbix.repo
[zabbix-frontend]
...
enabled=1
...
2.安装 Software Collections,便于后续安装高版本的 php,默认 yum 安装的 php 
版本为 5.4 过低
yum install centos-release-scl -y此命令已经不能用了,需要重新配置centos-scl源。
SCL是Software Collections的缩写,由CentOS特别兴趣小组所维护。其收录了许多程序的
新版本,例如gcc, PHP, git, python等。安装的软件可与旧版共存,包名多以rh-为前缀
vim /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
​
3.安装 zabbix 前端和相关环境(php7.2)
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y

为Zabbix前端配置PHP

vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf   
#设置时区,只需要添加一行时区即可
php_value[date.timezone] = Asia/Shanghai       ---添加如下

f14cc093e6534d0895fee2cc97df3ec6.png

接下来,我们就可以启动我们的httpd服务了:

~]# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
~]# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/rh-php72-php-fpm.service to /usr/lib/systemd/system/rh-php72-php-fpm.service.

91dfdf8b39f14d79a7c737aa06fb92a7.png

我们的服务已经开启,接着我们就可以用浏览器来访问了。

5、浏览器访问并进行初始化设置

  我们使用浏览器访问192.168.246.228/zabbix,第一次访问时需要进行一些初始化的设置,我们按照提示操作即可:

b26e53aa622a4197a586775eba56d538.png

9564deb1c34f4a7db2107ab125e8dd74.png

3c874797d9b542b293cdc18ee163416c.png

06a3315fc2ec4730b2891174d9cafdec.png

082824c00a0b440c9284db2aa39b5bcf.png

268a6991037c409dbc2c275ec560c10f.png

  点击Finish以后,我们就会跳转到登录页面,使用我们的账号密码登录即可:

63b07b1cd3ff43308df1e03301262e9f.png

  默认用户名为:Admin ,密码为:zabbix 。  登陆进来就可以看到我们的仪表盘了:

1a54ae59cecb44feaf8644af583d8dec.png

6、配置 agent 端

  当我们把监控端配置启动以后,我们需要来设置一下我们的被监控端,我们在被监控的主机安装好agent,设置好他的server,并把他添加到server端,就能将其纳入我们的监控系统中去了。

1)安装 zabbix

  同样的,我们先来安装zabbix。两台机器都操作

[root@zabbix-node1 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zabbix-node1 ~]# yum install zabbix-agent zabbix-sender -y

  安装完成以后,我们去修改配置文件。

2)修改配置文件

  对配置文件做一个备份,然后去修改配置文件:

[root@zabbix-node1 ~]# cd /etc/zabbix/
[root@zabbix-node1 zabbix]# ls
zabbix_agentd.conf  zabbix_agentd.d
[root@zabbix-node1 zabbix]# cp zabbix_agentd.conf{,.bak}
[root@zabbix-node1 zabbix]# ls
zabbix_agentd.conf  zabbix_agentd.conf.bak  zabbix_agentd.d
[root@zabbix-node1 zabbix]# vim zabbix_agentd.conf   ----修改如下
Server=192.168.246.228 zabbix # 服务器的地址 
ServerActive=192.168.246.228  # 主动模式 zabbix-server-ip 
Hostname=zabbix-node1 
UnsafeUserParameters=1 # 是否限制用户自定义 keys 使用特殊字符 1是可以启用特殊字符
                         # 0是不可以启用特殊字符

a42df32c3d1043da951bad9800713975.png

是否允许别人执行远程操作命令,默认是禁用的,打开的话会有安全风险.

修改完成之后,我们保存退出。然后就可以启动服务了:

[root@zabbix-node1 zabbix]# systemctl start zabbix-agent
[root@zabbix-node1 zabbix]# systemctl enable zabbix-agent

  照例查看端口是否已开启

[root@zabbix-node1 zabbix]# netstat -lntp | grep 10050
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      9000/zabbix_agentd  
tcp6       0      0 :::10050                :::*                    LISTEN      9000/zabbix_agentd
已经开启成功。接着,我们就可以去server端添加了。node2也进行同样的操作,唯一不同的就是配置文件中的Hostname要设为zabbix-node2

7、监控过程详解

1)修改密码及中文版

  作为一只英语不好的运维,这里悄悄改成了中文版,如果大家英语好的话看英文版即可,英语不好就改了吧,毕竟中文版比较适合初学者更快的学习~

92fa899d36ec4133a053bd809c4415bc.png

d6fadcc4c9be4179b5839b61464a9dae.png

记得刷新!

按如上操作即可,选择中文以后,点击下面的update即可更新成功,更新过后是这样子的~

b00ad7ede47b43a58d9b3bb85f9e78bf.png

  同样的,为了安全起见,我们把密码改掉:

74e717aa60d74d97aa94cc96a95fcb94.png

630258fde78a4897a149985df67b8aea.png

e5f2624fedcd42798abd91226d912e15.png

  修改完成后同样点击更新即可。

2)创建主机及主机群组

  我们先来定义一个主机群组:

0c7b8cd211f44cddb010ef9465e9d892.png

163ebe2f643f46fda931784c8b18ff1b.png

  然后我们就可以去添加主机了:

01c5a6fb0b4b4d009deef781d38a2d29.png

1e746958672044e6934925df4f946cc1.png

  设置完成后,点击添加。我们就可以看到,我们添加的这个主机已经出现在列表中了:

7d6aad8c066641119b644752d430af13.png

  

3)监控项(items)

① 介绍

  我们点击上图中node1的监控项,即可创建我们的监控项,首先,我们创建三个应用集:

0424b3325f084432aa824479a17c4571.png

5718f19ae9aa4208ada10bb73eafbaa3.png

bb1cbbb564b647929bfef47a8364674d.png

f4bc95e8508840488bd9cc5da48227ef.png

3126bd2ce4b5472b935234e13a9b21d8.png

  然后我们来定义监控项:

df60e018c7a949a09ff5e9f559cfeb55.png

ff374a8d1649450a9d32c3e262a5d7fd.png

  任何一个被监控项,如果想要能够被监控,一定要在zabbix-server端定义了能够连接至zabbix-agent端,并且能够获取命令。或者在agent端定义了能够让server端获取命令。一般都是内建的命令,都对应的有其名字,被我们称之为key

b129da04f3c1424f962fb6fff0456815.png

  

69571e4f051c41e8b93700cbb4b67108.png

  我们继续来看我们的监控项:

e28823bb528e4ce1ac3eccd029a9b399.png

  说了这么多,我们来简单定义一个:

② 定义一个不带参数的监控项

877256a30ecf4fcda3c3ac8d71b5bb70.png

59d1201211f54d269c4d1f8361f79f02.png

f31d1aa6a0ba4928bd40e561d365802a.png

32ad805eb7074da9aca06f1fd5353f3b.png

  设置完以后,点击更新,即可加入,并会自动跳转至下图页面:

07285db0bd8a4dd1a04f068a5eb1fd60.png

  定义完成,我们回到所有主机,等待5秒,我们可以看到,我们node1节点后面的选项已经有变成绿色的了:如果不亮记得刷新

a3148387a96c4362a8dee95b070af9f6.png

 

25ad086794744beeb5099e16374e877d.png

 我们也可以回到我们的仪表盘,可以看到,我们的监控项有一个处于启用状态:

e102e76ada2f4eea88850b86a24ce20b.png

e4d7415eb8ad40d8aaa5fb106ecfbafc.png

  那么,我们的数据在哪里呢?可以点击最新数据,把我们的none1节点添加至主机,应用一下,就可以看到下面的状态了:

89d746fa70c24d77b9c9c3407449544d.png

  可以看到,我们还有一个图形页面,点进去则可以看图形的分布:

b9e3475555a745859e7965edf8701c8e.png

7b7d235f78964a1a8e70b37f3c62f48a.png

  事实上,我们关注的指标有很多种,我们一一添加进来即可。  刚刚我们定义的监控项是很简单的,指定一个key即可,但是有些监控项是带有参数的,这样一来,我们的监控项就有更多的灵活性。接下来,我们来简单说明一个需要带参数的监控项:

③ 定义一个带参数的监控项

ceab03edff3d4fbab0a38a66f5e98171.png

  图中的[]就是需要参数的意思,里面的值即为参数,带<>为不可省略的。我们就以这个例子来说明:  if表示是接口名;<mode>表示是那种模式,包括但不限于:packets(包)、bytes(字节)、errors(错误)、dropped(丢包)(上述内容通过ifconfig查看)  我们来设置一下这个监控值:

64b18ac31ab44f59928b7531b9d53f23.png

155bac7956254ec9982d04c2da091a9b.png

f5dbf2a7f012485481cc7fb145404824.png

0abb6c64ae8b4417b1e75f129935b85c.png

ecea70f9901a40bca69455cf26a9c335.png

9a8d4e77af714f1a90889bf4f746444f.png

  我们来看看网页的显示情况:检测中 ---> 最新数据 ---> Network Interface Stats(图形),等待一会,或者刷新一下

6cb783d3f6564602afc2218e24cd4151.png

3014b096944243898c654f7511fda98f.png

④ 快速定义类似指标

  如果我们想要定义一个类似的指标,我们可以直接选择克隆,然后简单的修改一点点参数即可。  就以我们刚刚定义的net.if.in[ens33,packets]为例,如果我们想要在定义一个out的进行如下操作即可:

736598de7e344bc9921e9a67bf631fdc.png

b12fcbd867dc4b2e86448a10934425c1.png

6128efaa774a474d9bb7415e3eeef649.png

  如果我们要以字节为单位也要定义的话,进行同样的操作:

6ec228394a83481793a82113f24a723b.png

  可以看一下,我们现在已经定义的指标:

c167f08ba12e43539b5f734030b80caa.png

  我们来到 检测中 ---> 最新数据,可以看到,我们定义的监控项都已经有值了:

23ca057c0fda4ea0ac33815560afde63.png

⑤ 删除监控项

  如果有一个监控项,我们用不上了,就可以删除掉。但是如果你直接删除的话,默认数据是会留下的,所以我们要先清除数据,然后再删除,具体操作步骤如下:

fdfdba6298324c29a73a45bf9bddaff5.png

4)触发器(trigger)

简介

  当我们的采集的值定义完了以后,就可以来定义触发器了。  我们触发器的定义是:界定某特定的item采集到的数据的非合理区间或非合理状态。通常为逻辑表达式。

一般,我们评定采样数值是否为合理区间的比较稳妥的方法是——根据最后N次的平均值来判定结果;这个最后N次通常有两种定义方式:
1. 最近N分钟所得结果的平均值
2. 最近N次所得结果的平均值

  注:能用数值保存的就不要使用字符串

定义一个触发器

  我们可以查看一下rate of packets(in)的值,并以其为标准确定我们的非正常的值:

a7a344f443ac4f73b0e573bcdb31a8be.png

  图中我们可以看出,我们的最大值为74,最小值为4,平均值为24。这样的话,我们可以定义5以上的都是非正常的值。  下面我们来定义一个触发器:  进入:配置 ---> 主机 ---> node1 ---> 触发器 ---> 创建触发器

2bfc13822449408db8f284adac134820.png

  我们的表达式可以直接点击右侧的添加,然后定义自己所需的内容,即可自动生成:

87388b1d01654692b0950b2227a3e3a4.png

  生成完毕后,我们就点击页面下方的添加,即成功定义了一个触发器,同时页面自动跳转:

6f72495e29c24811a6928c08dcda9eb0.png

  然后我们去看一下我们刚刚定义了触发器的那个监控项:

13d29680976a49f7a31ee9f4bb29dac0.png

  我们可以看出,这个里面就有了一根线,就是我们刚刚定义的值,超过线的即为异常状态,看起来非常直观。  但是,现在即使超过了这根线,也仅仅会产生一个触发器事件而不会做其他任何事。因此,我们就需要去定义一个动作(action)。

5)定义动作(action)

1、简介

  我们需要去基于一个对应的事件为条件来指明该做什么事,一般就是执行远程命令或者发警报。

第一,我们要事先定义一个媒介,第二,还要定义这个媒介上用户接收消息的端点(当然,在用户上,我们也称之为用户的媒介)。  我们可以去看一下系统内建的媒介类型:

b7c68b94ce6d4a6ea032d74555188456.png

  这只是大的媒介类型,里面还有更多的细分,一个用户可以添加多个接收的媒介类型。

  我们之前说过了,动作是在某些特定条件下触发的,比如,某个触发器被触发了,就会触发我们的动作。  现在,我么基于redis来定义一个动作。  首先,我们在agent端使用yum安装一下redis

[root@zabbix-node1 ~]# yum install -y redis
  修改一下配置文件:
[root@zabbix-node1 ~]# vim /etc/redis.conf 
bind 0.0.0.0        #不做任何认证操作
  修改完成以后,我们启动服务,并检查端口:
[root@zabbix-node1 ~]# systemctl start redis
[root@zabbix-node1 ~]# netstat -lntp | grep redis 
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      1353/redis-server 0

  接着,我们就可以去网站上来定义相关的操作了:

创建一个应用集:

配置-----主机---node1---应用集---创建应用集:

4f5f84f965e3441d8a6a13dd25eda171.png

1.定义监控项

  进入 配置 ---> 主机 ---> node1 ---> 监控项(items)---> 创建监控项

c764d72eb1164dc7b94b0dd6ad73f055.png

  

54a44bdd46014494b03cb1b6955f380e.png

填写完毕以后,我们点击下方的添加。

b7745ea7cf4e4c26ab681e50839de308.png

  该监控项已成功添加。  我们可以去查看一下他的值:  检测中 ---> 最新数据

add0a57b17c04537ba27f4270c2fbabb.png

2.定义触发器

  定义好了监控项以后,我们亦可来定义一个触发器,当服务有问题的时候,我们才能及时知道:  进入 配置 ---> 主机 ---> node1 ---> 触发器(trigger)---> 创建触发器

73a0d7c927714dc3837b6894812952d9.png

3374cc8994a04404b9e4ad6d311f5029.png

4de5dc43cf9c4cecb68b4b905aad4b0a.png

  填写完毕以后,我们点击下方的添加。

c5093af47d834a0c9d207cc9612e61fa.png

  该触发器已成功添加。  我们去查看一下:  监测中 ---> 最新数据

87419a66e7b5418ca2607d1d3c5eb94a.png

  我们来手动关闭redis服务来检测一下:

[root@zabbix-node1 ~]# systemctl stop redis

  进入 监测中 ---> 问题

7fdbdc60ca9b4c69a1eb609d33267674.png

  可以看到,现在已经显示的是问题了。并且有持续的时间,当我们的服务被打开,会转为已解决状态:

[root@zabbix-node1 ~]# systemctl start redis

a69e44e043104063a579277862cab496.png

3.定义动作(action)

现在我们就可以去定义action了。

进入 配置 ---> 动作 ---> 创建动作(注意选择事件源为触发器)

1edd51faeb384f25af0ad1c65d8bfec1.png

603906f755e64244ba289ec5bad771ce.png

8c2e5ba575d243da94aba95b056d91bb.png

c745d1378f404684bb770e6238115f92.png

09ba36192771498e91c422b13af7642e.png

942d240bd83944c9a358e4886264c9a8.png

  我们可以进行操作添加:

5a4148f325774da1abcef646b5c818cb.png

  我们可以看出,还需要在虚拟机上进行两项操作,一是修改sudo配置文件使zabbix用户能够临时拥有管理员权限;二是修改zabbix配置文件使其允许接收远程命令。我们进行如下操作:

[root@zabbix-node1 ~]# visudo          #相当于“vim /etc/sudoers”
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)   ALL
    zabbix    ALL=(ALL)   NOPASSWD: ALL     #添加的一行,表示不需要输入密码
​
[root@zabbix-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
    EnableRemoteCommands=1          #允许接收远程命令
    LogRemoteCommands=1             #把接收的远程命令记入日志
​
[root@zabbix-node1 ~]# systemctl restart zabbix-agent.service

我们添加了第一步需要做的事情,也就是重启服务,如果重启不成功怎么办呢?我们就需要来添加第二步:

b774b8fec4704af9b966b9556dc76a49.png

7cc8e4d3e4b94eaea104714ef6d315c8.png

消息内容

主机: {HOST.NAME1}
时间: {EVENT.DATE} {EVENT.TIME}
级别: {TRIGGER.SEVERITY}
触发: {TRIGGER.NAME}
详情: {ITEM.NAME1}:{ITEM.KEY1}:{ITEM.VALUE1}
状态: {TRIGGER.STATUS}
项目:{TRIGGER.KEY1} 
事件ID:{EVENT.ID}

添加完成以后,我们可以看一下:

  操作添加完了,如果服务自动恢复了,我们可以发送消息来提示:

da1c86a0773344e7a5e70b3e337dd5cb.png

f1607c06dc954c068558a0d2ef4bcc00.png

3a533796c94640d999a81790b71b8c67.png

至此,我们的动作设置完毕,可以点击添加了,添加完成会自动跳转至如下页面:

84d627f30643464dbdfad5a58237a448.png

  现在我们可以手动停止服务来进行测试:

[root@zabbix-node1 ~]# systemctl stop redis.service

  然后我们来到问题页面来查看,发现确实有问题,并且已经解决: 等一会

519ec750c33a400cae2b9b4f54b2d23d.png

 也可以去agent端查看端口是否开启:

[root@zabbix-agent-none1 ~]# systemctl stop redis 
[root@zabbix-agent-none1 ~]# netstat -lntp | grep redis 
[root@zabbix-agent-none1 ~]# netstat -lntp | grep redis 
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      1957/redis-server 0

  可以看出端口正常开启,我们的动作触发已经完成。

补充:我们也可以使用脚本来发送警报,我们的脚本存放路径在配置文件中可以找到,定义为:AlterScriptsPath=/usr/lib/zabbix/alertscripts

然后我们将这个动作关闭掉为后期的邮件报警做准备。

6c357cd181b245649ab1b57699a8d430.png

36a5637940be4a5ca3324516d38567fb.png

6)zabbix可视化

① 简介

  数据日积月累,如果我们想要更直观的了解到各项数据的情况,图形无疑是我们的最佳选择。zabbix提示了众多的可视化工具提供直观展示。

② 自定义图形(Graphs)

  自定义图形中可以集中展示多个时间序列的数据流。支持“线状图(normal)”、“堆叠面积图(stacked)”、“饼图(pie)” 和“分离型饼图(exploded)”四种不同形式的图形。  具体的设置过程如下:  进入 配置 ---> 主机 ---> node1 ---> 图形,选择右上角创建图形:

29b513f59acb4dd1b6839ed3127fe021.png

  我们来看一看四种状态:

1474c6ae91804d79b0935a058363fac7.png

6c808f9ad93842c28777f6f4c20bb938.png

81bfc99eda3c4ba490f0c2dcd3277d25.png

62811102cc3c44759aca2d061f6fd834.png

  包括我们的主机都可以自定义,不过一般来说,线型是看的最清晰的,我们通常会使用这个。  我们一共添加了三个图形,我们可以在 监测中 ---> 图形 来查看

32e51bd017b14a5e82e2832c1597c41e.png

111dfb3f5b2a461b8ff5bfeb1ad3f7ae.png

解决字体乱码问题

在Windows-控制面板-字体中选择自己喜欢的字体下载下来,并上传到zabbix服务器中

注意:把新字体文件改名成原来字体文件的名字

cp 字体文件 /usr/share/zabbix/assets/fonts/graphfont.ttf

先将字体文件上传到zabbix服务器中
[root@zabbix-server ~]# cd /usr/share/zabbix/assets/fonts/
[root@zabbix-server fonts]# ls
graphfont.ttf
[root@zabbix-server fonts]# cp graphfont.ttf graphfont.ttf.bak
[root@zabbix-server fonts]# ls
graphfont.ttf  graphfont.ttf.bak
[root@zabbix-server fonts]# rm -rf graphfont.ttf       
[root@zabbix-server fonts]# mv /root/simhei.ttf .
[root@zabbix-server fonts]# ls
graphfont.ttf.bak  simhei.ttf
[root@zabbix-server fonts]# mv simhei.ttf graphfont.ttf
[root@zabbix-server fonts]# ls
graphfont.ttf  graphfont.ttf.bak

使用xshell上传字体。如果使用其他客户端上传字体,会出现问题。

218ddf3f50e646ab9297d09b72efad82.png

7)模板

① 创建模板

  之前我们说过,每一个主机的监控项都很多,我们一个一个的添加实在是太头疼了,更何况,可能不止一个主机。  但是我们可以把一个redis的监控项添加进一个模板里,这样更方便于我们以后的添加。  具体操作如下:  进入 配置 ---> 模板 ---> 选择右上角创建模板

d6bce7f9d36a488eb88a2ce5e01ac9f8.png

  填写完以后,我们点击下方的添加即可。  我们可以基于组过滤一下,就能看到我们刚刚定义的模板:

7f13ec57cb12446380ad0f4a82f7c4d6.png

7ba1e5c9a6344d4aade94489062e6293.png

  一样的,我们可以向里面添加应用集、监控项、触发器、图形等等,添加完成以后,后期我们再有主机需要添加就直接套用模板即可。

需要注意的一点是,我们现在添加的是模板,所以不会立即采用数据,只有链接到主机上以后,才会真正生效。

2、 模板的应用

我们的软件已经创建了许多模板,我们可以使用一个模板来看看效果。

  进入 配置 ---> 主机 ---> node1 ---> 模板  我们就可以选择要添加的模板了:

c8e337012cd44837a347a827c562afd5.png

  到这里我们就可以点击更新了。一旦我们成功链接至模板,我们的主机数据就会更新了:

b042a2c73e7348d4b93775bb9db9a132.png

  注意:1、一个主机可以链接多个模板.  2、如果我们有多个主机,同时这些主机也在一个主机组里,这样的话,我们只需要在这个主机组里添加模板。

3、移除模板链接

  当我们一个主机的模板不想要用了,我们就可以移除模板链接,具体操作步骤如下:  进入 配置 ---> 主机 ---> node1 ---> 模板  我们就可以把不需要的模板移除:

9d4e894edb6c472683409cff92eb6468.png

  我们来删除掉试试看,移除并清理以后,我们点击更新。就会自动跳转至如下界面:

3f93094360744955a4febcbf62371f59.png

  可以看出,我们的模板已经被移除了。

8、用户参数

1、自定义用户参数简介

自定义用户参数,也就是自定义key,有时,你可能想要运行一个代理检查,而不是Zabbix的预定义,你可以编写一个命令检索需要的数据,并将其包含在代理配置文件("UserParameter"配置参数)的用户参数

用法格式

UserParameter=<key>,<command>

解释:
一个用户参数也包含一个键;在配置监控项时,key是必需的
注意:需要重新启动agent 服务 

2、用法展示

(1)修改agent 端的配置,设置用户参数

①自己需要查找的参数的命令

free | awk '/^Mem/{print $3}'

f1ebe362cc7c45069ce6e0d17ec89c21.png

② 修改配置文件,把查找参数的命令设为用户参数

[root@zabbix-node1 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@zabbix-node1 zabbix_agentd.d]# vim memory_usage.conf
UserParameter=memory.used,free | awk '/^Mem/{print $3}'
UserParameter=cpu_1_load,uptime | awk '{print $9}' | awk -F',' '{print $1}'
方法二:
[root@zabbix-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf 
UserParameter=memory.used,free | awk '/^Mem/{print $3}'

③ 重启agent 服务

systemctl restart zabbix-agent.service

(2)在zabbix-server 端,测试是否能够查询

zabbix_get -s 192.168.246.226 -p 10050 -k "memory.used"
zabbix_get -s 192.168.246.226 -p 10050 -k "cpu_1_load"
0.01

024f6dad49ed45af8076744055e42617.png

(3)在监控上,设置一个item监控项,使用这个用户参数

配置-->主机-->node1-->监控项-->创建监控项

834776f4643a472995bce42de8452a76.png

(4)查询graph 图形

da5237677d5747d48bc61384cbc2d81c.png

3、带用户参数的监控项

(1)修改agent 端的配置,设置用户参数

① 命令行查询参数的命令

cat /proc/meminfo
MemTotal:        2027648 kB
MemFree:         1536128 kB
MemAvailable:    1543976 kB
Buffers:            2076 kB
Cached:           135092 kB
SwapCached:            0 kB
Active:           257300 kB
Inactive:         113736 kB
...

② 修改配置文件,把查找参数的命令设为用户参数

[root@zabbix-node1 zabbix_agentd.d]# vim memory_usage.conf  ----继续添加
UserParameter=memory.stats[*],cat /proc/meminfo | awk '/^$1/{print $$2}'     
--添加到文件中注意去掉反斜杠
[root@zabbix-node1 zabbix_agentd.d]# systemctl restart zabbix-agent.service
注意:$$2:表示不是前边调位置参数的$1,而是awk 的参数$2
注意:$1是调用前边的[*],位置参数,第一个参数

(2)在zabbix-server 端,查询使用这个用户参数的key

传参:
[root@zabbix-server fonts]# zabbix_get -s 192.168.246.226 -p 10050 -k "memory.stats[MemTotal]"
999696
[root@zabbix-server fonts]# zabbix_get -s 192.168.246.226 -p 10050 -k "memory.stats[Cache]"
243832
[root@zabbix-server fonts]# zabbix_get -s 192.168.246.226 -p 10050 -k "memory.stats[Buffer]"
2108

67d30ce8668043d98bd21ff550d7758f.png

(3)在监控上,设置一个item监控项,使用这个用户参数

① 添加Memory Total 的item监控项,使用memory.stats[MemTotal] 的用户参数

6d221c8a59ed47fd831b5f5c1fe3ece4.png

在进程中定义倍数,规定单位

dd5eb0187e2c4789923f55895474e430.png

② clone 克隆Memory Total 创建Memory Free 的监控项

memory.stats[MemFree] 用户参数

f59dfd423c4446dba3480618393ba81b.png

(4)上面2个监控项的graph 图形

① memory total

4c779e74b9e94de89d42b2f7043ae27a.png

② memory free

bc95ad209f894259819128d7321da59b.png

UserParameter=memory.used,free | awk '/^Mem/{print $3}'
UserParameter=memory.free,free | awk '/^Mem/{print $4}'
UserParameter=mem.stats[*],cat /proc/meminfo | awk '/^$1/{print $$2}'
UserParameter=cpu_1_load,uptime | awk '{print $8}' | awk -F',' '{print $1}'
UserParameter=cpu_5_load,uptime | awk '{print $9}' | awk -F',' '{print $1}'
UserParameter=cpu_15_load,uptime | awk '{print $10}' | awk -F',' '{print $1}'
UserParameter=disk.io.r[*],iostat -xm | awk '/^$1/ {print $$4}'
UserParameter=disk.io.w[*],iostat -xm | awk '/^$1/ {print $$5}'
UserParameter=disk.io.r.mb[*],iostat -xm | awk '/^$1/ {print $$6}'
UserParameter=disk.io.w.mb[*],iostat -xm | awk '/^$1/ {print $$7}'
UserParameter=disk.util[*],iostat -xm | awk '/^$1/ {print $$NF}'

自定义参数详解

(1)检查MySQL从库的复制状态是否正常
# 使用mysql命令执行SQL查询,获取slave状态,并通过egrep和awk提取相关信息
# 最后使用grep统计"Yes"出现的次数,确认复制是否正常运行
UserParameter=db_slave2-status,mysql -uuser -p'123456' -h 10.67.245.25 -e "show slave status\G" 2>/dev/null | \
  egrep 'Slave_IO_Running|Slave_SQL_Running' | \
  awk '{print $NF}' | \
  grep -c Yes
(2)获取已使用的内存总量
# 通过free命令输出,并使用awk提取第三列的值
UserParameter=memory.used,free | awk '/^Mem/{print $3}'
(3)获取空闲的内存总量
# 通过free命令输出,并使用awk提取第四列的值
UserParameter=memory.free,free | awk '/^Mem/{print $4}'
(4)获取指定内存统计项的值
# cat命令读取/proc/meminfo文件,并使用awk提取匹配特定行的第二列的值
# [*]会被实际的键名替换,例如mem.stats[MemFree]将查找MemFree行
UserParameter=mem.stats[*],cat /proc/meminfo | awk "/^$1/{print \$2}"
(5)获取指定磁盘的读操作数
# iostat命令输出磁盘I/O状态,并使用awk提取匹配特定行的第四列的值
UserParameter=disk.io.r[*],iostat -xm | awk "/^$1/ {print \$4}"
(6)获取指定磁盘的写操作数
# iostat命令输出磁盘I/O状态,并使用awk提取匹配特定行的第五列的值
UserParameter=disk.io.w[*],iostat -xm | awk "/^$1/ {print \$5}"
(7)获取指定磁盘的读操作的字节数
# iostat命令输出磁盘I/O状态,并使用awk提取匹配特定行的第六列的值
UserParameter=disk.io.r.mb[*],iostat -xm | awk "/^$1/ {print \$6}"
(8)获取指定磁盘的写操作的字节数
# iostat命令输出磁盘I/O状态,并使用awk提取匹配特定行的第七列的值
UserParameter=disk.io.w.mb[*],iostat -xm | awk "/^$1/ {print \$7}"
(9)获取指定磁盘的利用率
# iostat命令输出磁盘I/O状态,并使用awk提取匹配特定行的最后一列的值
UserParameter=disk.util[*],iostat -xm | awk "/^$1/ {print \$NF}"
(10)获取过去1分钟的平均负载
# uptime命令输出系统运行时间和负载信息,并使用awk提取第八列的值
UserParameter=cpu_1_load,uptime | awk '{print $8}' | awk -F',' '{print $1}'
(11)获取过去5分钟的平均负载
# uptime命令输出系统运行时间和负载信息,并使用awk提取第九列的值
UserParameter=cpu_5_load,uptime | awk '{print $9}' | awk -F',' '{print $1}'
(12)获取过去15分钟的平均负载
# uptime命令输出系统运行时间和负载信息,并使用awk提取第十列的值
UserParameter=cpu_15_load,uptime | awk '{print $10}' | awk -F',' '{print $1}'

预定义参数详解

操作系统信息(OS)

# 系统启动的时间点(Host boot time)
system.boottime
# 系统已运行时长(System uptime)
system.uptime
# 系统时间(Host local time)
system.localtime
# 主机名(Host name)
system.hostname
# 内核参数,可打开的最大文件数(Maximum number of opened files)
kernel.maxfiles
# 内核参数,支持的最大进程数(Maximum number of processes)
kernel.maxproc
# 目前登录到系统中的用户数量(Number of logged in users)
system.users.num
# 获取系统信息(System information)
system.uname

网卡信息(Network interfaces) 

# 网卡流速,流入方向
net.if.in
# 获取指定网卡(br0)的流入流量的流速值(Incoming network traffic on br0)
net.if.in[br0]
# 网卡流速,流出方向
net.if.out
# 获取指定网卡(br0)的流出流量的流速值(Outgoing network traffic on br0)
net.if.out[br0]

进程信息(Processes) 

# 进程数量(Number of processes)
proc.num
# 目前系统中的进程总数(Number of processes)
proc.num[]
#目前正在运行(处于运行态)的进程总数(Number of running processes)
proc.num[run]

处理器信息(CPU)

# CPU的进程上下文切换(Context switches)
system.cpu.switches
# CPU中断数量(Interrupts per second)
system.cpu.intr
# CPU的负载值,进程队列的平均长度(Processor load)
system.cpu.load
# CPU每分钟的负载值,按照核数做平均值(Processor load (1 min average per core))
system.cpu.load[percpu,avg1]
# CPU每5分钟的负载值,按照核数做平均值(Processor load (5 min average per core))
system.cpu.load[percpu,avg5]
# CPU每15分钟的负载值,按照核数做平均值(Processor load (15 min average per core))
system.cpu.load[percpu,avg15]
CPU的负载值可以使用uptime命令查看,但是Zabbix所获得到CPU负载值与uptime所显示的结果并不同,它的结果是uptime所显示的负载值除以主机的CPU核数。
如:
uptime
13:58:59 up 4 days, 25 min,  2 users,  load average: 0.04, 0.05, 0.05
cat /proc/cpuinfo|grep processor|wc -l #获取核数
4
zabbix_get -s 192.168.157.128 -p 10050 -k system.cpu.load[percpu,avg1]
0.010000

# CPU的使用率
system.cpu.util
# CPU的空闲时间,百分比形式(CPU idle time)
system.cpu.util[,idle]
# CPU的用户态运行时间,百分比形式(CPU user time)
system.cpu.util[,user]
# CPU的系统态运行时间,百分比形式(CPU system time)
system.cpu.util[,system]
# CPU的io等待时间,百分比形式(CPU iowait time)
system.cpu.util[,iowait]
# CPU的中断时间,百分比形式(CPU interrupt time)
system.cpu.util[,interrupt]
# CPU的nice时间,百分比形式(CPU nice time)
system.cpu.util[,nice]
# CPU的软中断时间,百分比形式(CPU softirq time)
system.cpu.util[,softirq]
# CPU的偷盗的时间,百分比形式(CPU steal time)
system.cpu.util[,steal]

 内存信息(Memory)

# 系统中swap分区的使用情况
system.swap.size
# swap分区的总容量(Total swap space)
system.swap.size[,total]
#swap分区尚可使用的容量(Free swap space)
system.swap.size[,free]
# swap分区尚可使用的容量,百分比形式(Free swap space in %)
system.swap.size[,pfree]
# 获取物理内存的使用情况
vm.memory.size
# 物理内存总量(Total memory)
vm.memory.size[total]
#物理内存目前可用的容量(Available memory)
vm.memory.size[available]

 虚拟内存是由物理内存(即购买的内存条)和swap分区组成。物理内存占用过高之后,会将部分很久不用的数据转储到swap分区中。在正常情况下,物理内存使用量并不高的情况下,不会占用swap分区。如果出现物理内存使用量过高,开始使用swap分区,或者swap分区使用过高的情况,就需要考虑购买并添加物理内存了。

文件系统信息(Filesystems)

# 文件系统中的inode的使用情况
vfs.fs.inode
# 文件系统的指定分区中尚未使用的inode数量,百分比形式(Free inodes on / (percentage))
vfs.fs.inode[/,pfree]
# 文件系统中的使用容量详情
vfs.fs.size
# 文件系统中指定分区(目录)中未使用的容量数值(Free disk space on /)
vfs.fs.size[/,free]
# 文件系统中指定分区(目录)中未使用的容量,百分比形式(Free disk space on / (percentage))
vfs.fs.size[/,pfree]
# 文件系统中指定分区(目录)中已使用的容量(Used disk space on /)
vfs.fs.size[/,used]
# 文件系统中指定分区(目录)的总容量(Total disk space on /)
vfs.fs.size[/,total]

Web应用信息(WebApp) 

检测Webapp的性能,页面测试是否出现错误,测试错误详情,页面的响应时间,通过页面大小和响应时间计算页面的下载速度等。

# Web页面下载速度
web.test.in
# 指定方案中所有步骤的页面平均下载速度(Download speed for scenario "baidu.test".)
web.test.in[baidu.test,bps]
# 指定方案中指定步骤的页面下载速度(Download speed for step "baidu" of scenario "baidu.test".)
web.test.in[baidu.test,baidu,bps]
# Web应用测试是否失败(Failed step of scenario)
web.test.fail
# 指定方案是否测试失败(Failed step of scenario "baidu.test".)
web.test.fail[baidu.test]
# Web应用测试错误详情(Last error message of scenario)
web.test.error
# 指定方案中各个步骤中最后出现的错误详情(Last error message of scenario "baidu.test".)
web.test.error[baidu.test]
# Web应用响应状态码(Last error message of scenario)
web.test.rspcode
# 指定方案中指定步骤的页面响应状态码(Response code for step "baidu" of scenario "baidu.test".)
web.test.rspcode[baidu.test,baidu]
# Web应用响应时间(Response time.)
web.test.time
# 指定方案中指定步骤的页面响应时间(Response time for step "baidu" of scenario "baidu.test".)
web.test.time[baidu.test,baidu,resp]

  安全信息(Security)

# 求指定文件的校验和(Checksum)
vfs.file.cksum
# 求/etc/passwd的校验和(Checksum of /etc/passwd)
vfs.file.cksum[/etc/passwd]

9、网络发现(自动发现)

(1)介绍

扫描指定的网络范围,自动发现并添加新的设备、服务或应用程序到监控系统中。这样可以加快Zabbix的部署过程,减少手动配置每个项目的工作量,并简化监控系统的管理。
通过自动发现,Zabbix可以动态识别和添加新设备,如服务器、路由器、交换机等,以及新服务和应用程序,如数据库、Web服务器、邮件服务器等。这对于快速变化的环境非常有用,例如云环境或容器化部署。

(2)发现方式(发现规则)

1. ip地址范围发现
您定义一个IP地址范围,使Zabbix自动发现在这个范围内的设备。通过指定起始IP和结束IP,Zabbix将扫描该范围内的所有IP地址,并尝试连接到每个IP,并检查设备是否可用。
2. 可用服务发现
指定要扫描的特定服务(如FTP、SSH、HTTP等)。Zabbix将在定义的IP范围内扫描这些服务,并尝试与每个IP上的服务进行连接。如果服务可用,Zabbix将识别该主机并将其添加到监控中。

(3)网络发现的两个阶段

① 发现(discovery)阶段
Zabbix定期扫描网络发现规则中定义的IP范围,可以指定要扫描的IP范围、SNMP OID、端口等条件来识别新的设备。
② 动作(actions)阶段
在发现事件发生后,可以触发动作来自动执行指定的操作,发现事件可以是新设备被发现、设备离线或变更等情况。通过定义动作,您可以指定要执行的操作,如添加/删除主机、启用/禁用主机、向组中添加主机、从组中移除主机、链接/取消链接模板等。

配置网络发现(如何批量实现zabbix监控)

(1)agent安装配置

利用第二台用于可被扫描发现的主机----192.168.246.227

① 安装agent 段的包

[root@zabbix-server ~]# scp /etc/yum.repos.d/zabbix.repo 192.168.246.227:/etc/yum.repos.d/
[root@zabbix-node2 yum.repos.d]# mv epel.repo epel.repo.bak
[root@zabbix-node2 ~]# yum -y install zabbix-agent zabbix-sender

② 设置agent 配置,实现用户免密执行

把之前设置好的node1的配置传过来

[root@zabbix-node2 ~]# vim /etc/zabbix/zabbix_agentd.conf
Hostname=zabbix-node2 #只需修改hostname
[root@zabbix-node2 ~]# visudo       #修改sudo的配置,添加如下信息
#Defaults !visiblepw
​
93 zabbix ALL=(ALL) NOPASSWD: ALL

b771c82627a14f75b9de2cbccd4c00bb.png

④ 开启服务

[root@zabbix-node2 ~]# systemctl start zabbix-agent

(2)设置自动发现规则discovery

配置--自动发现--创建自动发现规则

ip范围不要给的太大

886f6a68ea5b44ef933d211ec13f63e5.png

a7853ee8b3c74626a2a79f5de4e4e7aa.png

e5c5794772574287a66860a6077fbab6.png

ed96ab6bd5214de3a0e79fd89c432cc4.png

注释:在zabbix-server端

[root@zabbix-server ~]# zabbix_get -s 192.168.246.227 -p 10050 -k "system.hostname"

632a17a5625149cf9cc677a318a28b32.png

② 更新间隔:1h就好,不要扫描太过频繁,扫描整个网段,太废资源;这里为了实验,设为1m

自动发现成功

6cf13c1b0fba4d44a6f4a291007d504a.png

(3)设置自动发现discovery 的动作action

a) 创建

34bffe337ba643db994e9475d9eead83.png

b) 设置action动作

801ae376446e4d0a845c29990e9b6b1d.png

① 设置A条件,自动发现规则=test net
② 设置B条件,自动发现状态=up

d75385985e7f460d87949e4946e34218.png

③ 要做什么操作

添加主机到监控

f0168bac96a54c0fbdcc1542aa283ca5.png

56102fea52524d9d9d8aba2dff64bb99.png

自动链接Template OS Linux 到此host

47da947a11ee436a8ce01b543c53bed6.png

83dd89c7f22045d0be75e21d9a1c6352.png

c7dd472a56c0400badd7d46f0c495233.png

165362f234b142ad8d70bd8ee6b24cf5.png

7f4a229bba8c47e2878160d11c384dbe.png

c) 配置action 完成,默认是disabled 停用的,如果不是停用的,也需要再次选择启动,激活一下。

e11c80c81da64107ad32ec1d0753da4c.png

d) 启用动作,查看效果--需要等待一会

确实已经生效,添加主机成功,模板链接成功

0ef3831cd77642bdb2c65782c6b94bae.png

(5)如果自己需要添加的主机已经扫描添加完成,就可以关闭网络扫描了,因为太耗资源

10、web监控

1、介绍

(1)介绍

① Web监控:监控指定的站点的资源下载速度,及页面响应时间,还有响应代码

2、创建设置web场景

配置--主机--node1--web场景--创建web场景

(1)创建

ec849ecc4b0547509e4144a823c6e53c.png

(2)配置web 监测

5824183f562c4013972cc0256144a5fd.png

① 点击步骤,设置web page web页面

f4c44076bdfc4c84b1eae747f0a882e9.png

a) 设置名为home page,URL为http://192.168.246.226/index.html 的web页面

da3a2e4150374756b3d0b1893f3b05b1.png

b) 设置名为fpm status,URL为http://192.168.246.226/fpm-status 的web页面

e3e6a2186b344f73a935a8370d50bdd6.png

c) 设置2个web页面成功

d3643af8b97f45569cc404953b126ba0.png

3、查看测试

a26f6228d7e744fc8c51412fa8ac3f02.png

16ef8e09ec2b4c67944c81b627929fbc.png

f042a35e22624783a0879b1105fa2a83.png

11、主动/被动 监控

1、介绍

被动检测:Zabbix Server会向Agent发送请求,Agent则接收请求并获取相应的数据,并将数据响应给Server。这种方式是Server主动获取Agent的数据,适用于Agent位于外部网络或防火墙后的情况。
​
主动检测:Agent主动向Server发送请求,获取与自己相关的监控项的配置。Agent会向Server请求与自己相关的监控项的配置,并主动将Server配置的监控项的相关数据发送给Server。这种方式能够节约Server的资源,因为Agent会主动将数据发送给Server,减少Server的请求次数。

2、设置一个通过內建key发送数据的主动监控

(1)agent端所需要基本配置:

[root@zabbix-agent-none1 ~]# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=192.168.246.228   给哪个监控server 发送数据
Hostname=zabbix-agent-none1   自己的主机名.

(2)设置一个主动监测

ba511c7492f243ef82dab96251395aed.png

配置---主机--none1--监控项---创建监控项

904e9b79d6c946cebb683fe543d8194a.png

① 选择进程,每秒更改,---添加

因为key:system.cpu.switches :上下文的数量进行切换,它返回一个整数值。为了监控效果,选择下一秒减上一秒的值作为监控

注释:可运行的线程数大于CPU的数量,那么OS最终会强行换出正在执行的线程,从而使其他线程能够使用CPU。这会引起上下文切换.

8984db8121f043009a9bf07c4f4681c7.png

(3)已经有图形

f3aecb07157743dbb8fe98fc7f713ba2.png

12、zabbix-server 监控自己,数据库,nginx

1、下载安装,配置agent

[root@zabbix-server ~]# vim /etc/zabbix/zabbix_agentd.conf 
# 配置agent,添加并修改
EnableRemoteCommands=1    允许远程命令
LogRemoteCommands=1    记录远程命令
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=zabbix-server
[root@zabbix-server ~]# systemctl start zabbix-agent

2、自动生成Zabbix server 的主机

配置---主机

f94438682d0d4025ad6aecfcc630b8c3.png

创建监控项---触发器--动作

13、实现分布式 zabbix proxy 监控

使用zabbix-proxy有两个情况
1、agent和server在不同的网络段
当代理主机和Zabbix服务器处于不同的网络段时,使用Zabbix Proxy可以实现数据的传输和收集。代理主机负责收集本地监控数据,并将其传输到Zabbix Proxy上,再由Zabbix Proxy将数据发送到Zabbix服务器上。这样可以解决跨网络段的通信问题。
2、减轻server的服务器负载压力
当Zabbix服务器需要监控大量的代理主机时,直接连接这些代理主机可能会给服务器带来较大的负载压力。使用Zabbix Proxy可以减轻Zabbix服务器的负载,代理主机将数据发送给Zabbix Proxy,再由Zabbix Proxy将数据发送给Zabbix服务器。这样一来,Zabbix服务器只需处理和连接少量的Zabbix Proxy,降低了服务器的资源消耗。这种情况下,Zabbix Proxy充当了数据收集和传输的中间层。
如果是agent和server直接连接,假设一台server的资源最多只能和50台agent连接(打个比方,具体还得看server服务器的性能),那么如果换成一台proxy去收集这50台agent的数据,那么server可以通过和一台proxy连接来达到监测50台agent的目的,那么如果server和5台proxy连接,那么如此一算,便达到了一台server同时对5*50=250台agent监测的目的,这么弄一下,server能监测的数量一下就翻了好几翻。

d551ad68c707406687dbc9820777bbb6.png

流程

zabbix-agent服务器将监测到的数据通过10050端口传递给到zabbix-proxy,然后zabbix-proxy服务器本身有一个数据库,用来存放收集到的数据,定期的通过10051端口给真正的zabbix-server传送收集到的数据,如此一来,就达到了zabbix-server通过proxy对agent进行监测的目的了。

b4bb93d2900a48cba063090478352f4b.png

- ntpdate 192.168.198.156 制作时间服务器
[root@zabbix-server ~]# yum install -y ntp
[root@zabbix-server ~]# vim /etc/ntp.conf  #有4行server的位置,把那4行server行注释掉,填写以下两行
server 127.127.1.0 # local clock
fudge  127.127.1.0 stratum 10
[root@zabbix-server ~]#  systemctl start ntpd
[root@zabbix-server ~]#  systemctl enable ntpd
同步时间
[root@zabbix-proxy ~]# yum install -y ntpdate
[root@zabbix-proxy ~]# ntpdate 192.168.198.156
​
[root@zabbix-node2 ~]# yum install -y ntpdate
[root@zabbix-node2 ~]# ntpdate 192.168.198.156
​
- 关闭防火墙,selinux
- 设置主机名 hostnamectl set-hostname zabbix-proxy
[root@localhost ~]# hostnamectl set-hostname zabbix-proxy
​
- vim /etc/hosts 每个机器都设置hosts,以解析主机名;
监控端
[root@zabbix-server ~]# vim /etc/hosts
192.168.198.156 zabbix-server
192.168.198.158 zabbix-node2
192.168.198.159 zabbix-proxy
​
代理端
[root@zabbix-proxy ~]# cat /etc/hosts
192.168.198.156 zabbix-server
192.168.198.158 zabbix-node2
192.168.198.159 zabbix-proxy
​
被监控端
[root@zabbix-node2 ~]# cat /etc/hosts
192.168.198.156 zabbix-server
192.168.198.158 zabbix-node2
192.168.198.159 zabbix-proxy

1.环境配置(4台主机)

机器名称IP配置服务角色
zabbix-server192.168.198.156监控
zabbix-node1192.168.198.157被监控端
zabbix-node2192.168.198.158被监控端
zabbix-proxy192.168.198.159代理proxy
zabbix-server 直接监控一台主机 node1
zabbix-server 通过代理 zabbix-proxy 监控 node2

2.在 zabbix-proxy 上配置 mysql

[root@zabbix-proxy ~]# yum install -y mariadb mariadb-server
[root@zabbix-proxy ~]# systemctl start mariadb
[root@zabbix-proxy ~]# mysqladmin -uroot password 'zabbix'
[root@zabbix-proxy ~]# mysql -uroot -p'zabbix'
MariaDB [(none)]> create database proxydb character set 'utf8';
MariaDB [(none)]> grant all on proxydb.* to 'proxy'@'localhost' identified by 'zabbix';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> \q

3.在 zabbix-proxy上下载zabbix 相关的包,主要是代理proxy的包

[root@zabbix-server ~]# scp /etc/yum.repos.d/zabbix.repo 192.168.198.159:/etc/yum.repos.d/
编辑zabbix.repo源将里面的gpgcheck关闭
[root@zabbix-proxy ~]# yum -y install zabbix-proxy-mysql zabbix-get zabbix-agent zabbix-sender

将zabbix-proxy-mysql包里面的数据导入数据库中

c7361cef4fbf4c49bb6c2773ea877413.png

[root@zabbix-proxy ~]# cp /usr/share/doc/zabbix-proxy-mysql-5.0.3/schema.sql.gz ./
[root@zabbix-proxy ~]# ls
anaconda-ks.cfg  schema.sql.gz
[root@zabbix-proxy ~]# gzip -d schema.sql.gz 
[root@zabbix-proxy ~]# ls
anaconda-ks.cfg  schema.sql
[root@zabbix-proxy ~]# mysql -uroot -p proxydb < schema.sql 
Enter password:
配置proxy端
[root@zabbix-proxy ~]# vim /etc/zabbix/zabbix_proxy.conf

02128255c1214ff1b2fc5cbbc33abf1a.png

Server=192.168.198.156        # server端 的IP
ServerPort=10051             # server端 的端口
​
Hostname=zabbix-proxy        # 主机名
ListenPort=10051             # proxy自己的监听端口
EnableRemoteCommands=1       # 允许远程命令
LogRemoteCommands=1          # 记录远程命令的日志
​
# 数据的配置
DBHost=localhost
DBName=proxydb
DBUser=proxy
DBPassword=zabbix
​
ConfigFrequency=30      # 多长时间,去服务端拖一次有自己监控的操作配置;为了实验更快的生效,这里设置30秒,默认3600s
DataSenderFrequency=1   # 每一秒向server 端发一次数据,发送频度
​
​
[root@zabbix-proxy ~]# systemctl start zabbix-proxy
​
[root@zabbix-proxy ~]# netstat -lntp | grep 10051
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      15798/zabbix_proxy  
tcp6       0      0 :::10051                :::*                    LISTEN      15798/zabbix_proxy

4.配置node2端允许proxy代理监控

[root@zabbix-node2 ~]#  vim /etc/zabbix/zabbix_agentd.conf---添加proxy的ip地址
Server=192.168.198.156,192.168.198.159
ServerActive=192.168.198.156,192.168.198.159
Hostname=zabbix-node2
[root@zabbix-node2 ~]#  systemctl restart zabbix-agent #启动服务

5.把代理加入监控 server 创建配置 agent 代理

管理---agent代理--创建代理

5d335dbcd15c43d28f79ea135e4081e3.png

383a097b7b224d32a49f93bf36f8f26a.png

创建node2主机并采用代理监控

配置---主机--创建主机

5d69f13154f8430dacce2ff6b6c0d062.png

0b2f13263f20492fb9ba97fdd64bbb8d.png

539f4987731747d2bb78aa357e2f980f.png

6.创建item监控项

随便创一个监控项 CPU Switches

9d192c4847c84af582a5bb26b147af10.png

fd69978e20d54ad58a56d429d265f43a.png

e028b08e915d437a8f6a143fecec870c.png

e4fa0b024d5b466791db004879487225.png

8abe01a2483840369f9966a267bb40c0.png

db2b4b827fb440c2810dfaf791b3ad1f.png

dcf1820f8ec44e93b21088161fbee364.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值