如何在Ubuntu16.04上安装和配置Zabbix以安全监控远程服务器

来自菜鸟教程
跳转至:导航、​搜索

介绍

Zabbix 是用于网络和应用程序的开源监控软件。 它提供对从服务器、虚拟机和任何其他类型的网络设备收集的数千个指标的实时监控。 这些指标可以帮助您确定 IT 基础架构的当前运行状况,并在客户投诉之前检测硬件或软件组件的问题。 有用的信息存储在数据库中,因此您可以随着时间的推移分析数据并提高所提供服务的质量,或计划设备升级。

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

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

先决条件

要遵循本教程,您将需要:

  • 两台 Ubuntu 16.04 服务器,每台都配置了一个 sudo 非 root 用户。 您可以按照这篇 初始 Ubuntu 服务器设置文章 进行设置。
  • 运行 Zabbix 服务器的服务器需要安装 Apache、MySQL 和 PHP。 按照 本指南 在您的一台服务器上进行配置。

第 1 步 — 安装 Zabbix 服务器

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

ssh sammy@your_zabbix_server_ip_address

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

sudo apt-get update

然后安装 Zabbix 需要的 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 数据库

我们需要创建一个新的 MySQL 数据库并用一些基本信息填充它,以使其适合 Zabbix。 我们还将为此数据库创建一个特定用户,这样 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 安装为我们提供了一个为我们设置的文件。

运行以下命令设置架构并将数据导入 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 服务器配置,但我们必须对 PHP 设置进行一些修改,以使 Zabbix Web 界面正常工作。

第 3 步 — 为 Zabbix 配置 PHP

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

sudo nano /etc/zabbix/apache.conf

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

/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 的所有先决条件的表格。

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

下一个屏幕询问数据库连接信息。

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

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

Name 是可选的; 如果您有多个监控服务器,它在 Web 界面中用于区分一台服务器和另一台服务器。 点击下一步继续。

下一个屏幕将显示预安装摘要,以便您确认一切正确。

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

Web界面设置完成! 此过程创建配置文件 /usr/share/zabbix/conf/zabbix.conf.php,您可以备份并在将来使用。 单击 完成 进入登录屏幕。 默认用户为Admin,密码为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

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

所以首先,生成一个 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 Web 界面添加主机时,您将使用它作为 PSK ID

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

/etc/zabbix/zabbix_agentd.conf

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

添加此行以将 Zabbix 代理指向您创建的 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 服务器

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

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

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

调整 Host nameIP ADDRESS 以反映您的客户端机器的主机名和 IP 地址。 然后通过从列表中选择一个组或创建您自己的组将主机添加到组。 主机可以在多个组中。 Linux Servers 组是一个不错的默认选择。 添加组后,单击 Templates 选项卡。

Search 字段中输入 Template OS Linux,然后单击 Add 将此模板添加到主机。

接下来,导航到 加密 选项卡。 为 Connections to hostConnections from host 选择 PSK。 然后将PSK identity设置为PSK 001,也就是我们之前配置的Zabbix agent的TLSPSKIdentity设置的值。 然后将 PSK 值设置为您为 Zabbix 代理生成的密钥。 它是存储在代理机器上的文件 /etc/zabbix/zabbix_agentd.psk 中的那个。

最后,点击表单底部的Add按钮创建主机。

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

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

为确保一切正常,请关闭受监控的服务器,以便查看 Zabbix 如何提醒您注意问题。 一旦您的监控服务器离线,您将在主仪表板上看到警告:

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

结论

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