如何在Ubuntu18.04上安装和配置Zabbix以安全监控远程服务器
作为 Write for DOnations 计划的一部分,作者选择了 Open Source Initiative 来接受捐赠。
介绍
Zabbix 是用于网络和应用程序的开源监控软件。 它提供对从服务器、虚拟机、网络设备和 Web 应用程序收集的数千个指标的实时监控。 这些指标可以帮助您确定 IT 基础架构的当前运行状况,并在客户投诉之前检测硬件或软件组件的问题。 有用的信息存储在数据库中,因此您可以随着时间的推移分析数据并提高所提供服务的质量,或计划设备升级。
Zabbix 使用多种选项来收集指标,包括对用户服务和客户端-服务器架构的无代理监控。 为了收集服务器指标,它使用受监控客户端上的一个小代理来收集数据并将其发送到 Zabbix 服务器。 Zabbix 支持服务器和连接的客户端之间的加密通信,因此您的数据在通过不安全的网络传输时受到保护。
Zabbix 服务器将其数据存储在由 MySQL、PostgreSQL 或 Oracle 驱动的关系数据库中。 您还可以将历史数据存储在 Elasticsearch 和 TimescaleDB 等 nosql 数据库中。 Zabbix 提供了一个 Web 界面,因此您可以查看数据和配置系统设置。
在本教程中,您将配置两台机器。 一个将配置为服务器,另一个配置为您将监控的客户端。 服务器将使用 MySQL 数据库来记录监控数据并使用 Apache 来提供 Web 界面。
先决条件
要遵循本教程,您将需要:
- 按照 Initial Server Setup Guide for Ubuntu 18.04 设置两台 Ubuntu 18.04 服务器,包括具有 sudo 权限的非 root 用户和配置了
ufw
的防火墙。 在一台服务器上,您将安装 Zabbix; 本教程将把它称为 Zabbix 服务器。 它将监控您的第二台服务器; 这第二台服务器将被称为 第二台 Ubuntu 服务器 。 - 运行 Zabbix 服务器的服务器需要安装 Apache、MySQL 和 PHP。 按照 本指南 在您的 Zabbix 服务器上进行配置。
此外,由于 Zabbix 服务器用于访问您不希望未经授权的用户访问的有关您的基础设施的有价值信息,因此通过安装 TLS/SSL 证书来确保服务器安全非常重要。 这是可选的,但 强烈建议 。 您可以按照 Let's Encrypt on Ubuntu 18.04 指南获取免费的 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
您将看到以下输出:
OutputSelecting 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
保存并关闭 zabbix_server.conf
,方法是按 CTRL+X
,然后按 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
您将看到以下状态:
Output● 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 的所有先决条件的表格。
此表中的所有值都必须为 OK,因此请验证它们是否正确。 请务必向下滚动并查看所有先决条件。 确认一切准备就绪后,单击 下一步 继续。
下一个屏幕询问数据库连接信息。
你告诉 Zabbix 服务器你的数据库,但是 Zabbix Web 界面也需要访问数据库来管理主机和读取数据。 因此,输入您在步骤 2 中配置的 MySQL 凭据,然后单击 Next step 继续。
在下一个屏幕上,您可以将选项保留为默认值。
Name 是可选的; 如果您有多个监控服务器,它在 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
密钥看起来像这样:
Output12eb854dea38ac9ee7d1ded2d74cee6262b0a56710f6946f7913d674ab82cdd4
现在编辑 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
您将看到以下状态,表明代理正在运行:
Output● 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 界面。
登录后,单击顶部导航栏中的 Configuration,然后单击 Hosts。 然后点击屏幕右上角的【X15X】创建主机【X30X】按钮。 这将打开主机配置页面。
调整 Host name 和 IP address 以反映您的第二个 Ubuntu 服务器的主机名和 IP 地址,然后将主机添加到组中。 您可以选择现有组,例如 Linux 服务器,或创建您自己的组。 主机可以在多个组中。 为此,请在 Groups 字段中输入现有或新组的名称,然后从建议的列表中选择所需的值。
添加组后,单击 Templates 选项卡。
在 Search 字段中输入 Template OS Linux
,然后单击 Add 将此模板添加到主机。
接下来,导航到 加密 选项卡。 为 Connections to host 和 Connections from host 选择 PSK。 然后将PSK identity设置为PSK 001
,也就是你之前配置的Zabbix agent的TLSPSKIdentity设置的值。 然后将 PSK 值设置为您为 Zabbix 代理生成的密钥。 它是存储在代理机器上的文件 /etc/zabbix/zabbix_agentd.psk
中的那个。
最后,点击表单底部的Add按钮创建主机。
您将在列表中看到您的新主机。 等待一分钟并重新加载页面以看到绿色标签,表明一切正常并且连接已加密。
如果您需要监控其他服务器,请登录到每台主机,安装 Zabbix 代理,生成 PSK,配置代理,然后按照添加第一台主机的相同步骤将主机添加到 Web 界面。
Zabbix 服务器现在正在监视您的第二个 Ubuntu 服务器。 现在,设置电子邮件通知以收到有关问题的通知。
第 7 步 — 配置电子邮件通知
Zabbix 自动支持多种类型的通知:电子邮件、Jabber、短信等。 您还可以使用其他通知方法,例如 Telegram 或 Slack。 您可以在 此处查看完整的集成列表 。
最简单的通信方式是电子邮件,本教程将为这种媒体类型配置通知。
单击管理,然后单击顶部导航栏中的媒体类型。 您将看到所有媒体类型的列表。 单击 电子邮件。
根据您的电子邮件服务提供的设置调整 SMTP 选项。 本教程使用 Gmail 的 SMTP 功能来设置电子邮件通知; 如果您想了解有关设置的更多信息,请参阅 如何使用 Google 的 SMTP 服务器。
注意:如果您使用Gmail的两步验证,您需要为Zabbix生成一个应用密码。 您不需要记住它,您只需在设置过程中输入一次应用程序密码。 您可以在 Google 帮助中心 中找到有关如何生成此密码的说明。
您还可以选择消息格式——html 或纯文本。 最后,点击表单底部的Update按钮更新邮件参数。
现在,创建一个新用户。 单击 Administration,然后单击顶部导航栏中的 Users。 您将看到用户列表。 然后点击屏幕右上角的创建用户按钮。 这将打开用户配置页面。
在 Alias 字段中输入新用户名并设置新密码。 接下来,将用户添加到管理员组。 在 Groups 字段中键入 Zabbix administrators
并从建议的列表中选择它。
添加组后,单击 Media 选项卡,然后单击带下划线的 Add 链接。 您将看到一个弹出窗口。
在 发送到 字段中输入您的电子邮件地址。 您可以将其余选项保留为默认值。 点击底部的【X10X】添加【X17X】按钮提交。
现在导航到 权限 选项卡。 从用户类型下拉菜单中选择Zabbix Super Admin。
最后点击表单底部的Add按钮创建用户。
现在您需要启用通知。 单击 Configuration 选项卡,然后单击顶部导航栏中的 Actions。 您将看到一个预配置的操作,它负责向所有 Zabbix 管理员发送通知。 您可以通过单击其名称来查看和更改设置。 出于本教程的目的,请使用默认参数。 要启用该操作,请单击 Status 列中的红色 Disabled 链接。
现在您已准备好接收警报。 在下一步中,您将生成一个来测试您的通知设置。
第 8 步 — 生成测试警报
在此步骤中,您将生成一个测试警报以确保一切都已连接。 默认情况下,Zabbix 会跟踪服务器上的可用磁盘空间量。 它会自动检测所有磁盘安装并添加相应的检查。 此发现每小时执行一次,因此您需要等待一段时间才能触发通知。
创建一个足够大的临时文件以触发 Zabbix 的文件系统使用警报。 为此,如果您尚未连接,请登录到您的第二个 Ubuntu 服务器。
ssh sammy@second_ubuntu_server_ip_address
接下来,确定服务器上有多少可用空间。 您可以使用 df
命令找出:
df -h
命令 df
将报告文件系统的磁盘空间使用情况,而 -h
将使输出可读。 您将看到如下输出:
OutputFilesystem Size Used Avail Use% Mounted on /dev/vda1 25G 1.2G 23G 5% /
在这种情况下,可用空间为 23GB。 您的可用空间可能会有所不同。
使用 fallocate
命令可以为文件预分配或取消分配空间,以创建占用超过 80% of 可用磁盘空间的文件。 这足以触发警报:
fallocate -l 20G /tmp/temp.img
大约一个小时后,Zabbix 将触发有关可用磁盘空间量的警报,并将运行您配置的操作,发送通知消息。 您可以检查收件箱中来自 Zabbix 服务器的消息。 您将看到如下消息:
OutputProblem 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
您还可以导航到 Monitoring 选项卡,然后导航到 Dashboard 以查看通知及其详细信息。
既然您知道警报正在工作,请删除您创建的临时文件,以便您可以回收磁盘空间:
rm -f /tmp/temp.img
一分钟后,Zabbix 将发送恢复消息,并且警报将从主仪表板中消失。
结论
在本教程中,您学习了如何设置一个简单且安全的监控解决方案,这将帮助您监控服务器的状态。 它现在可以警告您出现问题,并且您有机会分析 IT 基础架构中发生的流程。
要了解有关设置监控基础架构的更多信息,请查看 如何在 Ubuntu 18.04 上安装 Elasticsearch、Logstash 和 Kibana (Elastic Stack) 和 如何在 Ubuntu 18.04 上使用 Metricbeat 收集基础架构指标.