[TOC]

0x00 Zabbix介绍

zabbix是一个开源的企业级性能监控解决方案,可以实时监控服务器/网络设备等硬件资源与其相关的各项指标是否是正常的,而且能够更加方便的、集中的监控他们;同时还提供了对被监控主机进行检查、信息收集等操作,保证服务器系统的安全运营,当被监控主机出现异常时,能够及时报警通知管理员;

zabbix由2部分构成:

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

A:监控运维工具常常具有的功能:

  • 监控采集信息
  • 存储信息
  • 展示信息
  • 报警通知

B:与Zabbix类似的监控系统工具有那些?
答:cacti、nagios、ganglia等类似的监控系统


1. zabbix通信方式

  • Agent:通过专用的代理程序进行监控与常见的master/agent模型类似,如果被监控对象支持对应的agent([ˈeɪdʒənt] 推荐方式)
  • SSH/telnet:通过远程控制协议进行通讯
  • SNMP:通过SNMP协议(“简单网络管理协议)与被监控对象进行通讯,常使用在路由器、交换机网络硬件设备上安装,其实SNMP协议的工作方式也可以理解为master/agent的工作方,只不过是在这些设备中内置了SNMP的agent而已,所以大部分网络设备都支持这种协议。
  • IPMI:通过IPMI接口进行监控,我们可以通过标准的IPMI硬件接口,监控被监控对象的物理特征,比如电压,温度,风扇状态,电源状态等。
  • JMX:通过JMX进行监控,JMX(Java Management Extensions,即Java管理扩展)监控JVM虚拟机时,使用这种方法也是非常不错的选择(业务推荐方式)

WeiyiGeek.通信方式

C:什么是Zabbix Agent她的作用是什么?
我们将zabbix agent部署到被监控主机上由agent采集数据,报告给负责监控的中心主机并将数据存入zabbix database中;

D:当监控规模变得庞大时我们是否需要部署多套zabbix系统进行监控呢?
答案肯定是不用的,因为zabbix支持分布式监控,可以把成千上万台的被监控对象分成不同的区域,每个区域中设置一台代理主机;

  • 当监控规模庞大到需要使用zabbix proxy
  • 区域内的每个被监控对象的信息被agent采集提交给代理主机(zabbix proxy),其作用与zabbix server类似
  • zabbix proxy再将收集到的信息统一提交给真正的zabbix server处理,这样使得zabbix proxy分摊了zabbix server的压力
  • 通过建立统一的监控入口监控所有的对象

zabbix proxy的架构图:
WeiyiGeek.架构图

E:zabbix各种组件总结

  • zabbix database:用于存储所有zabbix的配置信息、存储agent端接收监控数据的数据库。
  • zabbix agent:部署在被监控主机上,负责被监控主机的数据,并将数据发送给zabbix server。
  • zabbix server:负责接收agent发送的报告信息,并且负责组织配置信息、统计信息、操作数据等(目前可以采用mysql/postgresql)。
  • zabbix web : 如zabbix的web界面,管理员通过web界面管理zabbix配置以及查看zabbix相关监控信息,可以单独部署在独立的服务器上(php编写的)
  • zabbix proxy:可选组件用于分布式监控环境中,zabbix proxy代表server端完成局部区域内的信息收集,最终统一发往server端。

2. zabbix工作模式

  • 主动模式:Agent端会将采集完的数据主动发送给server端;
  • 被动模式:Agent端也可以不主动发送数据,而是等待server过来拉取数据;
  • 总结:主动/被动模式可以同时存在;

agent端: 使用 zabbix_sender 工具,测试是否能够向Server端发送数据。
server端: 使用 zabbix_get 工具,测试是否能够从Agent端拉取数据。


0x01 Zabbix安装

Zabbix官网地址:https://www.zabbix.com/cn/download
官方文档:https://www.zabbix.com/documentation/4.2/manual/installation/install#installing_frontend
搭建环境:

# 当前Zabbix最新版本:4.2
Server:CentOS Linux release 7.6.1810 (Core) 3.10.0-957.10.1.el7.x86_64 (64)
IP:192.168.1.99

Agent1:CentOS release 6.10 (Final) 2.6.32-754.12.1.el6.i686 (32)
IP:192.168.1.100

Agent2:CentOS release 6.10 (Final) 2.6.32-754.12.1.el6.i686 (32)
IP:192.168.1.100

#Agent 与 server 开放得端口情况
zabbix_agentd : 10050
zabbix_server : 10051

# 注意(安装软件前必须进行设置 \ 安装后别忘记启动防火墙)
# 临时关闭selinux
setenforce 0
# 永久关闭selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
#关闭防火墙和开机不启动(生产环境慎用,可以选择开放对应的端口)
systemctl stop firewalld.service
systemctl disable firewalld.service

# 手动配置官方源 yum (需要单独安装php)
[Centos 6.10]$ vim /etc/yum.repos.d/zbbix.repo
[zabbix]
name=zabbix
baseurl=http://repo.zabbix.com/zabbix/4.2/rhel/6/i386/
gpgcheck=0
enabled=1

[Centos 7.10]$ vim /etc/yum.repos.d/zbbix.repo
[zabbix]
name=zabbix
baseurl=http://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/
gpgcheck=0
enabled=1

#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
$sudo yum install epel-release.noarch wget vim gcc gcc-c++ lsof net-tools

安装步骤(官方rpm包):

#Step1.Centos 7.x 64 安装步骤
[[email protected] ~]$ rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm


#Step2.Centos 6.x 32安装步骤
[[email protected] ~]$ rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/6/i386/zabbix-release-4.2-1.el6.noarch.rpm


#Step3.执行yum清理
yum clean all
yum makecache #生成元数据

#Step4.Centos 7.x 64 Server端安装
[[email protected] ~]$ yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-get
#//zabbix-get:可以进行测试agent端的数据
# 已安装:
# zabbix-agent.x86_64 0:4.2.1-1.el7 zabbix-server-mysql.x86_64 0:4.2.1-1.el7 zabbix-web-mysql.noarch 0:4.2.1-1.el7
# 作为依赖被安装:
# OpenIPMI-libs.x86_64 0:2.0.23-2.el7 OpenIPMI-modalias.x86_64 0:2.0.23-2.el7 dejavu-fonts-common.noarch 0:2.33-6.el7 dejavu-sans-fonts.noarch 0:2.33-6.el7 fontpackages-filesystem.noarch 0:1.44-8.el7
# fping.x86_64 0:3.10-4.el7 libX11.x86_64 0:1.6.5-2.el7 libX11-common.noarch 0:1.6.5-2.el7 libXau.x86_64 0:1.0.8-2.1.el7 libXpm.x86_64 0:3.5.12-1.el7
# libevent.x86_64 0:2.0.21-4.el7 libtool-ltdl.x86_64 0:2.4.2-22.el7_3 libxcb.x86_64 0:1.13-1.el7 libxslt.x86_64 0:1.1.28-5.el7 libzip.x86_64 0:0.10.1-8.el7
# net-snmp-libs.x86_64 1:5.7.2-37.el7 php.x86_64 0:5.4.16-46.el7 php-bcmath.x86_64 0:5.4.16-46.el7 php-cli.x86_64 0:5.4.16-46.el7 php-common.x86_64 0:5.4.16-46.el7
# php-gd.x86_64 0:5.4.16-46.el7 php-ldap.x86_64 0:5.4.16-46.el7 php-mbstring.x86_64 0:5.4.16-46.el7 php-mysql.x86_64 0:5.4.16-46.el7 php-pdo.x86_64 0:5.4.16-46.el7
# php-xml.x86_64 0:5.4.16-46.el7 t1lib.x86_64 0:5.1.2-14.el7 unixODBC.x86_64 0:2.3.1-11.el7 zabbix-web.noarch 0:4.2.1-1.el7
# 完毕!


#Step5.Centos 6.x 32 Agent端安装
[[email protected] ~]$ yum -y install zabbix-agent zabbix-sender


#Step6.Centos 7.x 64 Server端 数据库账号密码设置
[[email protected] ~]$ yum install mariadb mariadb-server mariadb-libs mariadb-devel #默认是安装mariadb
[[email protected] ~]$ mysql -uroot -p''
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to [email protected]'192.168.1.%' identified by 'zabbix';
mysql> quit;
#导入初始架构和数据,系统将提示您输入新创建的密码。 (zabbix 初始化sql脚本) 通过管道导入到数据库中
$ zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
# 查看导入的数据库表
# MariaDB [zabbix]> show tables;
# +----------------------------+
# | Tables_in_zabbix |
# +----------------------------+
# | acknowledges |
# | actions |
# | alerts |
# | application_discovery |
# | application_prototype |
# | application_template |
# | applications |
# | auditlog |


#Step7.Centos 7.x 64 Server端 zabbix web 安装
[[email protected] /]$ yum install -y httpd php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml
[[email protected] /]$ rpm -ql "zabbix-web" #存放的目录/usr/share/zabbix zabbix-web-mysql在上面都已经自动安装了


0x02 Zabbix配置

(1)Zabbix server配置
编辑配置文件 /etc/zabbix/zabbix_server.conf 设置DBPassword=password为我们在数据上设置的密码;
此处列出我们可能会经常修改的参数,如下:

#服务端监听的端口,保持默认即可
ListenPort=10051

#通过SourceIP参数可以指定服务端的源IP,当server端有多个IP地址时,我们可以指定服务端使用固定的IP与agent端进行通讯,为了安全起见,agent端会基于IP进行一定的访问控制,也就是说agent端只允许指定的IP以server端的身份采集被监控主机的数据,如果IP不对应,则不允许采集被监控主机的数据,所以,当server端有多个IP时,我们可以通过SourceIP参数,指定server端通过哪个IP采集被监控主机的数据。
SourceIP=

#通过LogType参数,可以指定通过哪种方式记录日志,此参数可以设置为三种值,system、file、console,system表示将日志发往syslog,file表示使用指定的文件作为日志文件,console表示将日志发往控制台,默认为file。
LogType=file


#当LogType设置为file时,通过LogFile参数设置日志文件位置。
LogFile=/var/log/zabbix/zabbix_server.log


#指明日志文件达到多大时自动滚动,单位为MB,如果设置LogFileSize为50,表示日志大小达到50MB滚动一次,设置为0表示日志文件不会滚动,所有日志保存在一个文件中。
LogFileSize=0

#通过DebugLevel参数可以定义日志的详细程度,即为日志级别。
DebugLevel=3

#通过DBHost参数设置zabbix数据库所在的服务器IP,由于此处zabbix与mysql安装在同一服务器上,所以此处设置为localhost
DBHost=localhost

#通过DBName指定zabbix数据库对应的名称
DBName=zabbix

#通过DBUser指定zabbix数据库用户名
DBUser=zabbix

#通过DBPassword指定zabbix数据库用户的密码/数据库服务监听的端口号
DBPassword=123123
DBPort=3306

#如果数据库服务与server端在同一台服务器上,可以通过DBSocket指定数据库本地套接字文件位置,但是需要注意,即使设置了mysql套接字文件的位置,还是需要配合DBHost参数,否则在登录zabbix控制台时,可能会出现警告,在zabbix server的log中,也可能会出现无法连接到数据库的提示。
DBSocket=/var/lib/mysql/mysql.sock



(2)为Zabbix前端配置PHP
编辑配置文件 /etc/httpd/conf.d/zabbix.conf

#新添加的VirtualHost进行包含
<VirtualHost 192.168.1.99:80>
servername zabbix.weiyigeek.com
documentroot /usr/share/zabbix
........
php_value date.timezone Asia/Shanghai
........
</VirtualHost>

启动Zabbix server和agent进程,并为它们设置开机自启:

# systemctl restart zabbix-server zabbix-agent httpd mariadb 
# systemctl enable zabbix-server zabbix-agent httpd mariadb

现在您的Zabbix server已经安装完成并开始运行;



(3)为Zabbix agnet 配置
编辑Agent配置文件:/etc/zabbix/zabbix_agnet.conf ,通用参数配置段参数大多数与zabbix_server配置文件中的常用参数意义相同

#被动模式相关参数
Server:用于指定允许哪台服务器拉取当前服务器的数据,当agent端工作于被动模式,则代表server端会主动拉取agent端数据,那么server端的IP必须与此参数的IP对应,此参数用于实现基于IP的访问控制,如果有多个IP ,可以使用逗号隔开。
ListenPort:用于指定当agent端工作于被动模式时所监听的端口号,默认端口为10050,也就是说,server端默认访问10050端口,从而拉取数据。
ListenIP:用于指定agent端工作于被动模式时所监听的IP地址,默认值为0.0.0.0,表示监听本机的所有IP地址。
StartAgents:用于指定预生成的agent进程数量。



## 主动模式的常用参数
ServerActive:此参数用于指定当agent端工作于主动模式时,将信息主动推送到哪台server上,当有多个IP时,可以用逗号隔开。
Hostname:此参数用于指定当前主机的主机名,server端通过此参数对应的主机名识别当前主机。
RefreshActiveChecks:此参数用于指明agent端每多少秒主动将采集到的数据发往server端。


#此处,我们同时设置"被动模式"与"主动模式"的如下参数,其他保持默认即可,修改完成后保存退出。
Server=192.168.1.99
ServerActive=192.168.1.99
Hostname=zabbix.weiyigeek.com #注意这里的主机名称一定要与zabbix创建的主机名称

#配置文件修改完成后,启动agent端进程,修改hosts地址的指向
[[email protected] ~]$ echo "192.168.1.99 zabbix.weiyigeek.com" >> /etc/hosts
192.168.1.99 zabbix.weiyigeek.com

[[email protected] ~]$ service zabbix-agent start
Starting Zabbix agent: [ OK ]


0x03 Zabbix-Web配置与使用

启动服务后访问:http://10.22.53.12/zabbix/

  1. 点击下一步验证环境是否满足安装条件
    WeiyiGeek.条件验证

  2. 点击下一步设置zabbix-database数据库连接信息
    WeiyiGeek.数据库设置

  3. 点击下一步填写zabbix server信息(Server名称)
    WeiyiGeek.

  4. 显示前面Pre-installation summary配置得信息并且完成安装
    WeiyiGeek.

  5. 安装完成后出现登陆界面默认得账号:Admin,密码:zabbix
    WeiyiGeek.首页

  1. 配置界面为中文,点击个人中心 设置 User profile: Zabbix Administrator
    WeiyiGeek.中文配置

菜单介绍:

  • 管理:一般用于管理zabbix自身及zabbix相关设置。
  • 配置:一般用于配置监控相关设置
  • 监测:一般用于查看被监控的相关数据
  • 报表:可以为管理员生成一段时间内的监控统计信息。
  • 资产:管理员可以查看被管控的主机有哪些,以及相关的资产信息。


(1)在zabbix中添加主机
两个zabbix的常用术语”主机”与”主机组”:

  • host(主机):需要被zabbix监控的对象,被称为主机,主机必须属于某个主机组。
  • hostgroup(主机组):”主机组”也被称为”主机群组”,是由具有相同属性、特征、角色的多个主机组成的逻辑单元。

前面我们将99主机作为了web/database/server,将100/101作为agent主机;所以这里需要将107添加到zabbix主机上;

实战实战:

Step1.配置 -> 主机群组 -> 创建主机群组 -> 输入名称添加即可
#显示:data 主机 1 模板 data1

Step2.配置 -> 主机 -> 创建主机 -> 填入主机名称 -> 选择代理程序接口 -> (由于没有使用zabbix-proxys所以不用改agent代理程序监控)
#data1 应用集 监控项 触发器 图形 自动发现 Web监测 192.168.1.100: 10050 已启用 zbxsnmpjmxipmi无

WeiyiGeek.添加主机

WeiyiGeek.主机状态



(2)在zabbix添加监控项
在前面我们建立了主机,却没有设置其监控项,所以zab是显示灰色状态,所以:
在zabbix中我们要监控的某一个指标,被称为”监控项”,就像我们的磁盘使用率,在zabbix中就可以被认为是一个”监控项”(item)
如果要获取到”监控项”的相关信息,我们则要执行一个命令,但是我们不能直接调用命令,而是通过一个”别名”去调用命令,这个”命令别名”在zabbix中被称为”键”(key);
所以在zabbix中,如果我们想要获取到一个”监控项”的值,则需要有对应的”键”,通过”键”能够调用相应的命令,获取到对应的监控信息。

实战实战:

Step3. 点击主机选项卡 => data1 -> 监控项进行设置 ->进入监控项配置界面后,可以根据一些条件,筛选出已经存在的一些监控项;

Step4. 但是我们并没有任何监控项,所以此处我们直接点击"创建监控项"按钮,以便新建监控项。
Step5. 在监控项 -> 键值(选择) -> system.cpu.switches

#关键点1:更新间隔 (数据更新间隔表示每隔多长时间获取一次监控项对应的数据)
#此处默认每隔30秒获取一次192.168.1.100主机的cpu上下文切换次数。
#注意在生产环境中,如果不是特别重要的、敏感的、迅速变化的数据,不要获取的这么频繁,因为如果我们的监控项变得特别多时,获取信息的时间间隔过于频繁会带来巨大的监控压力,同时对数据库的写入也是一种考验。

#关键点2:历史数据保留时长 / 历史数据保留时长
#我们设置历史数据保存8天,此监控项超过180天的数据将会被zabbix删除。
#趋势数据是什么意思呢? 趋势数据就是每个小时收集到的历史数据中的最大值、最小值,平均值以及每个小时收集到的历史数据的数量,所以趋势数据每小时收集一次,数据量不会特别大,一般情况下,历史数据的保留时间都比趋势数据的保留时间短很多,因为历史数据比较多,如果我们监控的主机非常多,而且监控的频率特别频繁,那么数据库的压力则会变得非常大。

#关键点3:查看值
- 不变:表示获取到的值是什么样子的,就在数据库中存储为什么样子。
- 差量(简单变化):表示本次收集到的信息值 减去上一次收集到的信息值得出的差值。
- 差量(每秒速率):表示本次收集到的值减去上次收集到的值以后,再除以两次收集信息的间隔时间。

#关键点3:应用集
- 理解为同一类型的监控项的集合;
- 如果没有可选的合适的应用集,我们可以直接在"新的应用集"文本框中填入要创建的应用集名称,那么对应应用集会自动被创建,当前监控项也会自动归类为这个应用集。

#管理员可以在server端使用一个名为zabbix_get的工具,测试是否能够从agent端拉取数据。 -k 是键值;
[[email protected] ~]$ zabbix_get -s 192.168.1.100 -k system.cpu.switches
97752

WeiyiGeek.监控项

Step6. 监控菜单 -> 最新数据 -> 选择过滤/主机群
WeiyiGeek.最新数据

Step7. 点击上图中的”图形”连接可以看到如下界面,zabbix已经监控到了对应的cpu上下文切换频率,并且绘制出了对应的”图形”
WeiyiGeek.图像监控

完成配置后监控成功:
WeiyiGeek.zab恢复正常



(3)在zabbix添加带有参数的监控项
在前文解释了 “监控项”(item)、”键”(key)、”应用集”(application)等概念,并且为data-1主机添加了一个监控项,其作用是监控主机的cpu上下文切换速率。

这次我们添加了一个监控项只是与上一次相比,我们这次添加的监控项可以传入参数。(进行监控)

详细的监控项文档:https://www.zabbix.com/documentation/4.2/manual/config/items/itemtypes/zabbix_agent

同样我们再选择建立一个监控项:
vfs.fs.size[fs,] 磁盘容量。如果返回的是字节则是整数,如果返回的是百分比则是浮点。

  • “vfs.fs.size”就是键名
  • “[fs,]”就是这个键需要的参数,而”[fs,]”这两个参数中,fs是不可省参数,mode是可省参数。
  • mode设置为total,free,used

WeiyiGeek.官方文档

#示例
vfs.fs.size[/tmp,free] #表示获取/tmp所对应的文件系统的剩余空间大小。

#使用zabbix_get验证
[[email protected]]$ zabbix_get -s 192.168.1.100 -k vfs.fs.size[/] #总量
18402373632 #字节 / 1000 / 1000 / 1000 = G

[[email protected]]$ zabbix_get -s 192.168.1.100 -k vfs.fs.size[/,free]
11488763904 #字节

WeiyiGeek.配置案例

监控项添加完毕后,等待一分钟左右,查看对应的监控数据,如下点击监控项对应的”图形”连接。
WeiyiGeek.带参数监控



(4)Zabbix 触发器、事件、动作 概念

  1. 触发器(Triggers):

    • 实际上就是一个条件表达式而已,当监控的数据满足某种条件的时候进行触发,当触发器被触发的时候往往意味着系统出现问题;
    • 触发器未被触发时,其的状态为”OK”,当触发器被触发时,触发器的状态为”Problem”,当被监控项的值达到阈值时,触发器的状态从”OK”变为”Problem”,当监控项的值再次回归到合理范围时,触发器的状态会从”Problem”转换回”OK”。
  2. 事件(Events):

    • 当触发器的状态发生改变时,则会产生对应的”事件”,当然,由触发器的状态改变而产生的事件被称为”触发器事件”
    • zabbix中事件分为几种类型,除了”触发器事件”,还有一些别的事件,我们可以把”事件”大概理解成一个重要的事情。
  3. 动作(Action): 当某个事件产生时,需要对应的处理措施,这种处理措施被称为动作。



(5)Zabbix创建触发器
经过上面理论的介绍,下面我们来进行实际操作如何创建触发器,注意当以前建立过触发器的规则可以直接进行调用;

实战实战:

Step 1. 菜单栏[配置] -> 选项卡[主机] -> 选择要操作的主机行 -> 点击[触发器]
Step 2. 创建触发器即可 -> 触发器 -> 表达式[添加] -> 选择设置表达式 -> 补充完触发器所需要的信息

#表达式:{data1.weiyigeek.com:vfs.fs.size[/,pused].last(#2,100)}=35
#(解析:100主机上的根分区使用率如果最近两次时间间隔在100内被监控到的值大于35 则触发器将会被触发)

#关键点解释:
- 表达式设置:
1)监控项:我前面建立的控制项我们可以通过此处进行选择(比如RootPartitionUsed),使用通过选择触发器定义被监控项的阈值;
2) 功能:一些处理调用监控项阈值处理的函数,比如(avg平均值,last最后值)
3) 计数:指出现超过指的次数(与时间间隔相互影响)
4) 间隔:设置单位时间实际为了统计出现超过数值的次数;
5) 设置上面采集处理过的数据进行比较的数值,超过则将触发;

- URL :当我们收到报警信息时,可以通过url快速的定位到触发器所对应的监控项,我们可以把对应监控项的"最新数据"对应的图形链接填入url处,我们还可以为触发器定义"严重性",其实就是这个触发器所对应的问题优先级,颜色越深,严重性越大
- 多重问题事件:表示触发器如果处于 Problem 状态,则重复的生成对应的 问题事件,一般不勾选此项。
- 依赖关系:因为现在并没有定义其他触发器,所以我们无法定义触发器的依赖关系过;

WeiyiGeek.

然后我们能在监控最新数据中进行看见,触发的条件表达式:
WeiyiGeek.显示触发条件



(6)Zabbix触发器语法详解
我们在建立好触发器规则后可以在 配置 -> 主机 -> 触发器中看见;
WeiyiGeek.触发器规则
其实,上面的5个部分我们可以通过如下语法表示,如下语法描述了一个触发器的条件表达式的基本结构。

#语法:
{<server>:<key>.<function>(<parameter>)}<operator><constant>

#示例:
{data1.weiyigeek.com:vfs.fs.size[/,pused].last(#2)}>35

#Server:代表主机名称;
#key:代表监控主键名称;
#function:代表对监控的阙值进行处理的函数;
#parameter : 函数的参数指定次数和时间间隔
#operator:常用的比较操作符或者运算操作符;
#constant:用于设置控制项对应的阙值;

#function 详细说明:
last(#2) 被称作一个带有参数的函数,last()被我们称之为函数,#2就是其参数【获取监控项最后几次】
#但是需要注意last(0)的含义与last(#1)的含义相同,都表示最近一次

比如avg(#10),则表示最近10次监控项的值的平均值,如果参数值前面没有"#"作为前缀,则表示时间,
比如sum(300),表示300秒内监控项的值的总和,max(#20)则表示最近20次监控项的值的最大值,
比如min(600)则表示最近10分钟内监控项的值的最小值,

#有的函数还支持使用第二个参数,
比如avg(1h,1d) ,表示一天前的一小时内的监控项的值的平均值,假设现在的时间是5点avg(1h)可以理解为4点到5点之间的监控项的值的平均值,而avg(1h,1d) 中的1d表示时间偏移量,那么avg(1h,1d)可以理解为昨天4点到5点的监控项的值的平均值。



(7)Zabbix报警
Q:当zabbix中的某些被监控指标出现异常时,zabbix会通过哪种方式通知运维攻城狮呢?
zabbix支持的报警媒介如下:

  • Email邮件:这是最常用也是最传统的一种报警媒介邮件报警,zabbix通过配置好的SMTP邮件服务器向用户发送对应的报警信息。
  • Script脚本: 当zabbix中的某些监控项出现异常时,也可以调用自定义的脚本进行报警。
  • SMS短信 : 如果想要使用短信报警,则需要依赖短信网关(貌似需要北美的运行商)。
  • Jabber:即时通讯服务。
  • Ez Texting:商业的收费的短信服务(北美运营商提供服务)。

我们如何进行设置zabbix报警,从上面几种方式中可以看出Email和Script才是我们最好的选择,Email方式很简单这里不多说,主要解释使用的Script脚本:
WeiyiGeek.EMAIL
实战实战:

Step1. 菜单[管理] -> 选项卡[报警媒介类型] -> 创建媒体类型
Step2. 设置名称 | 类型[选择脚本] | 脚本名称 | 脚本参数根据需求进行添加(添加三个参数)
#比如这里我们使用脚本来发送信息
Alarm.sh

#!/bin/bash
to=$1
subject=$2
body=$3
cat <<EOF | mail -s "$subject" "$to"
$body
EOF


#Step 3. 然后编辑/etc/mail.rc 搜狐邮箱完美解决
set from=发件人邮箱
set smtp=smtp服务器
set smtp-auth-user=发件人邮箱账户
set smtp-auth-password=发件人邮箱账户密码
set smtp-auth=login

Step4. 编写好了脚本之后,我们还需要将我们编写的脚本放入zabbix默认的脚本目录中
$ cat /etc/zabbix/zabbix_server.conf #配置文件中可以看见
#通过AlertScriptsPath属性,可以配置报警脚本的指定位置(建议/tmp/),zabbix会去对应目录中查找报警脚本。
$ mv Alarm.sh /usr/lib/zabbix/alertscripts

Step5. 在报警媒介类型页面进行添加脚本参数 (注意建议放在/tmp/防止权限问题)
{ALERT.SENDTO}, {ALERT.SUBJECT} and {ALERT.MESSAGE} 宏 在脚本参数中是支持的Zabbix 3.0支持自定义脚本参数.

AllowRoot=0
User=zabbix

Step6. 设置成功后进行测试发信;

WeiyiGeek.报警配置

其实这种由大括号括起,并且由大写字母组成的字符串在zabbix中被称作”宏”,我们可以理解为zabbix内置的变量,当不同的警告发生时,上述的三个”宏”的值会自动发生变化。
宏列表:https://www.zabbix.com/documentation/4.2/manual/appendix/macros/supported_by_location

但是如果想要某个zabbix用户能够接收到从”MailScript报警媒介”发送过来的报警,还需要进一步配置:
比如当”Admin”用户想要通过”MailScript”报警媒介接收警报时,则必须能够”适配”这种媒介,如果”Admin”用户没有使用”MailScript媒介”的能力,那么”Admin”用户将无法接收到由”MailScript媒介”发出的报警信息。

Q:我们应该怎样让用户能够对应的报警媒介呢?
配置步骤如下:确定无误后,点击”更新”按钮【重点】
WeiyiGeek.用户报警触发



(8)Zabbix动作设置
当我们设置得触发器被触发得时候,将会根据我们运维人员得设置进行执行相应得动作;
实战实战:

Step1. 配置 -> 动作 -> 创建动作
Step2. [动作] -> 动作 -> 设置动作名称 -> 选择触发器和条件 -> 点击触发器下面得添加
Step3. [动作] -> 动作 -> 设置操作(显示发送的信息等待,与持续时间) -> 设置操作细节 -> 仅送到(我们的脚本) -> 注意【也必须点击添加】
Step4. 更加需求设置恢复操作和更新操作(设置与step3相似)

WeiyiGeek.添加动作

WeiyiGeek.动作操作

动作添加成功:
WeiyiGeek.动作添加成功

超过阈值触发动作然后发送email到邮箱之中:
WeiyiGeek.

0x04 Zabbix实战配置

(1)Zabbix自动发现之fping
Zabbix自动发现功能从配置流程上比较简单:Discovery与Action。
在做Zabbix的自动发现验证时也可使用”ICMP ping”的check方式时进行自动发现;

步骤流程:

Step1. 配置 -> 自动发现 -> 创建自动发现规则 -> 设置关规则名称 / IP范围 -> 添加ICMP ping类型(必须点添加否则不能成功)

Step2. 配置zabbix_server.conf文件进行取消fping注释
cat /etc/zabbix/zabbix_server.conf | grep -n "fping"
535:# FpingLocation=/usr/sbin/fping
/usr/sbin/fping #取消注释

Step3. 配置 -> 主机 -> 创建主机 -> 输入创建信息 -> ICMP-check -> 创建

Step4. 选择刚才创建的主机IMCP-check那一行中的自动发现 -> 创建发现规则
#ICMP-Check 应用集 监控项 触发器 图形 自动发现 Web监测 127.0.0.1: 10050 已启用 zbxsnmpjmxipmi

Step5. 设置权限fping
chown root:root /usr/sbin/fping
chmod u+s /usr/sbin/fping

WeiyiGeek.自动发现ICMP

检测成功:
WeiyiGeek.ICMP发现



(2)Zabbix之模板创建和使用
使用模板能根据简化我们的监控操作,多个主机/群可以应用一个模板包括(触发器/动作/图形)等;
zabbix模板下载:https://github.com/monitoringartist/zabbix-searcher

假如我们需要监控agent机器上网卡的出入口流量:

[[email protected] tmp]$ zabbix_get -s 192.168.1.100 -k net.if.in[eth6,bytes]
170914

#监控网络流量的流程为:
1. 配置 -> 模板 -> 创建模板 -> 输入模板名称于选择群组 -> 应用集 -> 创建应用集

2. 应用集建立后 -> 创建监控项 -> 设置监控项键值
net.if.in[if,<mode>] 网络接口上传流量统。返回 整数

3. 就可以在监控最新数据中查看最新的数据

WeiyiGeek.创建模板

设置监控项:
WeiyiGeek.设置监控项

我们将模板应用到主机之中:
WeiyiGeek.模板应用
WeiyiGeek.展现效果


0x0n Zabbix入坑配置

(1)安装的zabbix3.0.X无法看到中文选项?
解决:

  • /usr/share/zabbix/include/locales.inc.php 找到中文对应的值,将显示属性设置为true即可;
  • 切换后中文显示还是乱码则将,将微软雅黑字体msyh.ttf传入到zabbix web的默认字体目录为/usr/share/zabbix/fonts,,并修改include目录下defines.inc.php中将graphfont.ttf字体改成我们上传的字体调用;
  • define(‘ZBX_FONT_NAME’, ‘msyh_boot’);
  • define(‘ZBX_GRAPH_FONT_NAME’, ‘msyh_boot’); // font file name


(2)访问控制台出现得问题
WeiyiGeek.program
产生原因:

  • zabbix-server 未正常启动
  • 已开启selinux但是没有正常设置对应权限
  • zabbix-server未正常连接数据库
  • azbbix.conf.php文件中$ZBX_SERVER参数对应得主机名不能正常解析
  • 其他原因需要查看zabbix_server日志


(3)主机发现问题?
10608:20190424:005029.559 cannot send list of active checks to “192.168.1.100”: host [zabbix.weiyigeek.com] not found
10608:20190424:005100.828 cannot send list of active checks to “192.168.1.101”: host [zabbix.weiyigeek.com] not found
检查项:server端自动发现已经开启,zabbix-server端和agend端防火墙和selinux全部关闭,监听端口全部正常,怀疑是服务器解析存在问题,在vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.100 Master-data1 #这里非常关键(自动发现好要设置)
192.168.2.101 Master-data2
192.168.1.99 zabbix.weiyigeek.com

WeiyiGeek.主机发现



(4)主机自动发现设置ICMP ping形式不起作用
原因:”ICMP ping”的check方式,使用/usr/sbin/fping命令检测状态,如果系统没有安装或fping命令执行路径有误,则check方式不能发现设备,自动发现功能失效。

#解决流程
#1.下载fping

#2.zabbix_server配置文件中默认fping的执行路径被注释掉了,此时默认路径就为:
535:# FpingLocation=/usr/sbin/fping
/usr/sbin/fping #取消注释

#3.配置fping执行路径
sed -i 's|# FpingLocation=/usr/sbin/fping|FpingLocation=/usr/local/sbin/fping|g' /usr/local/zabbix/etc/zabbix_server.conf

#4. 配置fping权限
#如果是root账号安装的fping,可以不用修改owner
#但zabbix_server是使用zabbix账号调用命令的,可以为fping设置SUID权限,如下:
chown root:root /usr/local/sbin/fping
chmod u+s /usr/local/sbin/fping



(5)zabbix-web密码忘记修改?
解决办法:

#数据库中执行
update users set passwd=md5('newpassword') where userid = '1';



(6)对于开启防火墙如何让zabbix-agent进行正常连接

#开启10050、10051的TCP和UDP端口
vi /etc/sysconfig/iptables #编辑防火墙配置文件
-A INPUT -s 192.168.21.127 -m state --state NEW -m tcp -p tcp --dport 10050:10051 -j ACCEPT
-A INPUT -s 192.168.21.127 -m state --state NEW -m udp -p udp --dport 10050:10051 -j ACCEPT
:wq! #保存退出
service iptables restart #重启防火墙使配置生效



(7)Windows平台下agent客户端链接报错
错误信息:

9804:20190507:125038.686 no active checks on server [192.168.56.101:10051]: host [zabbix.weiyigeek.com] not found
failed to accept an incoming connection: connection from "10.10.107.112" rejected, allowed hosts: "192.168.56.101"

#原因:由于HOSTNAME与zabbix创建的主机名称不一致导致,没有将主机名称写入到hosts文件之中
#解决方法:编辑agent的配置文件将hostname修改为zabbix主机一致的名称
Hostname=Windows7

WeiyiGeek.windows7