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

介绍

Zabbix是网络和应用程序的开源监控软件,提供来自服务器,虚拟机和任何其他类型的网络设备收集的数千个指标的实时监控,这些指标可以帮助您确定您的IT基础设施的当前状况,并在客户投诉之前检测硬件或软件组件的问题。

Zabbix 使用客户端服务器架构,并使用监控客户端上的小代理来收集数据并将其发送到 Zabbix 服务器。

Zabbix 服务器将其数据存储在 MySQL、PostgreSQL 或 Oracle 驱动的关系数据库中,还提供 Web 界面,以便您可以查看数据并配置系统设置。 在本教程中,我们将配置两个机器。

前提条件

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

  • 两个 Ubuntu 16.04 服务器,每个都配置了一个 sudo 非 root 用户. 您可以通过遵循此 初始 Ubuntu 服务器设置文章来设置这些服务器。
  • 运行 Zabbix 服务器的服务器需要安装 Apache、MySQL 和 PHP。

第1步:安装Zabbix服务器

首先,我们需要在我们安装MySQL、Apache和PHP的服务器上安装Zabbix服务器,我们将在本教程中将此机器称为Zabbix服务器

1[environment local]
2ssh sammy@your_zabbix_server_ip_address

在我们安装Zabbix之前,我们需要安装一些Zabbix所需的PHP模块。

1sudo apt-get update

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

1sudo apt-get install php7.0-xml php7.0-bcmath php7.0-mbstring

现在我们可以安装Zabbix。

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

1wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb
2sudo dpkg -i zabbix-release_3.2-1+xenial_all.deb

您将看到以下结果:

1[secondary_label Output]
2Selecting previously unselected package zabbix-release.
3(Reading database ... 55276 files and directories currently installed.)
4Preparing to unpack zabbix-release_3.2-1+xenial_all.deb ...
5Unpacking zabbix-release (3.2-1+xenial) ...
6Setting up zabbix-release (3.2-1+xenial) ...

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

1sudo apt-get update

然后安装具有MySQL数据库支持的Zabbix服务器和Web前端:

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

我们还会安装Zabbix代理,这将允许我们收集有关Zabbix服务器状态的数据。

1sudo apt-get install zabbix-agent

在我们能够使用Zabbix之前,我们必须建立一个数据库来存储Zabbix服务器从其代理人那里收集的数据。

第 2 步:为 Zabbix 配置 MySQL 数据库

我们需要创建一个新的MySQL数据库,并填充一些基本信息,以使其适合Zabbix。

登录 MySQL 作为根用户,使用您在 MySQL 服务器安装过程中设置的根密码:

1mysql -uroot -p

创建具有 UTF-8 字符支持的 Zabbix 数据库:

1create database zabbix character set utf8 collate utf8_bin;

然后创建一个用户,Zabbix服务器将使用,给它访问新数据库,并为用户设置密码:

1grant all privileges on zabbix.* to zabbix@localhost identified by 'your_password';

然后应用这些新许可:

1flush privileges;

这关心用户和数据库. 退出数据库控制台。

1quit;

接下来,我们必须导入最初的方案和数据,而Zabbix安装为我们提供了为我们设置这个文件。

运行以下命令来设置方案并将数据导入到zabbix数据库中,我们将使用zcat,因为文件中的数据已被压缩。

1zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix

输入提示时配置的 zabbix MySQL 用户的密码。

如果您看到错误 ERROR 1045 (28000):用户 'zabbix'@'localhost' 的访问被拒绝(使用密码:YES),请确保您使用了用户 'zabbix' 的密码,而不是用户 'root' 的密码。

为了让 Zabbix 服务器使用此数据库,您需要在 Zabbix 服务器配置文件中设置数据库密码。

1sudo nano /etc/zabbix/zabbix_server.conf

查找文件的以下部分:

1[label /etc/zabbix/zabbix_server.conf]
2### Option: DBPassword                           
3#       Database password. Ignored for SQLite.   
4#       Comment this line if no password is used.
5#                                                
6# Mandatory: no                                  
7# Default:                                       
8# DBPassword=

文件中的这些评论解释了如何连接到数据库. 我们需要将文件中的DBPassword值设置为我们的数据库用户的密码。

1[label /etc/zabbix/zabbix_server.conf]
2DBPassword=your_zabbix_mysql_password

这需要 Zabbix 服务器配置,但我们必须对我们的 PHP 设置进行一些修改,以便 Zabbix 网页接口正常工作。

第3步:为Zabbix配置PHP

Zabbix Web 接口是用 PHP 编写的,需要一些特殊的 PHP 服务器设置。 Zabbix 安装过程创建了一个包含这些设置的 Apache 配置文件,位于目录 /etc/zabbix 中,由 Apache 自动加载。

1sudo nano /etc/zabbix/apache.conf

该文件包含满足 Zabbix Web 界面所需的 PHP 设置,您唯一需要做的更改是设置适当的时区,默认情况下评论。

 1[label /etc/zabbix/apache.conf]
 2...
 3<IfModule mod_php7.c>
 4    php_value max_execution_time 300
 5    php_value memory_limit 128M
 6    php_value post_max_size 16M
 7    php_value upload_max_filesize 2M
 8    php_value max_input_time 300
 9    php_value always_populate_raw_post_data -1
10    # php_value date.timezone Europe/Riga
11</IfModule>

你可以使用此 支持的时区列表来找到适合你的时区,然后保存并关闭文件。

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

1sudo systemctl restart apache2

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

1sudo systemctl start zabbix-server

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

1sudo systemctl status zabbix-server

您将看到以下状态:

1[secondary_label Output]
2 zabbix-server.service - Zabbix Server
3   Loaded: loaded (/lib/systemd/system/zabbix-server.service; disabled; vendor preset: enabled)
4   Active: :active (running) since Thu 2017-06-08 06:40:43 UTC; 6s ago
5  Process: 15201 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
6  ...

最后,允许服务器在启动时间启动:

1sudo systemctl enable zabbix-server

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

步骤 4 — 配置 Zabbix Web 接口的设置

网页界面允许我们查看报告并添加我们想要监控的主机,但它需要一些初始设置才能使用它。 启动您的浏览器并前往地址 http://your_zabbix_server_ip_address/zabbix/。 在第一个屏幕上,您将看到一个欢迎消息。 点击 下一步继续。

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

Prerequisites

此表中的所有值都必须是 OK,所以请确认它们是否存在. 请务必向下滚动并查看所有前提条件。

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

DB Connection

我們告訴 Zabbix 伺服器我們的資料庫,但 Zabbix 網頁接口也需要存取資料庫來管理主機和閱讀資料,因此請輸入您在步驟 2 中設定的 MySQL 認證,然後點一下 ** 下一步** 進行。

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

Zabbix Server Details

Name是可选的;它用于在 Web 界面中将一个服务器与另一个服务器区分开来,如果您有多个监控服务器。

下一个屏幕将显示预安装总结,这样你就可以确认一切都是正确的。

Summary

点击下一步继续到最后的屏幕。

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

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

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

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

登录到第二个服务器,我们将称之为监控服务器

1[environment local]
2ssh sammy@your_monitored_server_ip_address

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

1[environment second]
2wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb
3sudo dpkg -i zabbix-release_3.2-1+xenial_all.deb

接下来,更新包索引:

1[environment second]
2sudo apt-get update

然后安装 Zabbix 代理:

1[environment second]
2sudo apt-get install zabbix-agent

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

首先,创建一个PSK:

1[environment second]
2sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"

显示密钥,以便您可以在某个地方复制它. 您将需要它来配置主机。

1[environment second]
2cat /etc/zabbix/zabbix_agentd.psk

钥匙将看起来像这样:

1[secondary_label Output]
2cd12686e166a80aa09a227ae5f97834eaa3d5ae686d2ae39590f17ef85dd6de5

现在,编辑 Zabbix 代理设置以建立与 Zabbix 服务器的安全连接。

1[environment second]
2sudo nano /etc/zabbix/zabbix_agentd.conf

该文件中的每个设置都通过信息性评论记录在整个文件中,但您只需要编辑其中一些。

首先,您需要编辑 Zabbix 服务器的 IP 地址。

 1[label /etc/zabbix/zabbix_agentd.conf]
 2### Option: Server
 3#       List of comma delimited IP addresses (or hostnames) of Zabbix servers.
 4#       Incoming connections will be accepted only from the hosts listed here.
 5#       If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally.
 6#
 7# Mandatory: no
 8# Default:
 9# Server=
10
11Server=127.0.0.1

将默认值更改为您的 Zabbix 服务器的 IP:

1[label /etc/zabbix/zabbix_agentd.conf]
2Server=your_zabbix_server_ip_address

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

 1[label /etc/zabbix/zabbix_agentd.conf]
 2### Option: TLSConnect
 3#       How the agent should connect to server or proxy. Used for active checks.
 4#       Only one value can be specified:
 5#               unencrypted - connect without encryption
 6#               psk         - connect using TLS and a pre-shared key
 7#               cert        - connect using TLS and a certificate
 8#
 9# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
10# Default:
11# TLSConnect=unencrypted

然后添加此行以配置预共享密钥支持:

1[label /etc/zabbix/zabbix_agentd.conf]
2TLSConnect=psk

接下来,找到TLSAccept部分,它看起来像这样:

 1[label /etc/zabbix/zabbix_agentd.conf]
 2### Option: TLSAccept
 3#       What incoming connections to accept.
 4#       Multiple values can be specified, separated by comma:
 5#               unencrypted - accept connections without encryption
 6#               psk         - accept connections secured with TLS and a pre-shared key
 7#               cert        - accept connections secured with TLS and a certificate
 8#
 9# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
10# Default:
11# TLSAccept=unencrypted

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

1[label /etc/zabbix/zabbix_agentd.conf]
2TLSAccept=psk

接下来,找到TLSPSKIidentity部分,它看起来像这样:

1[label /etc/zabbix/zabbix_agentd.conf]
2### Option: TLSPSKIdentity
3#       Unique, case sensitive string used to identify the pre-shared key.
4#
5# Mandatory: no
6# Default:
7# TLSPSKIdentity=

选择一个独特的名称来识别您的预共享密钥,通过添加此行:

1[label /etc/zabbix/zabbix_agentd.conf]
2TLSPSKIdentity=PSK 001

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

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

1[label /etc/zabbix/zabbix_agentd.conf]
2### Option: TLSPSKFile
3#       Full pathname of a file containing the pre-shared key.
4#
5# Mandatory: no
6# Default:
7# TLSPSKFile=

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

1[label /etc/zabbix/zabbix_agentd.conf]
2TLSPSKFile=/etc/zabbix/zabbix_agentd.psk

现在您可以启动 Zabbix 代理,并将其设置为在启动时启动:

1[environment second]
2sudo systemctl start zabbix-agent
3sudo systemctl enable zabbix-agent

要得到良好的测量,请检查 Zabbix 代理是否正常运行:

1[environment second]
2sudo systemctl status zabbix-agent

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

1[secondary_label Output]
2 zabbix-agent.service - Zabbix Agent
3   Loaded: loaded (/lib/systemd/system/zabbix-agent.service; disabled; vendor preset: enabled)
4   Active: active (running) since Thu 2017-06-08 08:33:52 UTC; 4s ago
5  Process: 18185 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
6  ...

我们的代理现在已经准备好将数据发送到 Zabbix 服务器,但为了使用它,我们必须从服务器的 Web 控制台连接到它。

美元(注)

** 注意:** 如果您正在使用 UFW,请将其配置为允许连接到端口 10050:

1[environment second]
2sudo ufw allow 10050/tcp

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

步骤 6 — 将新主机添加到 Zabbix 服务器

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

登录到 Zabbix 服务器的 Web 接口,通过导航到 http://your_zabbix_server_ip_address/zabbix/`。

The Zabbix login screen

登录后,点击配置,然后点击主机在顶部导航栏中,然后点击创建主机按钮在屏幕的右上角。

Creating a host

调整 主机名称和 ** IP 地址**以反映客户端机器的主机名称和 IP 地址,然后将主机添加到一个组中,从列表中选择一个组,或创建自己的组。

Adding a template to the host

搜索字段中键入Linux 模板,然后单击添加来添加这个模板到主机。

接下来,导航到 Encryption 选取 PSK 对于 连接到主机从主机的连接. 然后将 **PSK 身份设置为 PSK 001,这是我们先前配置的 Zabbix 代理人的 TLSPSKIidentity 设置的值。 然后将 PSK 值设置为您为 Zabbix 代理人生成的密钥。 这是存储在代理机上的 /etc/zabbix/zabbix_agentd.psk 文件中。

Setting up the encryption.

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

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

Zabbix shows your new host.

几秒钟后,您可以导航到 ** 监控**,然后到 ** 最新数据**,查看您的代理的数据。

要确保事情正常工作,请关闭监控服务器,以便您可以看到Zabbix如何提醒您出现问题。

Zabbix shows you a warning about the host that's offline.

如果你有额外的服务器,你需要监控,登录每个主机,安装Zabbix代理,生成PSK,配置代理,并将主机添加到Web界面,按照您添加第一个主机的相同步骤。

结论

在本教程中,您了解了如何设置一个简单而安全的监控解决方案,这将有助于您监控您的服务器的状态. 它现在可以提醒您出现问题,并且您有机会根据获得的数据绘制一些图表,以便您可以分析并相应地计划。

Published At
Categories with 技术
comments powered by Disqus