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

Zabbix是用于网络和应用程序的开源监控软件。在本教程中,您将在两台Ubuntu 18.04计算机上配置基于Zabbix的监控系统。一个将配置为服务器,另一个将配置为您将监控的客户端。服务器将使用MySQL数据库记录监控数据,并使用Apache为Web界面提供服务。

作者选择开源计划作为Write for DOnations计划的一部分接受捐赠。

介绍

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

Zabbix使用多种选项来收集指标,包括用户服务的无代理监控和客户端 - 服务器架构。 为了收集服务器度量标准,它使用受监视客户端上的小代理来收集数据并将其发送到Zabbix服务器。 Zabbix支持服务器和连接的客户端之间的加密通信,因此您的数据在不安全的网络上传输时受到保护。

Zabbix服务器将其数据存储在由MySQLPostgreSQLOracle提供支持的关系数据库中。 您还可以将历史数据存储在nosql数据库中,如ElasticsearchTimescaleDB Zabbix提供Web界面,因此您可以查看数据和配置系统设置。

在本教程中,您将配置两台计算机。 一个将配置为服务器,另一个将配置为您将监控的客户端。 服务器将使用MySQL数据库记录监控数据,并使用Apache为Web界面提供服务。

先决条件

要学习本教程,您需要:

  • 按照Ubuntu 18.04的初始服务器设置指南设置了两个Ubuntu 18.04服务器,包括具有sudo权限的非root用户和使用ufw配置的防火墙。 在一台服务器上,您将安装Zabbix; 本教程将此称为Zabbix服务器 它将监视您的第二台服务器; 这第二台服务器将被称为第二台Ubuntu服务器

  • 运行Zabbix服务器的服务器需要安装Apache,MySQL和PHP。 按照本指南配置Zabbix服务器上的那些。

此外,由于Zabbix服务器用于访问您不希望未经授权的用户访问的有关基础架构的重要信息,因此通过安装TLS / SSL证书来保持服务器安全非常重要。 这是可选的,但强烈鼓励 您可以按照Ubuntu 18.04上Let's Encrypt指南获取免费的TLS / SSL证书。

第1步 - 安装Zabbix服务器

首先,您需要在安装了MySQL,Apache和PHP的服务器上安装Zabbix。 以非root用户身份登录此计算机:

ssh sammy@zabbix_server_ip_address

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

wget https://repo.zabbix.com/zabbix/4.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.2-1+bionic_all.deb
sudo dpkg -i zabbix-release_4.2-1+bionic_all.deb

您将看到以下输出:

Selecting previously unselected package zabbix-release.
(Reading database ... 61483 files and directories currently installed.)
Preparing to unpack zabbix-release_4.2-1+bionic_all.deb ...
Unpacking zabbix-release (4.2-1+bionicc) ...
Setting up zabbix-release (4.2-1+bionicc) ...

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

sudo apt update

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

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

此外,安装Zabbix代理,它将允许您收集有关Zabbix服务器状态本身的数据。

sudo apt 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_zabbix_mysql_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服务器配置文件中设置数据库密码。 在首选文本编辑器中打开配置文件。 本教程将使用nano

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

CTRL+X保存并关闭zabbix_server.conf ,然后按Y ,然后按ENTER如果你正在使用nano

这样可以处理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设置。 但是,默认情况下,时区设置已注释掉。 要确保Zabbix使用正确的时间,您需要设置适当的时区。

/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

您将看到以下状态:

● zabbix-server.service - Zabbix Server
   Loaded: loaded (/lib/systemd/system/zabbix-server.service; disabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-04-05 08:50:54 UTC; 3s ago
  Process: 16497 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
  ...

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

sudo systemctl enable zabbix-server

服务器已设置并连接到数据库。 接下来,设置Web前端。

注意:如前提条件部分所述,建议您在服务器上启用SSL / TLS。 您现在可以按照本教程在Ubuntu 18.04上获取Apache的免费SSL证书。 获得SSL / TLS证书后,您可以返回并完成本教程。

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

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

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

先决条件

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

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

数据库连接

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

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

Zabbix服务器详细信息

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

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

摘要

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

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

在登录之前,在第二个Ubuntu服务器上设置Zabbix代理。

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

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

登录第二个Ubuntu服务器:

ssh sammy@second_ubuntu_server_ip_address

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

wget https://repo.zabbix.com/zabbix/4.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.2-1+bionic_all.deb
sudo dpkg -i zabbix-release_4.2-1+bionic_all.deb

接下来,更新包索引:

sudo apt update

然后安装Zabbix代理:

sudo apt install zabbix-agent

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

首先,生成PSK:

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

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

cat /etc/zabbix/zabbix_agentd.psk

密钥看起来像这样:

12eb854dea38ac9ee7d1ded2d74cee6262b0a56710f6946f7913d674ab82cdd4

现在编辑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=zabbix_server_ip_address
...

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

/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 restart zabbix-agent
sudo systemctl enable zabbix-agent

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

sudo systemctl status zabbix-agent

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

● zabbix-agent.service - Zabbix Agent
   Loaded: loaded (/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-04-05 09:03:04 UTC; 1s ago
  ...

代理将在端口10050上监听来自服务器的连接。 配置UFW以允许连接到此端口:

sudo ufw allow 10050/tcp

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

您的代理现在已准备好将数据发送到Zabbix服务器。 但是为了使用它,您必须从服务器的Web控制台链接到它。 在下一步中,您将完成配置。

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

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

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

Zabbix登录界面

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

创建主机

调整主机名IP地址以反映第二个Ubuntu服务器的主机名和IP地址,然后将主机添加到组中。 您可以选择现有组,例如Linux服务器 ,也可以创建自己的组。 主机可以分为多个组。 为此,请在“ 组”字段中输入现有组或新组的名称,然后从建议的列表中选择所需的值。

添加组后,单击“ 模板”选项卡。

将模板添加到主机

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

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

设置加密

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

您将在列表中看到新主持人。 等一下,重新加载页面,看到绿色标签,表明一切正常,连接已加密。

Zabbix展示了您的新主机

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

Zabbix服务器现在正在监控您的第二个Ubuntu服务器。 现在,设置电子邮件通知以通知问题。

第7步 - 配置电子邮件通知

Zabbix自动支持几种类型的通知:电子邮件, Jabber ,SMS等。您还可以使用其他通知方法,例如Telegram或Slack。 您可以在此处查看完整的集成列表。

最简单的通信方法是电子邮件,本教程将配置此媒体类型的通知。

单击“ 管理” ,然后单击顶部导航栏中的“ 媒体类型 ”。 您将看到所有媒体类型的列表。 点击电子邮件

根据电子邮件服务提供的设置调整SMTP选项。 本教程使用Gmail的SMTP功能设置电子邮件通知; 如果您想了解有关进行此设置的详细信息,请参阅如何使用Google的SMTP服务器

注意:如果您使用Gmail进行两步验证,则需要为Zabbix生成应用密码。 您无需记住它,您只需在安装过程中输入一次应用程序密码。 您可以在Google帮助中心找到有关如何生成此密码的说明

您还可以选择消息格式-html或纯文本。 最后,单击表单底部的“ 更新”按钮以更新电子邮件参数。

设置电子邮件

现在,创建一个新用户。 单击“ 管理” ,然后单击顶部导航栏中的“ 用户 ”。 您将看到用户列表。 然后单击屏幕右上角的“ 创建用户”按钮。 这将打开用户配置页面。

创建用户

别名字段中输入新用户名并设置新密码。 接下来,将用户添加到管理员组。 在“ 组”字段中键入Zabbix administrators ,然后从建议的列表中选择它。

添加完组后,单击“ 媒体”选项卡,然后单击“ 添加带下划线”链接。 您将看到一个弹出窗口。

添加电子邮件

在“ 发送至”字段中输入您的电子邮件地址。 您可以将其余选项保留为默认值。 单击底部的“ 添加”按钮进行提交。

现在导航到“ 权限”选项卡。 用户类型下拉菜单中选择Zabbix Super Admin

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

现在您需要启用通知。 单击配置选项卡,然后单击顶部导航栏中的操作。 您将看到一个预先配置的操作,该操作负责向所有Zabbix管理员发送通知。 您可以通过单击其名称来查看和更改设置。 出于本教程的目的,请使用默认参数。 要启用该操作,请单击“ 状态”列中的红色“ 已禁用”链接。

现在您已准备好接收警报。 在下一步中,您将生成一个用于测试通知设置。

第8步 - 生成测试警报

在此步骤中,您将生成测试警报以确保所有内容都已连接。 默认情况下,Zabbix会跟踪服务器上的可用磁盘空间量。 它会自动检测所有磁盘安装并添加相应的检查。 此发现每小时执行一次,因此您需要等待一段时间才能触发通知。

创建一个足够大的临时文件来触发Zabbix的文件系统使用警报。 为此,如果尚未连接,请登录到第二个Ubuntu服务器。

ssh sammy@second_ubuntu_server_ip_address

接下来,确定您在服务器上有多少可用空间。 您可以使用df命令找出:

df -h

命令df将报告文件系统的磁盘空间使用情况, -h将使输出具有人工可读性。 你会看到如下输出:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G  1.2G   23G   5% /

在这种情况下,可用空间为23GB 您的可用空间可能不同。

使用fallocate命令可以预先为文件预分配或取消分配空间,以创建占用可用磁盘空间80%以上的文件。 这足以触发警报:

fallocate -l 20G /tmp/temp.img

大约一个小时后,Zabbix将触发有关可用磁盘空间量的警报,并将运行您配置的操作,并发送通知消息。 您可以在收件箱中查看来自Zabbix服务器的消息。 您将看到如下消息:

Problem started at 10:37:54 on 2019.04.05
Problem name: Free disk space is less than 20% on volume /
Host: Second Ubuntu server
Severity: Warning

Original problem ID: 34

您还可以导航到“ 监控”选项卡,然后导航到仪表板以查看通知及其详细信息。

主仪表板

既然您知道警报正在运行,请删除您创建的临时文件,以便回收磁盘空间:

rm -f /tmp/temp.img

一分钟后,Zabbix将发送恢复消息,警报将从主仪表板中消失。

结论

在本教程中,您学习了如何设置简单安全的监控解决方案,以帮助您监控服务器的状态。 它现在可以警告您出现问题,并且您有机会分析IT基础架构中发生的进程。

要了解有关设置监视基础结构的更多信息,请查看如何在Ubuntu 18.04上安装Elasticsearch,Logstash和Kibana(弹性)以及如何在Ubuntu 18.04上使用Metricbeat收集基础结构度量标准


分享按钮