如何在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 name 和 IP ADDRESS 以反映您的客户端机器的主机名和 IP 地址。 然后通过从列表中选择一个组或创建您自己的组将主机添加到组。 主机可以在多个组中。 Linux Servers 组是一个不错的默认选择。 添加组后,单击 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按钮创建主机。
您将看到带有绿色标签的新主机,表明一切正常并且连接已加密。
几秒钟后,您可以导航到 Monitoring,然后导航到 Latest data 以查看来自代理的数据。
为确保一切正常,请关闭受监控的服务器,以便查看 Zabbix 如何提醒您注意问题。 一旦您的监控服务器离线,您将在主仪表板上看到警告:
如果您需要监控其他服务器,请登录到每台主机,安装 Zabbix 代理,生成 PSK,配置代理,然后按照添加第一台主机的相同步骤将主机添加到 Web 界面。
结论
在本教程中,您学习了如何设置一个简单且安全的监控解决方案,这将帮助您监控服务器的状态。 它现在可以警告您出现问题,并且您有机会根据获得的数据绘制一些图表,以便您可以对其进行分析并做出相应的计划。