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

2018-08-10 14:28:04 浏览数 (1)

介绍

Zabbix是用于web和应用程序的开源监控软件。它提供对从服务器,虚拟机和任何其他类型的网络设备收集的数千个指标的实时监控。这些指标可帮助确定IT基础架构的当前运行状况。有用的信息存储在数据库中,因此您可以随时分析数据并提高所提供服务的质量。

Zabbix使用客户端 -服务器体系结构,并在受监视的客户端上使用小代理来收集数据并将其发送到Zabbix服务器。Zabbix版本3支持服务器和连接的客户端之间的加密通信,因此您的数据在不安全的网络上传输时受到保护。

Zabbix服务器将其数据存储在由MySQL,PostgreSQL或Oracle提供支持的关系数据库中。它还提供Web界面,以便您可以查看数据和配置系统设置。在本教程中,我们将配置两台计算机。一个将配置为服务器,另一个将配置为您将监视的客户端。服务器将使用MySQL数据库记录监控数据,并使用Apache为Web界面提供服务。

准备

要学习本教程,您需要:

  • 两个Ubuntu 16.04服务器,每个服务器配置一个sudo非root用户。
  • 运行Zabbix服务器的服务器需要安装Apache,MySQL和PHP。

第一步 - 安装Zabbix服务器

首先,我们需要在我们安装MySQL,Apache和PHP的服务器上安装Zabbix Server。我们将在本教程中将此机器称为“Zabbix服务器”。以非root用户身份登录此计算机:

代码语言:txt复制
ssh sammy@your_zabbix_server_ip_address

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

代码语言:txt复制
$ sudo apt-get update

然后安装Zabbix需要的PHP模块:

代码语言:txt复制
$ sudo apt-get install php7.0-xml php7.0-bcmath php7.0-mbstring

现在我们可以安装Zabbix了。

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

代码语言:txt复制
$ 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

您将看到以下输出:

代码语言:txt复制
Selecting 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) ...

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

代码语言:txt复制
$ sudo apt-get update

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

代码语言:txt复制
$ sudo apt-get install zabbix-server-mysql zabbix-frontend-php

我们还安装Zabbix代理,它将让我们收集有关Zabbix服务器状态本身的数据。

代码语言:txt复制
sudo apt-get install zabbix-agent

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

第二步 - 为Zabbix配置MySQL数据库

我们需要创建一个新的MySQL数据库,并用一些基本信息填充它,以使其适用于Zabbix。我们还将为此数据库创建一个特定用户,因此Zabbix不会使用该root帐户登录MySQL。

使用您在MySQL服务器安装期间设置的root密码以root用户身份登录MySQL:

代码语言:txt复制
mysql -uroot -p

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

代码语言:txt复制
mysql> create database zabbix character set utf8 collate utf8_bin;

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

代码语言:txt复制
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'your_password';

然后应用这些新权限:

代码语言:txt复制
mysql> flush privileges;

退出数据库控制台。

代码语言:txt复制
mysql> quit;

接下来,我们必须导入初始架构和数据。Zabbix安装为我们提供了一个文件,为我们设置了这个。

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

代码语言:txt复制
$ 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服务器配置文件中设置数据库密码。在编辑器中打开配置文件:

代码语言:txt复制
$ sudo nano /etc/zabbix/zabbix_server.conf

查找文件的以下部分:

/etc/zabbix/zabbix_server.conf

代码语言:txt复制
### 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

代码语言:txt复制
DBPassword=your_zabbix_mysql_password

这需要处理Zabbix服务器配置,但我们必须对PHP设置进行一些修改才能使Zabbix Web界面正常工作。

第三步 - 为Zabbix配置PHP

Zabbix Web界面是用PHP编写的,需要一些特殊的PHP服务器设置。Zabbix安装过程创建了一个包含这些设置的Apache配置文件。它位/etc/zabbix于目录中,由Apache自动加载。我们需要对此文件进行一些小改动,然后将其打开。

代码语言:txt复制
$ sudo nano /etc/zabbix/apache.conf

该文件包含满足Zabbix Web界面必要要求的PHP设置。您需要做的唯一更改是设置适当的时区,默认情况下会将其注释掉。

/etc/zabbix/apache.conf

代码语言:txt复制
...
<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 Asia/Shanghai
</IfModule>

取消注释上面突出显示的时区线,并将其更改为您的时区。然后保存并关闭该文件。

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

代码语言:txt复制
$ sudo systemctl restart apache2

您现在可以启动Zabbix服务器了。

代码语言:txt复制
$ sudo systemctl start zabbix-server

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

代码语言:txt复制
$ sudo systemctl status zabbix-server

您将看到以下状态:

代码语言:txt复制
● 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)
  ...

最后,在启动时启动服务器:

代码语言:txt复制
$ sudo systemctl enable zabbix-server

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

第四步 - 配置Zabbix Web界面的设置

Web界面让我们可以查看报告并添加我们要监控的主机,但在我们使用它之前需要进行一些初始设置。启动浏览器并转到地址http:// your_zabbix_server_ip_address / zabbix /。在第一个屏幕上,您将看到欢迎消息。 单击下一步继续。

此表中的所有值都必须正常,因此请验证它们是否正确。请务必向下滚动并查看所有准备。确认一切准备就绪后,请单击“下一步”继续。

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

我们告诉Zabbix服务器我们的数据库,但Zabbix Web界面还需要访问数据库来管理主机和读取数据。因此,请输入您在步骤二中配置的MySQL凭据,然后单击“下一步”继续。

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

名称是可选的;如果您有多个监视服务器,它将在Web界面中用于区分一台服务器与另一台服务器。单击下一步继续。

下一个屏幕将显示安装前总结,以便您确认一切正确。

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

Web界面设置完成!此过程将创建/usr/share/zabbix/conf/zabbix.conf.php,您可以备份并在将来使用的配置文件。单击“完成”以进入登录屏幕。默认用户是Admin,密码是zabbix

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

第五步 - 安装和配置Zabbix代理

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

登录到第二台服务器,我们将其称为“受监控服务器”。

代码语言:txt复制
ssh sammy@your_monitored_server_ip_address

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

代码语言:txt复制
$ 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

接下来,更新包索引:

代码语言:txt复制
$ sudo apt-get update

然后安装Zabbix代理:

代码语言:txt复制
$ sudo apt-get install zabbix-agent

虽然Zabbix支持基于证书的加密,但设置证书颁发机构超出了本教程的范围,但我们可以使用预共享密钥(PSK)来保护服务器和代理之间的连接。

首先,生成一个PSK:

代码语言:txt复制
$ sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"

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

代码语言:txt复制
$ cat /etc/zabbix/zabbix_agentd.psk

密钥看起来像这样:

代码语言:txt复制
cd12686e166a80aa09a227ae5f97834eaa3d5ae686d2ae39590f17ef85dd6de5

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

代码语言:txt复制
$ sudo nano /etc/zabbix/zabbix_agentd.conf

此文件中的每个设置都通过整个文件中的信息性注释进行记录,但您只需编辑其中一些。

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

/etc/zabbix/zabbix_agentd.conf

代码语言:txt复制
### 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

代码语言:txt复制
Server=your_zabbix_server_ip_address

接下来,找到配置与Zabbix服务器的安全连接的部分,并启用预共享密钥支持。

找到TSLConnect部分,如下所示:

/etc/zabbix/zabbix_agentd.conf

代码语言:txt复制
### 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

代码语言:txt复制
TLSConnect=psk

接下来,找到如下所示的TLSAccept部分:

/etc/zabbix/zabbix_agentd.conf

代码语言:txt复制
### Option: TLSPSKIdentity
#       Unique, case sensitive string used to identify the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKIdentity=

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

/etc/zabbix/zabbix_agentd.conf

代码语言:txt复制
TLSAccept=psk

接下来,找到如下所示的TLSPSKIdentity部分:

/etc/zabbix/zabbix_agentd.conf

代码语言:txt复制
### Option: TLSPSKIdentity
#       Unique, case sensitive string used to identify the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKIdentity=

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

etc/zabbix/zabbix_agentd.conf

代码语言:txt复制
TLSPSKIdentity=PSK 001

当您通过Zabbix Web界面添加主机时,您将使用它作为PSK ID

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

/etc/zabbix/zabbix_agentd.conf

代码语言:txt复制
### Option: TLSPSKFile
#       Full pathname of a file containing the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKFile=

添加此行以将Zabbix代理指向您创建的PSK文件:

/etc/zabbix/zabbix_agentd.conf

代码语言:txt复制
TLSPSKFile=/etc/zabbix/zabbix_agentd.psk

保存并关闭文件。现在,您可以启动Zabbix代理并将其设置为在引导时启动:

代码语言:txt复制
$ sudo systemctl start zabbix-agent
$ sudo systemctl enable zabbix-agent

为了更好地衡量,请检查Zabbix代理是否正常运行:

代码语言:txt复制
$ sudo systemctl status zabbix-agent

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

代码语言:txt复制
● 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:

代码语言:txt复制
$ sudo ufw allow 10050/tcp

您可以在Ubuntu上了解有关如何使用UFW设置防火墙的UFW的更多信息。

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

在我们要监视的服务器上安装代理只是整个过程的一半。我们要监控的每个主机都需要在Zabbix服务器上注册,我们可以通过Web界面进行注册。

通过导航到地址http://your_zabbix_server_ip_address/zabbix/登录Zabbix Server Web界面。

登录后,单击配置,然后单击顶部导航栏中的主机。然后单击屏幕右上角的“创建主机”按钮。这将打开主机配置页面。

调整主机名和IP地址以反映客户端计算机的主机名和IP地址。然后通过从列表中选择一个组或通过创建自己的组将主机添加到组中。主机可以是多个组。 Linux Servers组是一个很好的默认选择。添加组后,单击“模板”选项卡。

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

接下来,导航到“加密”选项卡。 为连接主机和来自主机的连接选择PSK。然后将PSK标识设置为PSK 001,这是我们之前配置的Zabbix代理的TLSPSKIdentity设置的值。然后设置PSK值为您为Zabbix代理生成的密钥。它是存储在代理计算机上的文件/etc/zabbix/zabbix_agentd.psk中的文件。

最后,单击表单底部的“ 添加”按钮以创建主机。

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

几秒钟后,您可以导航到Monitoring,然后导航到Latest data以查看代理的数据。

为确保工作正常,请关闭受监控的服务器,以便了解Zabbix如何提醒您出现问题。受监控的服务器脱机后,您将在主仪表板上看到警告:

如果您需要监视其他服务器,请登录到每个主机,安装Zabbix代理,生成PSK,配置代理,然后按照添加第一个主机所遵循的相同步骤将主机添加到Web界面。

结论

在本教程中,您学习了如何设置简单安全的监控解决方案,以帮助您监控服务器的状态。它现在可以警告您出现问题,并且您有机会根据获得的数据绘制一些图表,以便您可以对其进行分析并进行相应的计划。您可以对以下内容感兴趣:

  • 如何在Ubuntu 16.04上使用Icinga监视主机和服务
  • 使用SmokePing监控你的服务器
  • 使用Nagios监控你的Ubuntu服务器
  • Ubuntu 16.04上如何使用Alertmanager和Blackbox导出程序监视Web服务器

更多关于服务器的相关教程,欢迎访问腾讯云 社区。


参考文献:《How to Install and Configure Zabbix to Securely Monitor Remote Servers on Ubuntu 16.04》

0 人点赞