一、环境准备
centos7.5 系统服务器3台、 一台作为监控服务器, 两台台作为被监控节点, 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信。
主机名 | ip | 服务 |
---|---|---|
zabbix-server | 192.168.94.141 | zabbix-server |
zabbix-agent1 | 192.168.94.142 | zabbix-agent |
zabbix-agent2 | 192.168.94.143 | zabbix-agent |
所有机器关闭防火墙和selinux
[root@zabbix-master ~]# systemctl stop firewalld && setenforce 0(修改配置文件关闭)
[root@zabbix-agent1 ~]# systemctl stop firewalld && setenforce 0
[root@zabbix-agent2 ~]# systemctl stop firewalld && setenforce 0
# 必要时可永久关闭或开启相应的端口
二、Zabbix的安装
1)更新yum仓库
我们去官网下载一个包zabbix-release-4.4-1.el7.noarch.rpm
,本地安装至我们的虚拟机,这样,我们本地就有了新的yum源,可以直接安装zabbix服务:
下载安装官方yum源
[root@zabbix-server ~]# rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
[root@zabbix-server ~]# yum clean all
[root@zabbix-server ~]# yum makecache fast
已加载插件:fastestmirror
正在清理软件源: base extras updates zabbix zabbix-non-supported
更新yum仓库:
[root@zabbix-server ~]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
zabbix-non-supported 4/4
repo id repo name status
base base 9,363
epel epel 11,349
zabbix/x86_64 Zabbix Official Repository - x86_64 80
zabbix-non-supported/x86_64 Zabbix Official Repository non-supported - 4
repolist: 20,796
安装:
[root@zabbix-server ~]# yum -y install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-proxy-mysql zabbix-java-gateway zabbix-nginx-conf
#如果上面安装报错
[root@zabbix-server ~]# vim /etc/yum.repo.d/zabbix.repo #更换国内源
[zabbix]
name=Zabbix Official Repository - $basearch
#baseurl=http://repo.zabbix.com/zabbix/4.0/rhel/7/$basearch/
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/ # 这里我们换成阿里云的yum源
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
#baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/
baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/ #换了上面Zabbix的安装源地址,其组件地址也要记得换!
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
[root@zabbix-server ~]# yum clean all
[root@zabbix-server ~]# yum -y install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-proxy-mysql zabbix-java-gateway zabbix-nginx-conf
或者(官方)
[root@zabbix-server ~]# yum-config-manager --enable rhel-7-server-optional-rpms
2)安装设置数据库:
1、创建 mariadb.repo
[root@zabbix-server ~]# vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
2、yum 安装最新版本 mariadb
[root@zabbix-server ~]# yum -y install mariadb mariadb-server
修改配置文件:/etc/my.cnf.d/server.cnf
[root@zabbix-server ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
skip_name_resolve = ON #跳过主机名解析
innodb_file_per_table = ON #
innodb_buffer_pool_size = 256M #缓存池大小
max_connections = 2000 #最大连接数
log-bin = master-log #开启二进制日志
[root@zabbix-server ~]# systemctl start mariadb
[root@zabbix-server ~]# systemctl enable mariadb
3、创建数据库并授权账号
MariaDB [(none)]> create database zabbix character set 'utf8'; # 创建zabbix数据库
MariaDB [(none)]> grant all on zabbix.* to 'zabbix'@'192.168.94.%' identified by "123";
# 注意授权网段
MariaDB [(none)]> flush privileges;
4、导入表
首先,查看一下,zabbix-server-mysql这个包提供了什么:
[root@zabbix-server ~]# rpm -ql zabbix-server-mysql | grep sql
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-4.4.4
/usr/share/doc/zabbix-server-mysql-4.4.4/AUTHORS
/usr/share/doc/zabbix-server-mysql-4.4.4/COPYING
/usr/share/doc/zabbix-server-mysql-4.4.4/ChangeLog
/usr/share/doc/zabbix-server-mysql-4.4.4/NEWS
/usr/share/doc/zabbix-server-mysql-4.4.4/README
/usr/share/doc/zabbix-server-mysql-4.4.4/create.sql.gz #生成表的sql文件
我们来使用这个文件生成我们所需要的表:
[root@zabbix-server ~]# cd /usr/share/doc/zabbix-server-mysql-4.4.4/
[root@zabbix-server zabbix-server-mysql-4.4.4]# ls
AUTHORS ChangeLog COPYING create.sql.gz NEWS README
[root@zabbix-server zabbix-server-mysql-4.4.4]# gzip -d create.sql.gz
[root@zabbix-server zabbix-server-mysql-4.4.4]# ls
AUTHORS ChangeLog COPYING create.sql NEWS README
[root@zabbix-server zabbix-server-mysql-4.4.4]# head create.sql
CREATE TABLE `users` (
`userid` bigint unsigned NOT NULL,
`alias` varchar(100) DEFAULT '' NOT NULL,
`name` varchar(100) DEFAULT '' NOT NULL,
`surname` varchar(100) DEFAULT '' NOT NULL,
`passwd` varchar(32) DEFAULT '' NOT NULL,
`url` varchar(255) DEFAULT '' NOT NULL,
`autologin` integer DEFAULT '0' NOT NULL,
`autologout` varchar(32) DEFAULT '15m' NOT NULL,
`lang` varchar(5) DEFAULT 'en_GB' NOT NULL,
我们查看表头发现没有创建数据库的命令,这也正是我们刚刚手动创建数据库的原因。
然后,我们直接把这个表导入至我们的数据库即可:
[root@zabbix-server zabbix-server-mysql-4.4.4]# mysql -uzabbix -p123 -h 192.168.94.141 zabbix < create.sql
导入以后,进入数据库查看一下:
[root@zabbix-server ~]# mysql -uzabbix -p123 -h192.168.94.141
MariaDB [(none)]> use zabbix
MariaDB [zabbix]> show tables;
+----------------------------+
| Tables_in_zabbix |
+----------------------------+
| acknowledges |
| actions |
| alerts |
| application_discovery |
| application_prototype |
......
| users_groups |
| usrgrp |
| valuemaps |
| widget |
| widget_field |
+----------------------------+
149 rows in set (0.001 sec)
可以看出来,数据已经导入成功了。
三、配置 server 端
数据库准备好了以后,就要去修改server端的配置文件了。
[root@zabbix-server ~]# cd /etc/zabbix/
[root@zabbix-server zabbix]# ls
web zabbix_java_gateway.conf zabbix_server.conf
zabbix_agentd.conf zabbix_java_gateway_logback.xml
zabbix_agentd.d zabbix_proxy.conf
[root@zabbix-server zabbix]# cp zabbix_server.conf{,.bak}
[root@zabbix-server zabbix]# vim zabbix_server.conf
ListenPort=10051 #默认监听端口
SourceIP=192.168.94.141 #发采样数据请求的IP
为什么要设置SourceIP,由于我们的客户端可能一个主机多个IP,我们又不能允许任意的IP都能从我们这里读取数据,就会有一个验证方式,而该方式是基于识别SourceIP来实现的。
日志,默认用文件记录,也可以发送给我们的rsyslog日志记录系统,如果我们选择默认,则日志存放在LogFile=/var/log/zabbix/zabbix_server.log中,也可以自己设置。
日志的滚动。默认值为1,表示滚动。我们设为0则表示不滚动。当数据特别多的时候,我们也可以设置成为1,然后在Maximum size of log file in MB设置当数据文件最大到多少时会自动滚动。
日志的级别。一共有6个级别。我们可以根据自己的需要来设置级别。其中0表示输出最少的信息,5表示输出最详细的信息,默认值为3,设置为3的话就表示,0、1、2、3四个级别都显示。考虑到生产系统中的压力时,这里的信息,如果没有必要的话,越简单越好,只要在出错的时候,我们可以依据其进行排错即可。
数据库相关的设置:
DBHost=192.168.94.141 #数据库对外的主机
DBName=zabbix #数据库名称
DBUser=zabbix #数据库用户
DBPassword=123 #数据库密码
DBPort=3306 #数据库启动端口
补充:可以使用grep -i "^####" zabbix_server.conf来查看配置文件中有哪些大段,也可以使用grep -i "^###" zabbix_server.conf来查看配置文件中每一段中的配置项有哪些
开启服务:
[root@zabbix-server zabbix]# systemctl start zabbix-server.service
确认一下我们的端口有没有开启:
[root@zabbix-server zabbix]# ss -lnta | grep 10051
LISTEN 0 128 *:10051 *:*
LISTEN 0 128 :::10051 :::*
如果查到的端口没有开启,就要去检查一下配置文件有没有出问题。
至此,server端的进程启动已经ok了,接下来就可以使用web GUI来打开接口进行设定了
四、配置 web GUI
查看web GUI的配置文件在哪里:
[root@zabbix-server ~]# rpm -ql zabbix-web | less
/etc/httpd/conf.d/zabbix.conf
/etc/zabbix/web
/etc/zabbix/web/maintenance.inc.php
/etc/zabbix/web/zabbix.conf.php
/usr/share/doc/zabbix-web-4.4.4
/usr/share/doc/zabbix-web-4.4.4/AUTHORS
/usr/share/doc/zabbix-web-4.4.4/COPYING
/usr/share/doc/zabbix-web-4.4.4/ChangeLog
/usr/share/doc/zabbix-web-4.4.4/NEWS
/usr/share/doc/zabbix-web-4.4.4/README
/usr/share/zabbix
/usr/share/zabbix/actionconf.php
/usr/share/zabbix/adm.gui.php
/usr/share/zabbix/adm.housekeeper.php
/usr/share/zabbix/adm.iconmapping.php
/usr/share/zabbix/adm.images.php
/usr/share/zabbix/adm.macros.php
……
可以看出,有一个/etc/httpd/conf.d/zabbix.conf文件,这个配置文件就是帮我们做映射的文件,我们可以去看一看这个文件:
Alias /zabbix /usr/share/zabbix #我们访问的时候要在主机后加上/zabbix来访问我们这个服务
时区是一定要设置的,这里被注释掉是因为,我们也可以在php的配置文件中设置时区,如果我们在php配置文件中设置时区,则对所有的php服务均有效,如果我们在zabbix.conf中设置时区,则仅对zabbix服务有效。所以,我们去php配置文件中设置我们的时区:
[root@zabbix-server ~]# vim /etc/php.ini
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Shanghai
接下来,启动httpd服务:
[root@zabbix-server ~]# systemctl start httpd.service
[root@zabbix-server ~]# ss -nutl | grep :80
tcp LISTEN 0 128 :::80 :::*
五、浏览器访问并进行初始化设置
我们使用浏览器访问192.168.94.141/zabbix,第一次访问时需要进行一些初始化的设置,我们按照提示操作即可:
点击Finish以后,我们就会跳转到登录页面,使用默认的账号密码登录即可:
默认账号:admin
默认密码:zabbix
登陆进来就可以看到我们的仪表盘了:
切换中文:
六、配置 agent 端
当我们把监控端配置启动以后,我们需要来设置一下我们的监控端,我们在被监控的主机安装好agent,设置好他的server,并把他添加到server端,就能将其纳入我们的监控系统中去了。
1)安装 zabbix
同样的,我们先来安装zabbix。下载包,注释epel源,安装所需的包。具体步骤如下:
下载安装官方yum源
[root@zabbix-agent1 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
[root@zabbix-agent1 ~]# yum clean all
[root@zabbix-agent1 ~]# yum makecache fast
已加载插件:fastestmirror
正在清理软件源: base extras updates zabbix zabbix-non-supported
# yum 下载
[root@zabbix-agent1 ~]# yum install zabbix-agent zabbix-sender -y
安装完成以后,修改配置文件。
2)修改配置文件
先查一下包内有什么:
[root@zabbix-agent1 ~]# rpm -ql zabbix-agent
/etc/logrotate.d/zabbix-agent
/etc/zabbix/zabbix_agentd.conf
/etc/zabbix/zabbix_agentd.d
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
/usr/lib/systemd/system/zabbix-agent.service
/usr/lib/tmpfiles.d/zabbix-agent.conf
/usr/sbin/zabbix_agentd
/usr/share/doc/zabbix-agent-4.4.4
/usr/share/doc/zabbix-agent-4.4.4/AUTHORS
/usr/share/doc/zabbix-agent-4.4.4/COPYING
/usr/share/doc/zabbix-agent-4.4.4/ChangeLog
/usr/share/doc/zabbix-agent-4.4.4/NEWS
/usr/share/doc/zabbix-agent-4.4.4/README
/usr/share/man/man8/zabbix_agentd.8.gz
/var/log/zabbix
/var/run/zabbix
对配置文件做一个备份,然后去修改配置文件:
[root@zabbix-agent1 ~]# cd /etc/zabbix/
[root@zabbix-agent1 zabbix]# ls
zabbix_agentd.conf zabbix_agentd.d
[root@zabbix-agent1 zabbix]# cp zabbix_agentd.conf{,.bak}
[root@zabbix-agent1 zabbix]# vim zabbix_agentd.conf
重点需要修改的仍然是GENERAL PARAMETERS段:
是否允许别人执行远程操作命令,默认是禁用的,打开的话会有安全风险。
Server=192.168.94.141 #指明服务器是谁
ListenPort=10050 #自己监听的端口
ListenIP=0.0.0.0 #自己监听的地址,0.0.0.0表示本机所有地址
StartAgents=3 #优化时使用的
ServerActive=192.168.94.141 #主动监控时的服务器
Hostname=agent1 #自己能被server端识别的名称
修改完成之后,我们保存退出。然后就可以启动服务了:
[root@zabbix-agent1 zabbix]# systemctl start zabbix-agent
[root@zabbix-agent1 zabbix]# netstat -lntp | grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 15909/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 15909/zabbix_agentd
agent2同样操作,但是主机名不能一样
接着,就可以去server端添加了。
七、监控过程详解
1)修改密码
2)创建主机及主机群组
先定义一个主机群组:
然后就可以去添加主机了:
当然,上面有很多选择卡,有一个加密:
添加完成后,就能在列表中看到这个主机了
再把agent2也添加进来
3)监控项(items)
创建模板 > 创建应用集 > 创建监控项
① 首先我们创建一个模板
给模板取一个名字绑定群组
创建好了之后就会出现在列表里
② 创建应用集
点击应用集
创建应用集
给应用集取一个名字,一般根据功能取易识别的就好
好了,现在就是在agent模板下,建立了一个CPU应用集
③ 创建监控项
点击监控项
任何一个被监控项,如果想要能够被监控,一定要在zabbix-server端定义了能够连接至zabbix-agent端,并且能够获取命令。或者在agent端定义了能够让server端获取命令。一般都是内建的命令,都对应的有其名字,被我们称之为key。
关于key值,我们可以直接在网页上设置(服务器自动执行),也可以使用命令行命令(手动执行)来获取:
[root@zabbix-server ~]# zabbix_get -s 192.168.94.142 -p 10050 -k "system.cpu.intr"
在我们的agent端,也可以使用命令来查看intr的速率变化:
这里定义了一个不带参数的监控项"system.cpu.intr"
设置完以后,点击添加,即可加入,并会自动跳转至下图页面:
然后点击配置,主机回到下面这个页面,去给主机绑定我们刚才创建好的模板
④ 绑定模板
点击agent1
然后点击更新,等待5秒,我们可以看到,我们agent1节点后面的选项已经有变成绿色的了:
我们也可以回到我们的仪表盘,可以看到,我们的监控项有一个处于启用状态:
那么,我们的数据在哪里呢?可以点击最新数据,把我们的主机群组添加进来,应用一下,就可以看到下面的状态了:
可以看到,我们还有一个图形页面,点进去则可以看图形的分布:
然后我们发现切换中文之后,下面有些字体乱码
事实上,我们关注的指标有很多种,我们一一添加进来即可。
刚刚我们定义的监控项是很简单的,指定一个key即可,但是有些监控项是带有参数的,这样一来,我们的监控项就有更多的灵活性。接下来,我们来简单说明一个需要带参数的监控项:
⑤ 定义一个带参数的监控项
这一次我们定义的监控项,不绑定模板,不指定应用集,也就是说它只是针对某一个主机设定的监控项
图中的[]就是需要参数的意思,里面的值即为参数,带<>为不可省略的。我们就以这个例子来说明:
if表示是接口名;<mode>表示是那种模式,包括但不限于:packets(包)、bytes(字节)、errors(错误)、dropped(丢包)、overuns等等(上述内容通过ifconfig查看)
我们来设置一下这个监控值:
同样的,我们也可以通过命令行来查看:
[root@zabbix-server ~]# zabbix_get -s 192.168.94.143 -p 10050 -k "net.if.in[ens32,packets]"
1739
我们发现agent2也亮了起来
接着我们去查看一下图形
⑥ 快速定义类似指标
如果我们想要定义一个类似的指标,我们可以直接选择克隆,然后简单的修改一点点参数即可。
就以我们刚刚定义的net.if.in[ens33,packets]为例,如果我们想要在定义一个out的进行如下操作即可:
只需要修改这两个地方就可以
然后点击添加,就可以看到列表中就有了我们刚才添加的监控项
我们来到 检测中 ---> 最新数据,可以看到,我们定义的监控项都已经有值了:
⑦ 删除监控项
如果有一个监控项,我们用不上了,就可以删除掉。但是如果你直接删除的话,默认数据是会留下的,所以我们要先清除数据,然后再删除,具体操作步骤如下:
⑧ 监控项存储的值
对于监控项存储的值,老一点的版本只有以下三种方式:
- As is:不对数据做任何处理(存储的为原始值)
- Delta:(simple change)(变化),本次采样减去前一次采样的值的结果
- Delta:(speed per second)(速率),本次采样减去前一次采样的值,再除以经过的时长;
而在3.4版本以后有了更多的表现形式:
4)触发器(trigger)
① 简介
当我们的采集的值定义完了以后,就可以来定义触发器了。
我们触发器的定义是:界定某特定的item采集到的数据的非合理区间或非合理状态。通常为逻辑表达式。
逻辑表达式(阈值):通常用于定义数据的不合理区间,其结果如下:
OK(不符合条件):正常状态 --> 较老的zabbix版本,其为FALSE;
PROBLEM(符合条件):非正常状态 --> 较老的zabbix版本,其为TRUE;
一般,我们评定采样数值是否为合理区间的比较稳妥的方法是——根据最后N次的平均值来判定结果;这个最后N次通常有两种定义方式:
- 最近N分钟所得结果的平均值
- 最近N次所得结果的平均值
而且,我们的触发器存在可调用的函数:
nodata() #是否采集到数据,采集不到则为异常
last() #最近几次的平均值
date()
time()
now()
dayofmonth()
...
注:能用数值保存的就不要使用字符串
② 触发器表达式
基本的触发器表达式格式如下所示
{<server>:<key>.<function>(<parameter>)}<operator><constant>
- server:主机名称;
- key:主机上关系的相应监控项的key;
- function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采取的数据、当前时间及其它因素进行;
- 目前,触发器所支持的函数有avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum等
- parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用“#”做为前缀,则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;
- 此外,avg、count、last、min和max还支持使用第二个参数,用于完 成时间限定;例如,max(1h,7d)将返回一周之前的最大值;
表达式所支持的运算符及其功能如下图所示:
③ 定义一个触发器
我们可以查看一下,agent1的cpu_status监控项,并以其为标准确定我们的非正常的值:
图中我们可以看出,我们的最大值为105,最小值为47,平均值为58。这样的话,我们可以定义110以上的都是非正常的值,这里为了测试定义为50。
下面我们来定义一个触发器:
进入:配置 ---> 主机 ---> agent1 ---> 触发器 ---> 创建触发器
触发表达式设置
恢复表达式设置
生成完毕后,我们就点击页面下方的添加,即成功定义了一个触发器,同时页面自动跳转:
看见仪表盘已经有了警告信息
然后我们去看一下我们刚刚定义了触发器的那个监控项:
我们可以看出,这个里面就有了一根线,就是我们刚刚定义的值,超过线的即为异常状态,看起来非常直观。
但是,现在即使超过了这根线,也仅仅会产生一个触发器事件而不会做其他任何事。因此,我们就需要去定义一个动作(action)。
④ 触发器的依赖关系
我们的触发器彼此之间可能会存在依赖关系的,一旦某一个触发器被触发了,那么依赖这个触发器的其余触发器都不需要再报警。 我们可以来试想一下这样的场景:
我们的多台主机是通过交换机的网络连接线来实现被监控的。如果交换机出了故障,我们的主机自然也无法继续被监控,如果此时,我们的所有主机统统报警……想想也是一件很可怕的事情。要解决这样的问题,就是定义触发器之间的依赖关系,当交换机挂掉,只它自己报警就可以了,其余的主机就不需要在报警了。这样,也更易于我们判断真正故障所在。
注意:目前zabbix不能够直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义。
我们来简单举一个例子,示范一下如何定义一个依赖关系:
打开任意一个触发器,上面就有依赖关系,我们进行定义即可:
触发器可以有多级依赖关系,比如我们看下面的例子: