Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。
在 IT 企业生产中,对公司各种 IT 资源的监控是非常重要且必须的,规范而有效的监控可以在造成事故是对我们提前预警,避免损失。Zabbix 就是一套比较简单易上手、功能强大的监控系统,下面来看看怎么快速搭建吧。
下图是 Zabbix 现存版本及官方对 Zabbix 版本的维护计划。可以看出,Zabbix 大约每半年会发布一个标准版本,主要是用来修复最近一个版本周期的 bug 以及各种小优化,就目前而言最值得安装的版本应该是 Zabbix 4.0 LTS(4.0 长期支持版本)
先看看 Zabbix 官方提供的参考配置吧:
规模 | 平台 | CPU/内存 | 数据库 | 受监控的主机数量 |
---|---|---|---|---|
小型 | CentOS | Virtual Appliance | MySQL InnoDB | 100 |
中型 | CentOS | 2 CPU cores/2GB | MySQL InnoDB | 500 |
大型 | RedHat Enterprise Linux | 4 CPU cores/8GB | RAID10 MySQL InnoDB 或 PostgreSQL | >1000 |
极大型 | RedHat Enterprise Linux | 8 CPU cores/16GB | Fast RAID10 MySQL InnoDB 或 PostgreSQL | >10000 |
上面表格只做参考,实际使用中建议分配资源要比上面表格更多。
这里是学习使用,使用的是本地的虚拟机(2C2G),CentOS 7.4
下面先看看 Zabbix 架构:
从架构图里很清晰的可以看到,Zabbix 服务需要用到数据库组件,Zabbix 是支持多种数据库的,例如:MySQL、MariaDB、PostgreSQL 等,这里我们选择使用 MySQL。
所以这里我们需要在服务器上安装好 MySQL(如果已经安装可以跳过这步),安装 MySQL 的方法之前写过:CentOS 7 安装 MySQL,其实你如果用 MariaDB 的话操作基本完全一致。
由于某些原因直接使用 Zabbix 官方的仓库可能会有网络超时的问题,我们可以使用清华镜像仓源的。
清华镜像仓库链接:https://mirrors.tuna.tsinghua.edu.cn/
[root@benarchen ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
[root@benarchen ~]# vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=http://repo.zabbix.com/zabbix/4.0/rhel/7/$basearch/ #需要把文中三处 baseurl 修改指向清华源
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
[zabbix-debuginfo]
name=Zabbix Official Repository debuginfo - $basearch
baseurl=http://repo.zabbix.com/zabbix/4.0/rhel/7/$basearch/debuginfo/
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
gpgcheck=1
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
#在末行模式输入下面的命令回车即可,保存后退出
:%s#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g
安装 Zabbix server 并使用 MySQL 数据库:
[root@benarchen ~]# yum install zabbix-server-mysql -y
安装 Zabbix 前端并使用 MySQL 数据库:
[root@benarchen ~]# yum install zabbix-web-mysql -y
到这里主程序就安装好了,下面需要配置数据库。
登入本机已经安装好的 MySQL,创建 zabbix 数据库
mysql> create databases zabbix charset utf8; # MariaDB 用这条命令
mysql> create database zabbix character set utf8 collate utf8_bin; # MySQL 用这条
mysql> grant all on zabbix.* to zabbix@localhost identified by 'Zabbix@123456'; # 这个密码要记住,需要写入配置文件的
导入初始化数据
[root@idreamsky_study ~]# rpm -ql zabbix-server-mysql # 这里会找到官方提供的初始化 SQL
......
/usr/share/doc/zabbix-server-mysql-4.0.20/create.sql.gz
# 把初始化数据导入 zabbix 库,这里也可以把 sql.gz 文件解压后导入,效果都是一样的
[root@benarchen ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.20/create.sql.gz |mysql -uzabbix -p zabbix
Enter password: 这里输入前面设置的密码
数据以及导入好了,现在需要修改 Zabbix-server 的配置文件,因为我们需要指定它去连接我们刚刚创建好的数据库
[root@benarchen ~]# vim /etc/zabbix/zabbix_server.conf
#进入修改四个地方就行了,其实基本不用动的,把前面设置的数据库密码加上就好了
#也就是核对一下下面四个参数
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=Zabbix@123456
下面就可以启动 Zabbix-server 服务了:
[root@benarchen ~]# systemctl start zabbix-server.service # 启动服务
[root@benarchen ~]# systemctl enable zabbix-server.service # 设置开机自启
我这里启动服务后使用 netstat 命令查看端口是否被监听发现监听列表里并未出现 10051(默认端口)
[root@benarchen zabbix]# netstat -tupln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 16334/master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1167/sshd
tcp6 0 0 ::1:25 :::* LISTEN 16334/master
tcp6 0 0 :::3306 :::* LISTEN 16401/mysqld
tcp6 0 0 :::22 :::* LISTEN 1167/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 11746/dhclient
udp 0 0 127.0.0.1:323 0.0.0.0:* 813/chronyd
udp6 0 0 ::1:323 :::* 813/chronyd
然后去查看启动日志
[root@benarchen zabbix]# vim /var/log/zabbix/zabbix_server.log
......
18429:20200514:151652.616 cannot start preprocessing service: Cannot bind socket to "/var/run/zabbix/zabbix_server_preprocessing.sock": [13] Permission denied.
18425:20200514:151652.619 server #26 started [alert manager #1]
18425:20200514:151652.619 cannot start alert manager service: Cannot bind socket to "/var/run/zabbix/zabbix_server_alerter.sock": [13] Permission denied.
在日志里查看到两条比较 “不同寻常” 的,看到 Permission denied 提示,但是我明明是使用 root 权限启动的,这个时候我想到了 SElinux 这个小东西,可能是我没有关闭这个功能从而导致了它对 zabbix 服务拦截,查看后果不其然就是因为它导致 Zabbix-server 无法正常启动,下面是关闭步骤:
#获取当前 selinux 运行模式
[root@CentOS7-dns-master ~]# getenforce
Enforcing
#临时关闭,不需要重启机器
[root@CentOS7-dns-master ~]# setenforce 0
[root@CentOS7-dns-master ~]# getenforce
Permissive
上面是临时关闭的步骤,永久关闭需要修改配置文件,详情见 永久关闭 SELinux,这篇文章第一步就是介绍永久关闭 SELinux 的,这里就不展开了。临时关闭 SELinux 后 Zabbix -server 服务就正常启动了。
Zabbix-server 已经成功安装并启动了,接下来就是启动 Zabbix-web 了,启动 httpd 服务并设置开机自启。
[root@benarchen zabbix]# systemctl start httpd.service
[root@benarchen zabbix]# systemctl enable httpd.service
启动 httpd 服务后就可以通过浏览器配置 Zabbix-web 了,在本地浏览器输入 :你的服务器 ip/zabbix
会出现如下页面:
这个报错需要在配置文件中指定一下时区:
# php_value date.timezone Europe/Riga
修改为上海世界
php_value date.timezone Asia/Shanghai
# 随后重启 httpd 服务
[root@benarchen ~]# systemctl restart httpd.service
浏览器刷新后正常:
下一步设置 Zabbix-web 服务的 db 连接,这里使用和 Zabbix-server 相同的就可以:
下一步是设置 Zabbix 系统的名字,可以根据自己喜好设定:
然后一直下一步就可以了,Finish 后进入 Zabbix 系统的登录页面,用户名默认为 Admin
,密码为 zabbix
输入默认的账号密码登录系统后默认是英文的,不方便我们学习和上手。
点击右上角个人信息小图标进入设置:
选择中文后点击 update:
至此 Zabbix 的基本安装和设置就完成了,并且可以看到我这里已经有一条告警信息,说明 Zabbix 系统已经在起作用了,因为我这里没有安装 Zabbix-proxy 和 Zabbix-agent ,所以只有自己的 Zabbix-server 服务器信息,基本框架已经部署好了,其他的大家可以自己去尝试。