如何在Ubuntu 16.04上安装和配置Zabbix以安全地监视远程服务器

・21 分钟阅读

介绍

Zabbix是用于网络和应用程序的开放源码监控软件,它提供实时监控从服务器,虚拟机和其他类型的网络设备收集的大量指标,这些指标可以帮助你确定IT基础设施的当前健康状况,并在客户抱怨之前检测硬件或软件组件的问题,有用的信息存储在数据库中,以便你可以随时分析数据,并提高提供服务的质量,或者计划你的设备升级。

Zabbix使用客户端服务器架构,并在被监视的客户端上使用小代理收集数据并将它发送到Zabbix服务器,Zabbix第3版支持服务器与连接的客户端之间的加密通信,因此在不安全的网络上传输数据时,你的数据受到保护。

Zabbix服务器将它数据存储在由MySQL,PostgreSQL或Oracle驱动的关系数据库中,它还提供一个网页界面,以便你可以查看数据和配置系统设置,在本教程中,我们将配置两台机器,其中一个将被配置为服务器,另一个作为客户端,你将监视它,服务器将使用MySQL数据库记录监控数据,并使用Apache服务网络接口。

前提条件

要遵循本教程,你需要:

2台Ubuntu 16.04服务器,每个服务器都配置了sudo非root用户,按初始Ubuntu服务器设置方式设置,运行Zabbix服务器的服务器需要安装Apache,MySQL和PHP 。

步骤1安装Zabbix服务器

首先,我们需要在安装MySQL,apache和PHP的服务器上安装Zabbix服务器,我们在本教程中将此机器称为"zabbix服务器" 以非root用户身份登录此机器:


ssh sammy@your_zabbix_server_ip_address

在安装Zabbix之前,我们需要安装一些Zabbix需要的PHP模块,首先,更新可用软件包的系统列表:


sudo apt-get update

然后安装所需的PHP模块:


sudo apt-get install php7.0-xml php7.0-bcmath php7.0-mbstring

现在我们可以安装Zabbix 。

Zabbix在Ubuntu管理器中可用,但是已经过时了,所以使用官方Zabbix库来安装最新的稳定版本,下载并安装仓库配置软件包:


wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb
sudo dpkg -i zabbix-release_3.2-1+xenial_all.deb

你将看到以下输出:


OutputSelecting previously unselected package zabbix-release.
(Reading database ... 55276 files and directories currently installed.)
Preparing to unpack zabbix-release_3.2-1+xenial_all.deb ...
Unpacking zabbix-release (3.2-1+xenial) ...
Setting up zabbix-release (3.2-1+xenial) ...

更新软件包索引,以便包含新的存储库:


sudo apt-get update

然后使用MySQL数据库支持安装Zabbix服务器和web前端:


sudo apt-get install zabbix-server-mysql zabbix-frontend-php

也安装Zabbix代理,它将收集关于Zabbix服务器状态本身的数据。


sudo apt-get install zabbix-agent

在使用Zabbix之前,我们必须建立一个数据库来保存Zabbix服务器将从它代理收集的数据。

步骤2为Zabbix配置MySQL数据库

为了使它适合Zabbix,我们需要创建一个新的MySQL数据库,并且填充一些基本信息,我们还为这个数据库创建一个特定的用户,这样Zabbix就不会用root帐户登录到MySQL 。

使用你在MySQL服务器安装过程中设置的root密码作为root用户登录到MySQL :


mysql -uroot -p

使用UTF-8字符支持创建Zabbix数据库:


create database zabbix character set utf8 collate utf8_bin;

然后创建一个Zabbix服务器将使用的用户,授予它访问新数据库的权限,并为该用户设置密码:


grant all privileges on zabbix.* to zabbix@localhost identified by 'your_password';

然后应用这些新权限:


flush privileges;

负责用户和数据库的处理,退出数据库控制台。


quit;

接下来,我们必须导入初始模式和数据,

若要设置架构并将数据导入zabbix数据库,请运行以下命令,使用zcat,因为文件中的数据被压缩。


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

输入提示时配置的zabbix MySQL用户的密码。

如果成功,此命令将不会输出错误,如果你看到错误 ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' (using password: YES) 然后确保你使用了zabbix用户的密码,而不是root用户的密码。

为了使Zabbix服务器使用此数据库,需要在Zabbix服务器配置文件中设置数据库密码,在编辑器中打开配置文件:


sudo nano /etc/zabbix/zabbix_server.conf

查找文件的以下部分:

/etc/zabbix/zabbix_server.conf

### Option: DBPassword 
# Database password. Ignored for SQLite. 
# Comment this line if no password is used.
# 
# Mandatory: no 
# Default: 
# DBPassword=

文件中的这些注释说明如何连接到数据库,我们需要将文件中的DBPassword值设置为数据库用户的密码,在这些注释下面添加以下行以配置数据库:

/etc/zabbix/zabbix_server.conf

DBPassword=your_zabbix_mysql_password

可以处理Zabbix服务器的配置,但是为了使Zabbix Web界面正常工作,我们必须对PHP设置进行一些修改。

步骤3为Zabbix配置PHP

Zabbix网络接口是用PHP编写的,需要一些特殊的PHP服务器设置,Zabbix安装过程创建了一个包含这些设置的Apache配置文件,它位于/etc/zabbix目录中,由Apache自动加载,我们需要对这个文件做一个小改动,所以打开它。


sudo nano /etc/zabbix/apache.conf

你需要做的惟一更改是设置适当的时区,默认情况下将被注释掉。

/etc/zabbix/apache.conf

...
<IfModule mod_php7.c>
 php_value max_execution_time 300
 php_value memory_limit 128M
 php_value post_max_size 16M
 php_value upload_max_filesize 2M
 php_value max_input_time 300
 php_value always_populate_raw_post_data -1
 # php_value date.timezone Europe/Riga
</IfModule>

然后保存并关闭文件。

现在重启Apache以应用这些新设置。


sudo systemctl restart apache2

你现在可以启动Zabbix服务器。


sudo systemctl start zabbix-server

然后检查Zabbix服务器是否正常运行:


sudo systemctl status zabbix-server

你将看到以下状态:


Output● zabbix-server.service - Zabbix Server
 Loaded: loaded (/lib/systemd/system/zabbix-server.service; disabled; vendor preset: enabled)
 Active: :active (running) since Thu 2017-06-08 06:40:43 UTC; 6s ago
 Process: 15201 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
 ...

最后,使服务器在引导时启动:


sudo systemctl enable zabbix-server

服务器已设置并连接到数据库,现在我们来设置web前端。

步骤4配置Zabbix Web界面的设置

web界面看到报告,并且添加要监视的主机,但是在使用它之前它需要一些初始设置,启动浏览器并转到地址 http://your_zabbix_server_ip_address/zabbix/ 在第一个屏幕上,你将看到一条欢迎消息,单击下一步继续。

在下一个屏幕上,将看到列出运行Zabbix的所有先决条件的表。

请务必向下滚动,并且查看所有先决条件,确认一切准备就绪后,单击下一步继续。

下一屏幕要求数据库连接信息。

我们告诉Zabbix服务器关于数据库,但是Zabbix web界面还需要访问数据库来管理主机和读取数据,因此,输入你在步骤2中配置的MySQL凭证,然后单击下一步继续。

在下一个屏幕上,你可以将选项保留为默认值。

名称是可选的; 如果你有多台监视服务器,则在Web界面中使用它将一台服务器与另一台服务器区分开。单击下一步进行操作。

接下来的屏幕将显示预安装摘要,以便你确认一切都正确。

单击下一步以进入最终屏幕。

web界面设置已完成!此过程创建配置文件 /usr/share/zabbix/conf/zabbix.conf.php 你可以在未来备份和使用,单击Finish login进入登录屏幕,默认用户是管理员,密码是zabbix 。

在登录之前,在其他服务器上设置Zabbix代理。

步骤5安装和配置Zabbix代理

现在我们需要配置代理软件,它将监视数据发送到Zabbix服务器。

登录到第二个服务器,我们称呼它为"监视服务器"


ssh sammy@your_monitored_server_ip_address

然后,就像Zabbix服务器一样,运行以下命令来安装存储库配置软件包:


wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb
sudo dpkg -i zabbix-release_3.2-1+xenial_all.deb

接下来,更新包索引:


sudo apt-get update

然后安装Zabbix代理:


sudo apt-get install zabbix-agent

因此,首先生成PSK :


sudo sh -c"openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"

显示密钥以便可以将它复制到某个位置,你将需要它来配置主机。


cat /etc/zabbix/zabbix_agentd.psk

密钥将如下所示:


Outputcd12686e166a80aa09a227ae5f97834eaa3d5ae686d2ae39590f17ef85dd6de5

现在编辑Zabbix代理设置,设置它与Zabbix服务器的安全连接,在文本编辑器中打开代理配置文件:


sudo nano /etc/zabbix/zabbix_agentd.conf

首先,你必须编辑Zabbix服务器的IP地址,查找以下部分:

/etc/zabbix/zabbix_agentd.conf

### Option: Server
# List of comma delimited IP addresses (or hostnames) of Zabbix servers.
# Incoming connections will be accepted only from the hosts listed here.
# If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally.
#
# Mandatory: no
# Default:
# Server=

Server=127.0.0.1

将默认值更改为Zabbix服务器的IP :

/etc/zabbix/zabbix_agentd.conf

Server=your_zabbix_server_ip_address

接下来,找到配置安全连接到Zabbix服务器,并且启用预共享密钥支持的部分,查找TSLConnect部分,它外观如下所示:

/etc/zabbix/zabbix_agentd.conf

### Option: TLSConnect
# How the agent should connect to server or proxy. Used for active checks.
# Only one value can be specified:
# unencrypted - connect without encryption
# psk - connect using TLS and a pre-shared key
# cert - connect using TLS and a certificate
#
# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
# Default:
# TLSConnect=unencrypted

然后添加此行来配置预共享密钥支持:

/etc/zabbix/zabbix_agentd.conf

TLSConnect=psk

接下来,找到TLSAccept部分,它看起来像这样:

/etc/zabbix/zabbix_agentd.conf

### Option: TLSAccept
# What incoming connections to accept.
# Multiple values can be specified, separated by comma:
# unencrypted - accept connections without encryption
# psk - accept connections secured with TLS and a pre-shared key
# cert - accept connections secured with TLS and a certificate
#
# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
# Default:
# TLSAccept=unencrypted

配置传入连接,通过添加此行来支持预共享密钥:

/etc/zabbix/zabbix_agentd.conf

TLSAccept=psk

接下来,找到TLSPSKIdentity部分,它看起来像这样:

/etc/zabbix/zabbix_agentd.conf

### Option: TLSPSKIdentity
# Unique, case sensitive string used to identify the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKIdentity=

选择一个唯一的名称,通过添加此行来标识你的预共享密钥:

/etc/zabbix/zabbix_agentd.conf

TLSPSKIdentity=PSK 001

你将在通过Zabbix网络接口添加主机时使用这个作为PSK标识。

然后设置指向先前创建的共享密钥的选项,查找TLSPSKFile选项:

/etc/zabbix/zabbix_agentd.conf

### Option: TLSPSKFile
# Full pathname of a file containing the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKFile=

向point agent添加此行,使它指向你创建的PSK文件:

/etc/zabbix/zabbix_agentd.conf

TLSPSKFile=/etc/zabbix/zabbix_agentd.psk

保存并关闭文件,现在你可以启动Zabbix代理并将它设置为开机时启动:


sudo systemctl start zabbix-agent
sudo systemctl enable zabbix-agent

为了获得良好的度量,请检查Zabbix代理是否正常运行:


sudo systemctl status zabbix-agent

你将看到以下状态,指示代理正在运行:


Output● zabbix-agent.service - Zabbix Agent
 Loaded: loaded (/lib/systemd/system/zabbix-agent.service; disabled; vendor preset: enabled)
 Active: active (running) since Thu 2017-06-08 08:33:52 UTC; 4s ago
 Process: 18185 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
 ...

代理现在已经准备好将数据发送到Zabbix服务器,但是为了使用它,我们必须从服务器控制台的web链接到它。

注意:如果使用UFW,请将它配置为允许连接到端口10050


sudo ufw allow 10050/tcp 

你可以在如何在Ubuntu 16 04上设置UFW防火墙 了解有关UFW的更多信息。

第6步将新主机添加到Zabbix服务器

我们需要监视的每个主机都需要在,服务器上注册,通过web界面进行注册。

导航到地址来登录Zabbix服务器web界面 http://your_zabbix_server_ip_address/zabbix/

登录后,单击配置,然后在顶部导航栏中单击,然后点击屏幕右上角的Create主机按钮,这将打开主机配置页。

根据主机名和IP地址调整主机名和IP地址以反映客户端的主机名,然后通过从列表中选择一个组或通过创建自己的组,将主机添加到一个组中。主机可以在多个组中,添加组之后,单击模板选项卡。

在搜索字段中键入Template OS Linux,然后单击Add 将此模板添加到主机。

接下来,导航到加密选项卡,选择两个连接到主机的PSK和主机的连接,然后将PSK标识设置为PSK 001,这是我们前面配置的Zabbix代理的TLSPSKIdentity设置的值,然后设置 PSK值到你为Zabbix代理生成的密钥,就是存储在代理机器上的/etc/zabbix/zabbix_agentd.psk文件。

最后,单击窗体底部的添加按钮以创建主机。

你将看到带有绿色标签的新主机,表明一切正常且连接已加密。

几秒钟后,你可以导航到监视和最新数据,以查看来自你的代理的数据。

为了确保工作正常,关闭监视服务器,以便你可以看到Zabbix如何通知你问题,一旦监视服务器脱机,你将在主仪表板上看到警告:

Zabbix shows you a warning about the host that's offline.

如果你有需要监视的其他服务器,登录到每个主机,安装ZabBIX代理,生成PSK,配置代理,并按照与你添加第一个主机相同的步骤将主机添加到Web界面。

结束语

在本教程中,你学习了如何设置简单而安全的监视解决方案,这将帮助你监视服务器的状态。

Yangchunyan110 profile image