一、Zabbix简介
1、Zabbix架构
1.1、server-client架构
server-client架构也是zabbix的最简单的架构,监控机和被监控机之间不经过任何代理 ,直接由zabbix server和zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境 。
1.2、server-proxy-client架构
server-proxy-client架构其中proxy是server、client之间沟通的一个桥梁,proxy本身没有前端,而且其本身并不存放数据,只是将agentd发来的数据暂时存放,而后再提交给server 。一般适用于跨机房、跨网络的中型网络架构的监控master-node-client。
2、Zabbix的优缺点
优点
开源,无软件成本投入。
Server 对设备性能要求低。
支持设备多,自带多种监控模板。
支持分布式集中管理,有自动发现功能,可以实现自动化监控。
当监控的 item 比较多服务器队列比较大时可以采用被动状态,被监控客户端主动 从server 端去下载需要监控的item 然后取数据上传到 server 端。 这种方式对服务器的负载比较小。
Api 的支持,方便与其他系统结合。
缺点
需在被监控主机上安装 agent,所有数据都存在数据库里, 产生的数据很大,瓶颈主要在数据库。
Zabbix可以监控的对象
IPMI:智能平台管理接口(Intelligent Platform Management Interface)IPMI 能够横跨不同的操作系统、固件和硬件平台,可以智能的监视、控制和自动回报大量服务器的运作状况,以降低服务器系统成本。
SNMP:网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机等)的一种标准协议,它是一种应用层协议。
3、Zabbix组件
zabbix的监控方式可分为两种模式
被动模式和主动模式
Server
- Zabbix server 是agent程序报告系统可用性、系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。
数据库存储
- 所有配置信息和Zabbix收集到的数据都被存储在数据库中。
Web界面
- 为了从任何地方和任何平台都可以轻松的访问Zabbix, 我们提供基于Web的Zabbix界面。该界面是Zabbix Server的一部分,通常跟Zabbix Server运行在同一台物理机器上。
Proxy 代理服务器
- Zabbix proxy 可以替Zabbix Server收集性能和可用性数据。Zabbix Proxy是一个可以从一个或多个受监控设备收集监控数据,并将信息发送到Zabbix sever,基本上是代server工作的。所有收集的数据都在本地进行缓存,然后传送到proxy所属的Zabbix sever。部署Proxy是可选的,但是可能非常有益于分散单个Zabbix sever的负载。如果只有proxy收集数据,sever上的进程就会减少CPU消耗和磁盘I / O负载。Zabbix proxy是完成远程区域、分支机构、没有本地管理员的网络的集中监控的理想解决方案。Zabbix proxy需要使用独立的数据库。
Agent监控代理
- Zabbix agents监控代理 部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix Server。
数据流
- 监控方面,为了创建一个监控项(item)用于采集数据,必须先创建一个主机(host)。告警方面,在监控项里创建触发器(trigger),通过触发器(trigger)来触发告警动作(action)。 因此,如果你想收到Server XCPU负载过高的告警,你需要:1、为Server 创建一个host并关联一个用于对CPU进行监控的监控项(Item)。2、创建一个触发器Trigger,设置成当CPU负载过高时会触发。3、Trigger被触发,发送告警邮件 。
4、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、前端 (frontend)
- Zabbix提供的web界面
11、Zabbix server
- Zabbix软件实现监控的核心程序,主要功能是与Zabbix server和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等
12、Zabbix agent
- Zabbix agent部署在监控的目标上,主动监测本地的资源和应用(硬件,内存,处理器统计等)。 Zabbix agent收集本地的操作信息并将数据报告给Zabbix server用于进一步处理。一旦出现异常 (比如硬盘空间已满或者有崩溃的服务进程), Zabbix server会主动警告管理员指定机器上的异常。
二、Centos7部署Zabbix4.0
1、Zabbix部署
1.1、基础环境
IP | 主机名 |
---|---|
192.168.226.128 | zabbix-server |
192.168.226.129 | zabbix-agent1 |
192.168.226.130 | zabbix-agent2 |
使用的是zabbix4.0版本,以下是yum源配置
#三台机器配置zabbix源,zabbix官网速度太慢
[xiaobai@zabbix-server] vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=http://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/$basearch/
enabled=1
gpgcheck=0
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=http://mirrors.tuna.tsinghua.edu.cn/zabbix/non-supported/rhel/7/$basearch/
enabled=1
gpgcheck=0
1.2、Zabbix监控server端搭建
#在server机器上操作
[xiaobai@zabbix-server] yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-get
[xiaobai@zabbix-server] yum install -y mariadb mariadb-server
[xiaobai@zabbix-server] systemctl start mariadb
[xiaobai@zabbix-server] systemctl enable mariadb
[xiaobai@zabbix-server] mysqladmin -u root password 'xiaobai' #设置root密码
下面来配置zabbix库的数据
[xiaobai@zabbix-server] mysql -uroot -p'xiaobai'
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin; #创建zabbix数据库
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all on zabbix.* to zabbix@'%' identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> \q
Bye
[xiaobai@zabbix-server] zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Enter password: #输入刚刚授权的zabbix用户的密码
[xiaobai@zabbix-server] mysql -uzabbix -p'zabbix'
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
| zabbix |
+--------------------+
3 rows in set (0.00 sec)
MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> show tables;
+----------------------------+
| Tables_in_zabbix |
+----------------------------+
| acknowledges |
| actions |
|... |
| valuemaps |
| widget |
| widget_field |
+----------------------------+
144 rows in set (0.00 sec)
#数据已经导入到了数据库中了
MariaDB [zabbix]> \q
Bye
配置zabbix-server的配置文件并启动
[xiaobai@zabbix-server] cd /etc/zabbix/
[xiaobai@zabbix-server zabbix] ls
web zabbix_agentd.conf zabbix_agentd.d zabbix_server.conf
[xiaobai@zabbix-server zabbix] cp zabbix_server.conf zabbix_server.conf.bak
[xiaobai@zabbix-server zabbix] vim zabbix_server.conf
DBHost=localhost #数据库对外的主机
DBName=zabbix #数据库名称
DBUser=zabbix #数据库用户
DBPassword=zabbix #数据库密码
#将以上四条配置好,打开注释
[xiaobai@zabbix-server zabbix] systemctl start zabbix-server
[xiaobai@zabbix-server zabbix] systemctl enable zabbix-server
[xiaobai@zabbix-server zabbix] yum -y install net-tools
[xiaobai@zabbix-server zabbix] netstat -lntp | grep 10051
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 10306/zabbix_server
tcp6 0 0 :::10051 :::* LISTEN 10306/zabbix_server
#如果10051端口没有被占用就要检查一下配置文件是不是写错了
[xiaobai@zabbix-server zabbix] vim /etc/httpd/conf.d/zabbix.conf
#在IfModule标签里面添加一行内容
php_value date.timezone Asia/Shanghai
[xiaobai@zabbix-server zabbix] systemctl start httpd
[xiaobai@zabbix-server zabbix] systemctl enable httpd
1.3、测试浏览器访问server端并进行初始化
确定没有问题了,我们来执行下一步,配置被监控端
1.4、Zabbix监控agent端配置
#agent两台机器都要做
[xiaobai@zabbix-agent1] yum -y install zabbix-agent zabbix-sender
[xiaobai@zabbix-agent1] cd /etc/zabbix/
[xiaobai@zabbix-agent1 zabbix] ls
zabbix_agentd.conf zabbix_agentd.d
[xiaobai@zabbix-agent1 zabbix] cp zabbix_agentd.conf zabbix_agentd.bak
[xiaobai@zabbix-agent1 zabbix] vim zabbix_agentd.conf
Server=192.168.226.128 #zabbix服务器的地址
ServerActive=192.168.226.128 #主动模式zabbix-server的ip
Hostname=zabbix-agent1 #本机主机名
UnsafeUserParameters=1 #是否限制用户自定义keys使用特殊字符。1是可以启用特殊字符,0是不可以启用特殊字符
EnableRemoteCommands=0 #是否允许别人执行远程操作命令,默认是禁用的,打开的话会有安全风险.
[xiaobai@zabbix-agent1 zabbix] systemctl start zabbix-agent
[xiaobai@zabbix-agent1 zabbix] systemctl enable zabbix-agent
[xiaobai@zabbix-agent1 zabbix] netstat -lntp | grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 9790/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 9790/zabbix_agentd
被监控端配置好启动后,我们就开始我们的重中之重,启动监控我们的服务器
2、Zabbix页面配置
2.1、设置语言
英语不好的可以到配置里修改为中文
2.2、创建主机及主机群组
输入要添加的主机组名,点下面的添加,之后就可以去添加主机了
确定填写正确后下面的已启用勾上,点添加
同样的操作方法,我们把agent2节点也添加进来
2.3、监控项
2.3.1、没有参数的监控项
点上面的主机
2.3.2、zabbix图形界面乱码问题解决(拓展)
2.3.3、有参数的监控项
刚刚我们定义的监控项是很简单的,指定一个key
即可,但是有些监控项是带有参数的,这样一来,我们的监控项就有更多的灵活性。
应用集只是类似于我们说的群组,可以不创建应用集
[xiaobai@zabbix-server] zabbix_get -s zabbix-agent1 -p 10050 -k "net.if.in[ens33,packets]"
16077
#我在/etc/hosts文件中做过了解析,没做解析的需要在-s后面输入被监控端的ip
2.3.4、快速定义监控项
我们发现,一下一下点着创建监控项还是很麻烦,这里可以直接克隆一个监控项
如果要修改单位
2.3.5、删除监控项
看到监控项有的没用了,我们就可以删掉它,但是如果你直接删除的话,默认数据是会留下的,所以我们要先清除数据,然后再删除,具体操作步骤如下
三、Centos8部署Zabbix4.4(拓展)
我们现在服务器上已经部署了mysql和nginx,也就意味着,我们按照常规的安装mariadb是行不通的了,这里有人会说可以用docker,这的确是个好办法,但是我们这里还是用传统的部署本地的方式部署
1、部署Zabbix4.4
#安装插件
[xiaobai@zabbix] dnf -y install httpd mysql-server php php-mysqlnd php-mbstring php-pdo php-gd #在centos8中你依旧可以使用yum命令
#配置http插件,由于我们部署了nginx,所以80端口已经被占用了
[xiaobai@zabbix] vim /etc/httpd/conf/httpd.conf
Listen #这里改成你要用的端口,默认80
ServerName #这里改成你机器的IP+上面监听的端口
#记得出去要配置防火墙或安全组
[xiaobai@zabbix] vim /etc/php.ini
date.timezone = Asia/Shanghai
#配置mysql-server插件以及mysql数据库
[xiaobai@zabbix] mv /etc/my.cnf.d/ /etc/my.cnf.d.bak/ #这里是mysql-server的配置文件,我们已经有了mysql就不需要了
[xiaobai@zabbix] mysql -uroot -p'XiaoBai@123!'
#创建zabbix数据库
mysql> create database zabbix character set UTF8 collate utf8_bin;
mysql> create user 'zabbix'@'localhost' identified by 'XiaoBai@123!';
mysql> grant all on zabbix.* to 'zabbix'@'localhost';
mysql> flush privileges;
mysql> \q
#安装zabbix源,安装zabbix服务端和客户端
[xiaobai@zabbix] wget https://repo.zabbix.com/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm
[xiaobai@zabbix] dnf -y install zabbix-release-4.4-1.el8.noarch.rpm
[xiaobai@zabbix] dnf makecache
[xiaobai@zabbix] dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent zabbix-sender
[xiaobai@zabbix] zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz |mysql -uzabbix -D zabbix -p'XiaoBai@123!'
#配置zabbix-server端
[xiaobai@zabbix] vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=XiaoBai@123!
DBSocket=/tmp/mysql.sock #这个文件一般都在/tmp下,不知道的可以出去搜一下
#DBSocker配置是mysql和zabbix在同一台机器上,如果mysql和zabbix不在同一台机器上,就用DBHost加DBPort。DBPort和DBSocker只能开启一个,只生效一个
[xiaobai@zabbix] find / -name mysql.sock #查找mysql.sock文件的位置
/tmp/mysql.sock
#配置zabbix-agent端
[xiaobai@zabbix] vim /etc/zabbix/zabbix_agentd.conf
Server=xxx.xxx.xx.xxx #zabbix-server端的IP,被动模式
ServerActive=xxx.xxx.xx.xxx #zabbix-server端的IP,主动模式
Hostname=xxxxx #被监控端的主机名
UnsafeUserParameters=1 #是否限制用户自定义keys使用特殊字符。1是可以启用特殊字符,0是不可以启用特殊字符
EnableRemoteCommands=1 #远程执行操作,1为开启
#开启zabbix以及插件
[xiaobai@zabbix] systemctl start --now httpd.service #83端口
[xiaobai@zabbix] systemctl enable --now httpd.service
[xiaobai@zabbix] systemctl start --now zabbix-server #10051端口
[xiaobai@zabbix] systemctl enable --now zabbix-server
[xiaobai@zabbix] systemctl start --now zabbix-agent #10050端口
[xiaobai@zabbix] systemctl enable --now zabbix-agent
2、访问测试并初始化
访问zabbix-server端的IP加端口后跟/zabbix/
正常操作就好了
这里要注意
这就是zabbix4.4的界面了